@lingui/cli
Version:
Lingui CLI to extract messages, compile catalogs, and manage translation workflows
39 lines (38 loc) • 1.49 kB
JavaScript
import { transformAsync } from "@babel/core";
import fs from "fs";
import path from "path";
import { babelRe, getBabelParserOptions } from "../api/extractors/babel.js";
import linguiMacroPlugin from "@lingui/babel-plugin-lingui-macro";
export const pluginLinguiMacro = (options) => ({
name: "linguiMacro",
setup(build) {
build.onLoad({ filter: babelRe, namespace: "" }, async (args) => {
const filename = path.relative(process.cwd(), args.path);
const contents = await fs.promises.readFile(args.path, "utf8");
const hasMacroRe = /from ["']@lingui(\/.+)?\/macro["']/g;
if (!hasMacroRe.test(contents)) {
// let esbuild process file as usual
return undefined;
}
const result = await transformAsync(contents, {
babelrc: false,
configFile: false,
filename: filename,
sourceMaps: "inline",
parserOpts: {
plugins: getBabelParserOptions(filename, {}),
},
plugins: [
[
linguiMacroPlugin,
{
descriptorFields: "all",
linguiConfig: options.linguiConfig,
},
],
],
});
return { contents: result.code, loader: "tsx" };
});
},
});