enso/app/ydoc-server-polyglot/build.mjs
Dmitry Bushev 47943a2e62
Add compression to the metadata code snapshot (#11470)
close #11420

Changelog:
- update: add zlib compression to the `snapshot` metadata field
- add: implement nodejs `zlib` for polyglot ydoc-server
- add: implement nodejs `Buffer` for polyglot ydoc-server
2024-11-05 11:57:43 +00:00

56 lines
1.3 KiB
JavaScript

import { globalExternals } from '@fal-works/esbuild-plugin-global-externals'
import esbuild from 'esbuild'
import fs from 'fs/promises'
import path from 'path'
import url from 'url'
const watchMode = process.argv[2] === 'watch'
const globals = {
'node:zlib': {
varName: 'zlib',
type: 'cjs',
},
}
const ctx = await esbuild.context({
outfile: 'dist/main.cjs',
sourcemap: 'linked',
entryPoints: ['src/main.ts'],
bundle: true,
platform: 'browser',
define: {
self: 'globalThis',
},
plugins: [usePolyglotFfi(), globalExternals(globals)],
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',
}
},
)
},
}
}