2024-01-16 14:38:05 +00:00
|
|
|
import react from '@vitejs/plugin-react-swc'
|
|
|
|
import { config } from 'dotenv'
|
|
|
|
import { defineConfig } from 'vite'
|
|
|
|
|
|
|
|
config({
|
|
|
|
path: './.env.local',
|
|
|
|
})
|
|
|
|
|
|
|
|
export const getMultiplayerServerURL = () => {
|
2024-05-21 16:20:27 +00:00
|
|
|
return process.env.MULTIPLAYER_SERVER?.replace(/^ws/, 'http')
|
|
|
|
}
|
|
|
|
|
|
|
|
function urlOrLocalFallback(mode: string, url: string | undefined, localFallbackPort: number) {
|
|
|
|
if (url) {
|
|
|
|
return JSON.stringify(url)
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode === 'development') {
|
|
|
|
// in dev, vite lets us inline javascript expressions - so we return a template string that
|
|
|
|
// will be evaluated on the client
|
|
|
|
return '`http://${location.hostname}:' + localFallbackPort + '`'
|
|
|
|
} else {
|
|
|
|
// in production, we have to fall back to a hardcoded value
|
|
|
|
return JSON.stringify(`http://localhost:${localFallbackPort}`)
|
|
|
|
}
|
2024-01-16 14:38:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// https://vitejs.dev/config/
|
2024-05-21 16:20:27 +00:00
|
|
|
export default defineConfig((env) => ({
|
2024-01-19 15:31:01 +00:00
|
|
|
plugins: [react({ tsDecorators: true })],
|
2024-01-16 14:38:05 +00:00
|
|
|
publicDir: './public',
|
|
|
|
build: {
|
|
|
|
// output source maps to .map files and include //sourceMappingURL comments in JavaScript files
|
|
|
|
// these get uploaded to Sentry and can be used for debugging
|
|
|
|
sourcemap: true,
|
|
|
|
|
|
|
|
// our svg icons break if we use data urls, so disable inline assets for now
|
|
|
|
assetsInlineLimit: 0,
|
|
|
|
},
|
|
|
|
// add backwards-compatible support for NEXT_PUBLIC_ env vars
|
|
|
|
define: {
|
|
|
|
...Object.fromEntries(
|
|
|
|
Object.entries(process.env)
|
|
|
|
.filter(([key]) => key.startsWith('NEXT_PUBLIC_'))
|
|
|
|
.map(([key, value]) => [`process.env.${key}`, JSON.stringify(value)])
|
|
|
|
),
|
2024-05-21 16:20:27 +00:00
|
|
|
'process.env.MULTIPLAYER_SERVER': urlOrLocalFallback(env.mode, getMultiplayerServerURL(), 8787),
|
|
|
|
'process.env.ASSET_UPLOAD': urlOrLocalFallback(env.mode, process.env.ASSET_UPLOAD, 8788),
|
2024-07-08 16:25:53 +00:00
|
|
|
'process.env.IMAGE_WORKER': urlOrLocalFallback(env.mode, process.env.IMAGE_WORKER, 8786),
|
2024-01-16 14:38:05 +00:00
|
|
|
'process.env.TLDRAW_ENV': JSON.stringify(process.env.TLDRAW_ENV ?? 'development'),
|
sdk: wires up tldraw to have licensing mechanisms (#4021)
For non-commercial usage of tldraw, this adds a watermark in the corner,
both for branding purposes and as an incentive for our enterprise
customers to purchase a license.
For commercial usage of tldraw, you add a license to the `<Tldraw
licenseKey={YOUR_LICENSE_KEY} />` component so that the watermark
doesn't show.
The license is a signed key that has various bits of information in it,
such as:
- license type
- hosts that the license is valid for
- whether it's an internal-only license
- expiry date
We check the license on load and show a watermark (or throw an error if
internal-only) if the license is not valid in a production environment.
This is a @MitjaBezensek, @Taha-Hassan-Git, @mimecuvalo joint
production! 🤜 🤛
### Change Type
<!-- ❗ Please select a 'Scope' label ❗️ -->
- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff
<!-- ❗ Please select a 'Type' label ❗️ -->
- [ ] `bugfix` — Bug fix
- [x] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
### Test Plan
1. We will be dogfooding on staging.tldraw.com and tldraw.com itself
before releasing this.
### Release Notes
- SDK: wires up tldraw to have licensing mechanisms.
---------
Co-authored-by: Mitja Bezenšek <mitja.bezensek@gmail.com>
Co-authored-by: Taha <98838967+Taha-Hassan-Git@users.noreply.github.com>
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-07-11 11:49:18 +00:00
|
|
|
'process.env.TLDRAW_LICENSE': JSON.stringify(process.env.TLDRAW_LICENSE ?? ''),
|
2024-01-16 14:38:05 +00:00
|
|
|
// Fall back to staging DSN for local develeopment, although you still need to
|
|
|
|
// modify the env check in 'sentry.client.config.ts' to get it reporting errors
|
|
|
|
'process.env.SENTRY_DSN': JSON.stringify(
|
|
|
|
process.env.SENTRY_DSN ??
|
|
|
|
'https://4adc43773d07854d8a60e119505182cc@o578706.ingest.sentry.io/4506178821881856'
|
|
|
|
),
|
|
|
|
},
|
|
|
|
server: {
|
|
|
|
proxy: {
|
|
|
|
'/api': {
|
2024-05-21 16:20:27 +00:00
|
|
|
target: getMultiplayerServerURL() || 'http://127.0.0.1:8787',
|
2024-01-16 14:38:05 +00:00
|
|
|
rewrite: (path) => path.replace(/^\/api/, ''),
|
|
|
|
ws: false, // we talk to the websocket directly via workers.dev
|
|
|
|
// Useful for debugging proxy issues
|
|
|
|
// configure: (proxy, _options) => {
|
|
|
|
// proxy.on('error', (err, _req, _res) => {
|
|
|
|
// console.log('[proxy] proxy error', err)
|
|
|
|
// })
|
|
|
|
// proxy.on('proxyReq', (proxyReq, req, _res) => {
|
|
|
|
// console.log('[proxy] Sending Request to the Target:', req.method, req.url)
|
|
|
|
// })
|
|
|
|
// proxy.on('proxyRes', (proxyRes, req, _res) => {
|
|
|
|
// console.log(
|
|
|
|
// '[proxy] Received Response from the Target:',
|
|
|
|
// proxyRes.statusCode,
|
|
|
|
// req.url
|
|
|
|
// )
|
|
|
|
// })
|
|
|
|
// },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2024-05-21 16:20:27 +00:00
|
|
|
}))
|