diff options
Diffstat (limited to 'scripts/build/common.mjs')
-rw-r--r-- | scripts/build/common.mjs | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/scripts/build/common.mjs b/scripts/build/common.mjs index 6143fb2..c3afc7f 100644 --- a/scripts/build/common.mjs +++ b/scripts/build/common.mjs @@ -19,22 +19,11 @@ import { execSync } from "child_process"; import esbuild from "esbuild"; import { existsSync } from "fs"; -import { readdir } from "fs/promises"; +import { readdir, readFile } from "fs/promises"; +import { join } from "path"; const watch = process.argv.includes("--watch"); -/** - * @type {esbuild.BuildOptions} - */ -export const commonOpts = { - logLevel: "info", - bundle: true, - watch, - minify: !watch, - sourcemap: watch ? "inline" : "", - legalComments: "linked" -}; - // https://github.com/evanw/esbuild/issues/619#issuecomment-751995294 /** * @type {esbuild.Plugin} @@ -103,3 +92,39 @@ export const gitHashPlugin = { })); } }; + +/** + * @type {esbuild.Plugin} + */ +export const fileIncludePlugin = { + name: "file-include-plugin", + setup: build => { + const filter = /^@fileContent\/.+$/; + build.onResolve({ filter }, args => ({ + namespace: "include-file", + path: args.path, + pluginData: { + path: join(args.resolveDir, args.path.slice("include-file/".length)) + } + })); + build.onLoad({ filter, namespace: "include-file" }, async ({ pluginData: { path } }) => { + const [name, format] = path.split(";"); + return { + contents: `export default ${JSON.stringify(await readFile(name, format ?? "utf-8"))}` + }; + }); + } +}; + +/** + * @type {esbuild.BuildOptions} + */ +export const commonOpts = { + logLevel: "info", + bundle: true, + watch, + minify: !watch, + sourcemap: watch ? "inline" : "", + legalComments: "linked", + plugins: [fileIncludePlugin] +}; |