42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
import { mkdir, writeFile } from "node:fs/promises";
|
|
import { isBuiltin } from "node:module";
|
|
import { resolve } from "node:path";
|
|
import { build } from "esbuild";
|
|
|
|
import { buildEditorLanguageLibraries } from "./editor-language-libraries";
|
|
|
|
const repositoryRoot = resolve(import.meta.dirname, "../../..");
|
|
const destination = resolve(repositoryRoot, "apps/nextjs/public/__widget-editor");
|
|
const libraries = buildEditorLanguageLibraries(repositoryRoot);
|
|
await mkdir(destination, { recursive: true });
|
|
await writeFile(resolve(destination, "types.json"), JSON.stringify(libraries));
|
|
await build({
|
|
absWorkingDir: repositoryRoot,
|
|
entryPoints: ["packages/custom-widgets/src/workbench/package-language/worker.ts"],
|
|
outfile: resolve(destination, "worker.js"),
|
|
bundle: true,
|
|
platform: "browser",
|
|
format: "esm",
|
|
target: "es2022",
|
|
minify: true,
|
|
legalComments: "linked",
|
|
plugins: [
|
|
{
|
|
name: "browser-only-typescript-host",
|
|
setup(builder) {
|
|
// TypeScript detects browsers before creating ts.sys; no Node filesystem is available in the worker.
|
|
builder.onResolve({ filter: /^(?:node:)?(?:fs|path|os|crypto|buffer|inspector|perf_hooks)$/ }, (args) => {
|
|
if (isBuiltin(args.path)) return { path: args.path, namespace: "browser-typescript-node" };
|
|
return undefined;
|
|
});
|
|
builder.onLoad({ filter: /.*/, namespace: "browser-typescript-node" }, () => ({
|
|
contents: "export default {};",
|
|
}));
|
|
},
|
|
},
|
|
],
|
|
});
|
|
console.info(
|
|
`Built local widget editor worker with ${Object.keys(libraries.files).length} declaration files (SDK ${libraries.sdkVersion}, TypeScript ${libraries.typescriptVersion})`,
|
|
);
|