enso/app/ydoc-server-polyglot/build.mjs
Paweł Grabarz b286adaae4
Split ydoc server into separate module (#10735)
# Important Notes
The command to run the gui dev environment has been changed. Invoking the old command will print a message about that.
From now on, use `pnpm dev:gui2` in repository root.
2024-08-08 12:12:05 +00:00

49 lines
1.1 KiB
JavaScript

import esbuild from 'esbuild'
import fs from 'fs/promises'
import path from 'path'
import url from 'url'
const watchMode = process.argv[2] === 'watch'
const ctx = await esbuild.context({
outfile: 'dist/main.cjs',
sourcemap: 'linked',
entryPoints: ['src/main.ts'],
bundle: true,
platform: 'browser',
define: {
self: 'globalThis',
},
plugins: [usePolyglotFfi()],
conditions: watchMode ? ['source'] : [],
external: ['node:url'], // Not actually used, tree-shaken out
format: 'cjs',
})
if (watchMode) await ctx.watch()
else {
const result = await ctx.rebuild()
await ctx.dispose()
}
/** @type () => esbuild.Plugin */
function usePolyglotFfi() {
return {
name: 'use-polyglot-ffi',
setup(build) {
const newPath = url.fileURLToPath(new URL('./src/ffiPolyglot.ts', import.meta.url))
build.onLoad(
{
filter: /ydoc-shared.*ast(\\|\/)ffi.(js|ts)$/,
},
async () => {
return {
contents: await fs.readFile(newPath),
resolveDir: path.dirname(newPath),
loader: 'ts',
}
},
)
},
}
}