@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
54 lines (52 loc) • 1.61 kB
JavaScript
import { readFile } from "node:fs/promises";
import { join } from "node:path";
import { getProjectRequire } from "@intlayer/config/utils";
import { bundleFile } from "@intlayer/config/file";
import { builtinModules } from "node:module";
//#region src/loadDictionaries/getIntlayerBundle.ts
/**
* Rewrites bare specifiers to absolute paths on the user's disk and externalizes them
* to preserve directory context (__dirname/import.meta.url).
*/
const localResolvePlugin = (aliases, rootRequire) => {
return {
name: "local-resolve",
setup(build) {
build.onResolve({ filter: /.*/ }, (args) => {
if (aliases[args.path]) return {
path: aliases[args.path],
external: true
};
if (args.path === "defu" || args.path.startsWith("@intlayer/")) try {
return {
path: rootRequire.resolve(args.path),
external: true
};
} catch {
return null;
}
return null;
});
}
};
};
const getIntlayerBundle = async (configuration) => {
const rootRequire = getProjectRequire(configuration.system.baseDir);
const aliases = { "@intlayer/config/built": join(configuration.system.configDir, `configuration.cjs`) };
const filePath = rootRequire.resolve("intlayer");
return await bundleFile(await readFile(filePath, "utf-8"), filePath, {
bundle: true,
platform: "node",
external: [
...builtinModules,
...builtinModules.map((mod) => `node:${mod}`),
"vscode",
"esbuild"
],
minify: true,
plugins: [localResolvePlugin(aliases, rootRequire)]
}) ?? "";
};
//#endregion
export { getIntlayerBundle };
//# sourceMappingURL=getIntlayerBundle.mjs.map