babel-plugin-closure-templates
Version:
57 lines (55 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _helperPluginUtils = require("@babel/helper-plugin-utils");
var _closureTemplatesCompiler = require("closure-templates-compiler");
var _path = require("path");
module.exports = (0, _helperPluginUtils.declare)((api, options, _dirname) => {
api.assertVersion(7);
const parserOverride = (...args) => parserOverrideWithPluginOptions(options, ...args);
return {
// @ts-expect-error https://babeljs.io/docs/babel-parser#will-the-babel-parser-support-a-plugin-system
parserOverride,
visitor: {}
};
});
function parserOverrideWithPluginOptions(pluginOptions, ...rest) {
let [code] = rest;
const [, opts, parse] = rest;
const dangerouslyAlwaysTryBuilding = pluginOptions?.dangerouslyAlwaysTryBuilding ?? false;
const filename =
// eslint-disable-next-line @typescript-eslint/no-explicit-any
opts?.sourceFilename ?? opts?.sourceFileName ?? void 0;
const compile = () => {
code = (0, _closureTemplatesCompiler.compileSoyToJsSync)(code, filename);
};
if (!shouldSkip(filename, pluginOptions)) {
if (isValidSoyFile(code, filename, pluginOptions)) {
compile();
} else if (dangerouslyAlwaysTryBuilding) {
try {
compile();
} catch {}
}
}
return parse(code, opts);
}
const DEFAULT_SOY_EXTENSIONS = [".soy"];
function isValidSoyFile(_code, filename, pluginOptions) {
if (filename == null || typeof filename !== "string") {
return false;
}
const soyExtensions = pluginOptions?.soyExtensions ?? DEFAULT_SOY_EXTENSIONS;
return soyExtensions.includes((0, _path.extname)(filename));
}
function shouldSkip(filename, pluginOptions) {
if (filename == null || typeof filename !== "string") {
return false;
}
const omitExtensions = pluginOptions?.omitExtensions;
if (omitExtensions != null && omitExtensions.some(ext => (0, _path.basename)(filename).endsWith(ext))) {
return true;
}
return false;
}