| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- "use strict";
 
- Object.defineProperty(exports, "__esModule", {
 
-   value: true
 
- });
 
- exports.default = parseAndBuildMetadata;
 
- var _t = require("@babel/types");
 
- var _parser = require("@babel/parser");
 
- var _codeFrame = require("@babel/code-frame");
 
- const {
 
-   isCallExpression,
 
-   isExpressionStatement,
 
-   isFunction,
 
-   isIdentifier,
 
-   isJSXIdentifier,
 
-   isNewExpression,
 
-   isPlaceholder,
 
-   isStatement,
 
-   isStringLiteral,
 
-   removePropertiesDeep,
 
-   traverse
 
- } = _t;
 
- const PATTERN = /^[_$A-Z0-9]+$/;
 
- function parseAndBuildMetadata(formatter, code, opts) {
 
-   const {
 
-     placeholderWhitelist,
 
-     placeholderPattern,
 
-     preserveComments,
 
-     syntacticPlaceholders
 
-   } = opts;
 
-   const ast = parseWithCodeFrame(code, opts.parser, syntacticPlaceholders);
 
-   removePropertiesDeep(ast, {
 
-     preserveComments
 
-   });
 
-   formatter.validate(ast);
 
-   const state = {
 
-     syntactic: {
 
-       placeholders: [],
 
-       placeholderNames: new Set()
 
-     },
 
-     legacy: {
 
-       placeholders: [],
 
-       placeholderNames: new Set()
 
-     },
 
-     placeholderWhitelist,
 
-     placeholderPattern,
 
-     syntacticPlaceholders
 
-   };
 
-   traverse(ast, placeholderVisitorHandler, state);
 
-   return Object.assign({
 
-     ast
 
-   }, state.syntactic.placeholders.length ? state.syntactic : state.legacy);
 
- }
 
- function placeholderVisitorHandler(node, ancestors, state) {
 
-   var _state$placeholderWhi;
 
-   let name;
 
-   let hasSyntacticPlaceholders = state.syntactic.placeholders.length > 0;
 
-   if (isPlaceholder(node)) {
 
-     if (state.syntacticPlaceholders === false) {
 
-       throw new Error("%%foo%%-style placeholders can't be used when " + "'.syntacticPlaceholders' is false.");
 
-     }
 
-     name = node.name.name;
 
-     hasSyntacticPlaceholders = true;
 
-   } else if (hasSyntacticPlaceholders || state.syntacticPlaceholders) {
 
-     return;
 
-   } else if (isIdentifier(node) || isJSXIdentifier(node)) {
 
-     name = node.name;
 
-   } else if (isStringLiteral(node)) {
 
-     name = node.value;
 
-   } else {
 
-     return;
 
-   }
 
-   if (hasSyntacticPlaceholders && (state.placeholderPattern != null || state.placeholderWhitelist != null)) {
 
-     throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'");
 
-   }
 
-   if (!hasSyntacticPlaceholders && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !((_state$placeholderWhi = state.placeholderWhitelist) != null && _state$placeholderWhi.has(name))) {
 
-     return;
 
-   }
 
-   ancestors = ancestors.slice();
 
-   const {
 
-     node: parent,
 
-     key
 
-   } = ancestors[ancestors.length - 1];
 
-   let type;
 
-   if (isStringLiteral(node) || isPlaceholder(node, {
 
-     expectedNode: "StringLiteral"
 
-   })) {
 
-     type = "string";
 
-   } else if (isNewExpression(parent) && key === "arguments" || isCallExpression(parent) && key === "arguments" || isFunction(parent) && key === "params") {
 
-     type = "param";
 
-   } else if (isExpressionStatement(parent) && !isPlaceholder(node)) {
 
-     type = "statement";
 
-     ancestors = ancestors.slice(0, -1);
 
-   } else if (isStatement(node) && isPlaceholder(node)) {
 
-     type = "statement";
 
-   } else {
 
-     type = "other";
 
-   }
 
-   const {
 
-     placeholders,
 
-     placeholderNames
 
-   } = !hasSyntacticPlaceholders ? state.legacy : state.syntactic;
 
-   placeholders.push({
 
-     name,
 
-     type,
 
-     resolve: ast => resolveAncestors(ast, ancestors),
 
-     isDuplicate: placeholderNames.has(name)
 
-   });
 
-   placeholderNames.add(name);
 
- }
 
- function resolveAncestors(ast, ancestors) {
 
-   let parent = ast;
 
-   for (let i = 0; i < ancestors.length - 1; i++) {
 
-     const {
 
-       key,
 
-       index
 
-     } = ancestors[i];
 
-     if (index === undefined) {
 
-       parent = parent[key];
 
-     } else {
 
-       parent = parent[key][index];
 
-     }
 
-   }
 
-   const {
 
-     key,
 
-     index
 
-   } = ancestors[ancestors.length - 1];
 
-   return {
 
-     parent,
 
-     key,
 
-     index
 
-   };
 
- }
 
- function parseWithCodeFrame(code, parserOpts, syntacticPlaceholders) {
 
-   const plugins = (parserOpts.plugins || []).slice();
 
-   if (syntacticPlaceholders !== false) {
 
-     plugins.push("placeholders");
 
-   }
 
-   parserOpts = Object.assign({
 
-     allowReturnOutsideFunction: true,
 
-     allowSuperOutsideMethod: true,
 
-     sourceType: "module"
 
-   }, parserOpts, {
 
-     plugins
 
-   });
 
-   try {
 
-     return (0, _parser.parse)(code, parserOpts);
 
-   } catch (err) {
 
-     const loc = err.loc;
 
-     if (loc) {
 
-       err.message += "\n" + (0, _codeFrame.codeFrameColumns)(code, {
 
-         start: loc
 
-       });
 
-       err.code = "BABEL_TEMPLATE_PARSE_ERROR";
 
-     }
 
-     throw err;
 
-   }
 
- }
 
- //# sourceMappingURL=parse.js.map
 
 
  |