UNPKG

babel-plugin-closure-templates

Version:
57 lines (55 loc) 1.97 kB
"use strict"; 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; }