@lingui/cli
Version:
Lingui CLI to extract messages, compile catalogs, and manage translation workflows
76 lines (75 loc) • 2.75 kB
JavaScript
import { pluginLinguiMacro } from "./linguiEsbuildPlugin.js";
import { buildIncludeDepsFilter } from "./buildIncludeDepsFilter.js";
function createExtRegExp(extensions) {
return new RegExp("\\.(?:" + extensions.join("|") + ")(?:\\?.*)?$");
}
export async function bundleSource(linguiConfig, extractorConfig, entryPoints, outDir, rootDir) {
const esbuild = await import("esbuild");
const excludeExtensions = extractorConfig.excludeExtensions || [
"ico",
"pot",
"xliff",
"woff2",
"woff",
"eot",
"gif",
"otf",
"ttf",
"mp4",
"svg",
"png",
"css",
"sass",
"scss",
"less",
"jpg",
];
const esbuildOptions = {
entryPoints: entryPoints,
outExtension: { ".js": ".jsx" },
jsx: "preserve",
bundle: true,
platform: "node",
target: ["esnext"],
format: "esm",
splitting: false,
treeShaking: true,
outdir: outDir,
sourcemap: "inline",
sourceRoot: outDir,
sourcesContent: false,
metafile: true,
plugins: [
pluginLinguiMacro({ linguiConfig }),
{
name: "externalize-deps",
setup(build) {
const shouldInclude = buildIncludeDepsFilter(extractorConfig.includeDeps || []);
// considers all import paths that "look like" package imports in the original source code to be package imports.
// Specifically import paths that don't start with a path segment of / or . or .. are considered to be package imports.
// The only two exceptions to this rule are subpath imports (which start with a # character) and deps specified in the `includeDeps`
build.onResolve({ filter: /^[^.#/].*/ }, async (args) => {
if (shouldInclude(args.path) || args.kind === "entry-point") {
return { external: false };
}
return {
external: true,
};
});
},
},
{
name: "externalize-files",
setup(build) {
build.onResolve({ filter: createExtRegExp(excludeExtensions) }, () => ({
external: true,
}));
},
},
],
};
const bundleResult = await esbuild.build(extractorConfig.resolveEsbuildOptions
? extractorConfig.resolveEsbuildOptions(esbuildOptions)
: esbuildOptions);
return bundleResult.metafile;
}