mirror of
https://github.com/enso-org/enso.git
synced 2024-12-23 20:53:51 +03:00
49 lines
1.1 KiB
JavaScript
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',
|
||
|
}
|
||
|
},
|
||
|
)
|
||
|
},
|
||
|
}
|
||
|
}
|