@babel/template
Advanced tools
+3
-3
@@ -15,3 +15,3 @@ import { ParserOptions } from '@babel/parser'; | ||
| */ | ||
| placeholderWhitelist?: Set<string>; | ||
| placeholderAllowlist?: Set<string>; | ||
| /** | ||
@@ -22,3 +22,3 @@ * A pattern to search for when looking for Identifier and StringLiteral | ||
| * 'false' will disable placeholder searching entirely, leaving only the | ||
| * 'placeholderWhitelist' value to find replacements. | ||
| * 'placeholderAllowlist' value to find replacements. | ||
| * | ||
@@ -37,3 +37,3 @@ * Defaults to /^[_$A-Z0-9]+$/. | ||
| * 'true' to use %%foo%% style placeholders, 'false' to use legacy placeholders | ||
| * described by placeholderPattern or placeholderWhitelist. | ||
| * described by placeholderPattern or placeholderAllowlist. | ||
| * When it is not set, it behaves as 'true' if there are syntactic placeholders, | ||
@@ -40,0 +40,0 @@ * otherwise as 'false'. |
+21
-16
@@ -60,3 +60,3 @@ import * as _t from '@babel/types'; | ||
| const { | ||
| placeholderWhitelist = a.placeholderWhitelist, | ||
| placeholderAllowlist = a.placeholderAllowlist, | ||
| placeholderPattern = a.placeholderPattern, | ||
@@ -71,3 +71,3 @@ preserveComments = a.preserveComments, | ||
| }, | ||
| placeholderWhitelist, | ||
| placeholderAllowlist, | ||
| placeholderPattern, | ||
@@ -82,4 +82,9 @@ preserveComments, | ||
| } | ||
| if (opts != null && Object.hasOwn(opts, "placeholderWhitelist")) { | ||
| if (!Object.hasOwn(opts, "placeholderAllowlist")) { | ||
| throw new Error("The 'placeholderWhitelist' option has been renamed to " + "'placeholderAllowlist'. Please update your configuration."); | ||
| } | ||
| } | ||
| const { | ||
| placeholderWhitelist, | ||
| placeholderAllowlist, | ||
| placeholderPattern, | ||
@@ -90,4 +95,4 @@ preserveComments, | ||
| } = opts || {}; | ||
| if (placeholderWhitelist != null && !(placeholderWhitelist instanceof Set)) { | ||
| throw new Error("'.placeholderWhitelist' must be a Set, null, or undefined"); | ||
| if (placeholderAllowlist != null && !(placeholderAllowlist instanceof Set)) { | ||
| throw new Error("'.placeholderAllowlist' must be a Set, null, or undefined"); | ||
| } | ||
@@ -103,8 +108,8 @@ if (placeholderPattern != null && !(placeholderPattern instanceof RegExp) && placeholderPattern !== false) { | ||
| } | ||
| if (syntacticPlaceholders === true && (placeholderWhitelist != null || placeholderPattern != null)) { | ||
| throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'"); | ||
| if (syntacticPlaceholders === true && (placeholderAllowlist != null || placeholderPattern != null)) { | ||
| throw new Error("'.placeholderAllowlist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'"); | ||
| } | ||
| return { | ||
| parser, | ||
| placeholderWhitelist: placeholderWhitelist || undefined, | ||
| placeholderAllowlist: placeholderAllowlist || undefined, | ||
| placeholderPattern: placeholderPattern == null ? undefined : placeholderPattern, | ||
@@ -143,3 +148,3 @@ preserveComments: preserveComments == null ? undefined : preserveComments, | ||
| const { | ||
| placeholderWhitelist, | ||
| placeholderAllowlist, | ||
| placeholderPattern, | ||
@@ -163,3 +168,3 @@ preserveComments = false, | ||
| }, | ||
| placeholderWhitelist, | ||
| placeholderAllowlist, | ||
| placeholderPattern, | ||
@@ -192,6 +197,6 @@ syntacticPlaceholders | ||
| } | ||
| if (hasSyntacticPlaceholders && (state.placeholderPattern != null || state.placeholderWhitelist != null)) { | ||
| throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'"); | ||
| if (hasSyntacticPlaceholders && (state.placeholderPattern != null || state.placeholderAllowlist != null)) { | ||
| throw new Error("'.placeholderAllowlist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'"); | ||
| } | ||
| if (!hasSyntacticPlaceholders && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !state.placeholderWhitelist?.has(name)) { | ||
| if (!hasSyntacticPlaceholders && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !state.placeholderAllowlist?.has(name)) { | ||
| return; | ||
@@ -302,3 +307,3 @@ } | ||
| placeholder you may want to consider passing one of the following options to @babel/template: | ||
| - { placeholderPattern: false, placeholderWhitelist: new Set(['${placeholderName}'])} | ||
| - { placeholderPattern: false, placeholderAllowlist: new Set(['${placeholderName}'])} | ||
| - { placeholderPattern: /^${placeholderName}$/ }`); | ||
@@ -458,3 +463,3 @@ } | ||
| parser: opts.parser, | ||
| placeholderWhitelist: new Set(names.concat(opts.placeholderWhitelist ? Array.from(opts.placeholderWhitelist) : [])), | ||
| placeholderAllowlist: new Set(names.concat(opts.placeholderAllowlist ? Array.from(opts.placeholderAllowlist) : [])), | ||
| placeholderPattern: opts.placeholderPattern, | ||
@@ -540,3 +545,3 @@ preserveComments: opts.preserveComments, | ||
| const program = createTemplateBuilder(program$1); | ||
| var index = Object.assign(smart.bind(undefined), { | ||
| const index = Object.assign(smart.bind(undefined), { | ||
| smart, | ||
@@ -543,0 +548,0 @@ statement, |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/formatters.ts","../src/options.ts","../src/parse.ts","../src/populate.ts","../src/string.ts","../src/literal.ts","../src/builder.ts","../src/index.ts"],"sourcesContent":["import { assertExpressionStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nexport type Formatter<T> = {\n code: (source: string) => string;\n validate: (ast: t.File) => void;\n unwrap: (ast: t.File) => T;\n};\n\nfunction makeStatementFormatter<T>(\n fn: (statements: t.Statement[]) => T,\n): Formatter<T> {\n return {\n // We need to prepend a \";\" to force statement parsing so that\n // ExpressionStatement strings won't be parsed as directives.\n // Alongside that, we also prepend a comment so that when a syntax error\n // is encountered, the user will be less likely to get confused about\n // where the random semicolon came from.\n code: str => `/* @babel/template */;\\n${str}`,\n validate: () => {},\n unwrap: (ast: t.File): T => {\n return fn(ast.program.body.slice(1));\n },\n };\n}\n\nexport const smart = makeStatementFormatter(body => {\n if (body.length > 1) {\n return body;\n } else {\n return body[0];\n }\n});\n\nexport const statements = makeStatementFormatter(body => body);\n\nexport const statement = makeStatementFormatter(body => {\n // We do this validation when unwrapping since the replacement process\n // could have added or removed statements.\n if (body.length === 0) {\n throw new Error(\"Found nothing to return.\");\n }\n if (body.length > 1) {\n throw new Error(\"Found multiple statements but wanted one\");\n }\n\n return body[0];\n});\n\nexport const expression: Formatter<t.Expression> = {\n code: str => `(\\n${str}\\n)`,\n validate: ast => {\n if (ast.program.body.length > 1) {\n throw new Error(\"Found multiple statements but wanted one\");\n }\n if (expression.unwrap(ast).start === 0) {\n throw new Error(\"Parse result included parens.\");\n }\n },\n unwrap: ({ program }) => {\n const [stmt] = program.body;\n assertExpressionStatement(stmt);\n return stmt.expression;\n },\n};\n\nexport const program: Formatter<t.Program> = {\n code: str => str,\n validate: () => {},\n unwrap: ast => ast.program,\n};\n","import type { ParserOptions as ParserOpts } from \"@babel/parser\";\n\nexport type { ParserOpts };\n\n/**\n * These are the options that 'babel-template' actually accepts and typechecks\n * when called. All other options are passed through to the parser.\n */\nexport type PublicOpts = {\n /**\n * A set of placeholder names to automatically accept, ignoring the given\n * pattern entirely.\n *\n * This option can be used when using %%foo%% style placeholders.\n */\n placeholderWhitelist?: Set<string>;\n /**\n * A pattern to search for when looking for Identifier and StringLiteral\n * nodes that can be replaced.\n *\n * 'false' will disable placeholder searching entirely, leaving only the\n * 'placeholderWhitelist' value to find replacements.\n *\n * Defaults to /^[_$A-Z0-9]+$/.\n *\n * This option can be used when using %%foo%% style placeholders.\n */\n placeholderPattern?: RegExp | false;\n /**\n * 'true' to pass through comments from the template into the resulting AST,\n * or 'false' to automatically discard comments. Defaults to 'false'.\n */\n preserveComments?: boolean;\n /**\n * 'true' to use %%foo%% style placeholders, 'false' to use legacy placeholders\n * described by placeholderPattern or placeholderWhitelist.\n * When it is not set, it behaves as 'true' if there are syntactic placeholders,\n * otherwise as 'false'.\n */\n syntacticPlaceholders?: boolean | null;\n} & ParserOpts;\n\nexport type TemplateOpts = {\n parser: ParserOpts;\n placeholderWhitelist?: Set<string>;\n placeholderPattern?: RegExp | false;\n preserveComments?: boolean;\n syntacticPlaceholders?: boolean;\n};\n\nexport function merge(a: TemplateOpts, b: TemplateOpts): TemplateOpts {\n const {\n placeholderWhitelist = a.placeholderWhitelist,\n placeholderPattern = a.placeholderPattern,\n preserveComments = a.preserveComments,\n syntacticPlaceholders = a.syntacticPlaceholders,\n } = b;\n\n return {\n parser: {\n ...a.parser,\n ...b.parser,\n },\n placeholderWhitelist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders,\n };\n}\n\nexport function validate(opts: unknown): TemplateOpts {\n if (opts != null && typeof opts !== \"object\") {\n throw new Error(\"Unknown template options.\");\n }\n\n const {\n placeholderWhitelist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders,\n ...parser\n } = opts || ({} as any);\n\n if (placeholderWhitelist != null && !(placeholderWhitelist instanceof Set)) {\n throw new Error(\n \"'.placeholderWhitelist' must be a Set, null, or undefined\",\n );\n }\n\n if (\n placeholderPattern != null &&\n !(placeholderPattern instanceof RegExp) &&\n placeholderPattern !== false\n ) {\n throw new Error(\n \"'.placeholderPattern' must be a RegExp, false, null, or undefined\",\n );\n }\n\n if (preserveComments != null && typeof preserveComments !== \"boolean\") {\n throw new Error(\n \"'.preserveComments' must be a boolean, null, or undefined\",\n );\n }\n\n if (\n syntacticPlaceholders != null &&\n typeof syntacticPlaceholders !== \"boolean\"\n ) {\n throw new Error(\n \"'.syntacticPlaceholders' must be a boolean, null, or undefined\",\n );\n }\n if (\n syntacticPlaceholders === true &&\n (placeholderWhitelist != null || placeholderPattern != null)\n ) {\n throw new Error(\n \"'.placeholderWhitelist' and '.placeholderPattern' aren't compatible\" +\n \" with '.syntacticPlaceholders: true'\",\n );\n }\n\n return {\n parser,\n placeholderWhitelist: placeholderWhitelist || undefined,\n placeholderPattern:\n placeholderPattern == null ? undefined : placeholderPattern,\n preserveComments: preserveComments == null ? undefined : preserveComments,\n syntacticPlaceholders:\n syntacticPlaceholders == null ? undefined : syntacticPlaceholders,\n };\n}\n\nexport type PublicReplacements = Record<string, unknown> | unknown[];\nexport type TemplateReplacements = Record<string, unknown> | void;\n\nexport function normalizeReplacements(\n replacements: unknown,\n): TemplateReplacements {\n if (Array.isArray(replacements)) {\n return replacements.reduce((acc, replacement, i) => {\n acc[\"$\" + i] = replacement;\n return acc;\n }, {});\n } else if (typeof replacements === \"object\" || replacements == null) {\n return (replacements as any) || undefined;\n }\n\n throw new Error(\n \"Template replacements must be an array, object, null, or undefined\",\n );\n}\n","import {\n isCallExpression,\n isExpressionStatement,\n isFunction,\n isIdentifier,\n isJSXIdentifier,\n isNewExpression,\n isPlaceholder,\n isStatement,\n isStringLiteral,\n removePropertiesDeep,\n traverse,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { TraversalAncestors } from \"@babel/types\";\nimport { parse } from \"@babel/parser\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport type { TemplateOpts, ParserOpts } from \"./options.ts\";\nimport type { Formatter } from \"./formatters.ts\";\n\nexport type Metadata = {\n ast: t.File;\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n};\n\ntype PlaceholderType = \"string\" | \"param\" | \"statement\" | \"other\";\nexport type Placeholder = {\n name: string;\n resolve: (a: t.File) => { parent: t.Node; key: string; index?: number };\n type: PlaceholderType;\n isDuplicate: boolean;\n};\n\nconst PATTERN = /^[_$A-Z0-9]+$/;\n\nexport default function parseAndBuildMetadata<T>(\n formatter: Formatter<T>,\n code: string,\n opts: TemplateOpts,\n): Metadata {\n const {\n placeholderWhitelist,\n placeholderPattern,\n preserveComments = false,\n syntacticPlaceholders,\n } = opts;\n\n const ast = parseWithCodeFrame(code, opts.parser, syntacticPlaceholders);\n\n removePropertiesDeep(ast, {\n preserveComments,\n });\n\n formatter.validate(ast);\n\n const state: MetadataState = {\n syntactic: { placeholders: [], placeholderNames: new Set() },\n legacy: { placeholders: [], placeholderNames: new Set() },\n placeholderWhitelist,\n placeholderPattern,\n syntacticPlaceholders,\n };\n\n traverse(ast, placeholderVisitorHandler, state);\n\n return {\n ast,\n ...(state.syntactic.placeholders.length ? state.syntactic : state.legacy),\n };\n}\n\nfunction placeholderVisitorHandler(\n node: t.Node,\n ancestors: TraversalAncestors,\n state: MetadataState,\n) {\n let name: string;\n\n let hasSyntacticPlaceholders = state.syntactic.placeholders.length > 0;\n\n if (isPlaceholder(node)) {\n if (state.syntacticPlaceholders === false) {\n throw new Error(\n \"%%foo%%-style placeholders can't be used when \" +\n \"'.syntacticPlaceholders' is false.\",\n );\n }\n name = node.name.name;\n hasSyntacticPlaceholders = true;\n } else if (hasSyntacticPlaceholders || state.syntacticPlaceholders) {\n return;\n } else if (isIdentifier(node) || isJSXIdentifier(node)) {\n name = node.name;\n } else if (isStringLiteral(node)) {\n name = node.value;\n } else {\n return;\n }\n\n if (\n hasSyntacticPlaceholders &&\n (state.placeholderPattern != null || state.placeholderWhitelist != null)\n ) {\n // This check is also in options.js. We need it there to handle the default\n // .syntacticPlaceholders behavior.\n throw new Error(\n \"'.placeholderWhitelist' and '.placeholderPattern' aren't compatible\" +\n \" with '.syntacticPlaceholders: true'\",\n );\n }\n\n if (\n !hasSyntacticPlaceholders &&\n (state.placeholderPattern === false ||\n !(state.placeholderPattern || PATTERN).test(name)) &&\n !state.placeholderWhitelist?.has(name)\n ) {\n return;\n }\n\n // Keep our own copy of the ancestors so we can use it in .resolve().\n ancestors = ancestors.slice();\n\n const { node: parent, key } = ancestors[ancestors.length - 1];\n\n let type: PlaceholderType;\n if (\n isStringLiteral(node) ||\n isPlaceholder(node, { expectedNode: \"StringLiteral\" })\n ) {\n type = \"string\";\n } else if (\n (isNewExpression(parent) && key === \"arguments\") ||\n (isCallExpression(parent) && key === \"arguments\") ||\n (isFunction(parent) && key === \"params\")\n ) {\n type = \"param\";\n } else if (isExpressionStatement(parent) && !isPlaceholder(node)) {\n type = \"statement\";\n ancestors = ancestors.slice(0, -1);\n } else if (isStatement(node) && isPlaceholder(node)) {\n type = \"statement\";\n } else {\n type = \"other\";\n }\n\n const { placeholders, placeholderNames } = !hasSyntacticPlaceholders\n ? state.legacy\n : state.syntactic;\n\n placeholders.push({\n name,\n type,\n resolve: ast => resolveAncestors(ast, ancestors),\n isDuplicate: placeholderNames.has(name),\n });\n placeholderNames.add(name);\n}\n\nfunction resolveAncestors(ast: t.File, ancestors: TraversalAncestors) {\n let parent: t.Node = ast;\n for (let i = 0; i < ancestors.length - 1; i++) {\n const { key, index } = ancestors[i];\n\n if (index === undefined) {\n parent = (parent as any)[key];\n } else {\n parent = (parent as any)[key][index];\n }\n }\n\n const { key, index } = ancestors[ancestors.length - 1];\n\n return { parent, key, index };\n}\n\ntype MetadataState = {\n syntactic: {\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n };\n legacy: {\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n };\n placeholderWhitelist?: Set<string>;\n placeholderPattern?: RegExp | false;\n syntacticPlaceholders?: boolean;\n};\n\nfunction parseWithCodeFrame(\n code: string,\n parserOpts: ParserOpts,\n syntacticPlaceholders?: boolean,\n): t.File {\n const plugins = (parserOpts.plugins || []).slice();\n if (syntacticPlaceholders !== false) {\n plugins.push(\"placeholders\");\n }\n\n parserOpts = {\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n allowNewTargetOutsideFunction: true,\n allowSuperOutsideMethod: true,\n allowYieldOutsideFunction: true,\n sourceType: \"module\",\n ...parserOpts,\n plugins,\n };\n\n try {\n return parse(code, parserOpts);\n } catch (err) {\n const loc = err.loc;\n if (loc) {\n err.message += \"\\n\" + codeFrameColumns(code, { start: loc });\n err.code = \"BABEL_TEMPLATE_PARSE_ERROR\";\n }\n throw err;\n }\n}\n","import {\n blockStatement,\n cloneNode,\n emptyStatement,\n expressionStatement,\n identifier,\n isStatement,\n isStringLiteral,\n stringLiteral,\n validate,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport type { TemplateReplacements } from \"./options.ts\";\nimport type { Metadata, Placeholder } from \"./parse.ts\";\n\nexport default function populatePlaceholders(\n metadata: Metadata,\n replacements: TemplateReplacements,\n): t.File {\n const ast = cloneNode(metadata.ast);\n\n if (replacements) {\n metadata.placeholders.forEach(placeholder => {\n if (!Object.hasOwn(replacements, placeholder.name)) {\n const placeholderName = placeholder.name;\n\n throw new Error(\n `Error: No substitution given for \"${placeholderName}\". If this is not meant to be a\n placeholder you may want to consider passing one of the following options to @babel/template:\n - { placeholderPattern: false, placeholderWhitelist: new Set(['${placeholderName}'])}\n - { placeholderPattern: /^${placeholderName}$/ }`,\n );\n }\n });\n Object.keys(replacements).forEach(key => {\n if (!metadata.placeholderNames.has(key)) {\n throw new Error(`Unknown substitution \"${key}\" given`);\n }\n });\n }\n\n // Process in reverse order so AST mutation doesn't change indices that\n // will be needed for later calls to `placeholder.resolve()`.\n metadata.placeholders\n .slice()\n .reverse()\n .forEach(placeholder => {\n try {\n applyReplacement(\n placeholder,\n ast,\n (replacements && replacements[placeholder.name]) ?? null,\n );\n } catch (e) {\n e.message = `@babel/template placeholder \"${placeholder.name}\": ${e.message}`;\n throw e;\n }\n });\n\n return ast;\n}\n\nfunction applyReplacement(\n placeholder: Placeholder,\n ast: t.File,\n replacement: any,\n) {\n // Track inserted nodes and clone them if they are inserted more than\n // once to avoid injecting the same node multiple times.\n if (placeholder.isDuplicate) {\n if (Array.isArray(replacement)) {\n replacement = replacement.map(node => cloneNode(node));\n } else if (typeof replacement === \"object\") {\n replacement = cloneNode(replacement);\n }\n }\n\n const { parent, key, index } = placeholder.resolve(ast);\n\n if (placeholder.type === \"string\") {\n if (typeof replacement === \"string\") {\n replacement = stringLiteral(replacement);\n }\n if (!replacement || !isStringLiteral(replacement)) {\n throw new Error(\"Expected string substitution\");\n }\n } else if (placeholder.type === \"statement\") {\n if (index === undefined) {\n if (!replacement) {\n replacement = emptyStatement();\n } else if (Array.isArray(replacement)) {\n replacement = blockStatement(replacement);\n } else if (typeof replacement === \"string\") {\n replacement = expressionStatement(identifier(replacement));\n } else if (!isStatement(replacement)) {\n replacement = expressionStatement(replacement);\n }\n } else {\n if (replacement && !Array.isArray(replacement)) {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n if (!isStatement(replacement)) {\n replacement = expressionStatement(replacement);\n }\n }\n }\n } else if (placeholder.type === \"param\") {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n\n if (index === undefined) throw new Error(\"Assertion failure.\");\n } else {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n if (Array.isArray(replacement)) {\n throw new Error(\"Cannot replace single expression with an array.\");\n }\n }\n\n function set(parent: any, key: any, value: any) {\n const node = parent[key] as t.Node;\n parent[key] = value;\n if (node.type === \"Identifier\" || node.type === \"Placeholder\") {\n if (node.typeAnnotation) {\n value.typeAnnotation = node.typeAnnotation;\n }\n if (node.optional) {\n value.optional = node.optional;\n }\n if (node.decorators) {\n value.decorators = node.decorators;\n }\n }\n }\n\n if (index === undefined) {\n validate(parent, key, replacement);\n\n set(parent, key, replacement);\n } else {\n const items: t.Node[] = (parent as any)[key].slice();\n\n if (placeholder.type === \"statement\" || placeholder.type === \"param\") {\n if (replacement == null) {\n items.splice(index, 1);\n } else if (Array.isArray(replacement)) {\n items.splice(index, 1, ...replacement);\n } else {\n set(items, index, replacement);\n }\n } else {\n set(items, index, replacement);\n }\n\n validate(parent, key, items);\n (parent as any)[key] = items;\n }\n}\n","import type { Formatter } from \"./formatters.ts\";\nimport type { TemplateOpts } from \"./options.ts\";\nimport type { Metadata } from \"./parse.ts\";\nimport { normalizeReplacements } from \"./options.ts\";\nimport parseAndBuildMetadata from \"./parse.ts\";\nimport populatePlaceholders from \"./populate.ts\";\n\nexport default function stringTemplate<T>(\n formatter: Formatter<T>,\n code: string,\n opts: TemplateOpts,\n): (arg?: unknown) => T {\n code = formatter.code(code);\n\n let metadata: Metadata;\n\n return (arg?: unknown) => {\n const replacements = normalizeReplacements(arg);\n\n if (!metadata) metadata = parseAndBuildMetadata(formatter, code, opts);\n\n return formatter.unwrap(populatePlaceholders(metadata, replacements));\n };\n}\n","import type { Formatter } from \"./formatters.ts\";\nimport type { TemplateReplacements, TemplateOpts } from \"./options.ts\";\nimport { normalizeReplacements } from \"./options.ts\";\nimport parseAndBuildMetadata from \"./parse.ts\";\nimport populatePlaceholders from \"./populate.ts\";\n\nexport default function literalTemplate<T>(\n formatter: Formatter<T>,\n tpl: string[],\n opts: TemplateOpts,\n): (_: unknown[]) => (_: unknown) => T {\n const { metadata, names } = buildLiteralData(formatter, tpl, opts);\n\n return arg => {\n const defaultReplacements: TemplateReplacements = {};\n arg.forEach((replacement, i) => {\n defaultReplacements[names[i]] = replacement;\n });\n\n return (arg: unknown) => {\n const replacements = normalizeReplacements(arg);\n\n if (replacements) {\n Object.keys(replacements).forEach(key => {\n if (Object.hasOwn(defaultReplacements, key)) {\n throw new Error(\"Unexpected replacement overlap.\");\n }\n });\n }\n\n return formatter.unwrap(\n populatePlaceholders(\n metadata,\n replacements\n ? Object.assign(replacements, defaultReplacements)\n : defaultReplacements,\n ),\n );\n };\n };\n}\n\nfunction buildLiteralData<T>(\n formatter: Formatter<T>,\n tpl: string[],\n opts: TemplateOpts,\n) {\n let prefix = \"BABEL_TPL$\";\n\n const raw = tpl.join(\"\");\n\n do {\n // If there are cases where the template already contains $$BABEL_TPL$0 or any other\n // matching pattern, we keep adding \"$$\" characters until a unique prefix\n // is found.\n prefix = \"$$\" + prefix;\n } while (raw.includes(prefix));\n\n const { names, code } = buildTemplateCode(tpl, prefix);\n\n const metadata = parseAndBuildMetadata(formatter, formatter.code(code), {\n parser: opts.parser,\n\n // Explicitly include our generated names in the whitelist so users never\n // have to think about whether their placeholder pattern will match.\n placeholderWhitelist: new Set(\n names.concat(\n opts.placeholderWhitelist ? Array.from(opts.placeholderWhitelist) : [],\n ),\n ),\n placeholderPattern: opts.placeholderPattern,\n preserveComments: opts.preserveComments,\n syntacticPlaceholders: opts.syntacticPlaceholders,\n });\n\n return { metadata, names };\n}\n\nfunction buildTemplateCode(\n tpl: string[],\n prefix: string,\n): { names: string[]; code: string } {\n const names = [];\n\n let code = tpl[0];\n\n for (let i = 1; i < tpl.length; i++) {\n const value = `${prefix}${i - 1}`;\n names.push(value);\n\n code += value + tpl[i];\n }\n\n return { names, code };\n}\n","import { merge, validate } from \"./options.ts\";\nimport type {\n TemplateOpts,\n PublicOpts,\n PublicReplacements,\n} from \"./options.ts\";\nimport type { Formatter } from \"./formatters.ts\";\n\nimport stringTemplate from \"./string.ts\";\nimport literalTemplate from \"./literal.ts\";\n\nexport type TemplateBuilder<T> = {\n // Build a new builder, merging the given options with the previous ones.\n (opts: PublicOpts): TemplateBuilder<T>;\n\n // Building from a string produces an AST builder function by default.\n (tpl: string, opts?: PublicOpts): (replacements?: PublicReplacements) => T;\n\n // Building from a template literal produces an AST builder function by default.\n (\n tpl: TemplateStringsArray,\n ...args: unknown[]\n ): (replacements?: PublicReplacements) => T;\n\n // Allow users to explicitly create templates that produce ASTs, skipping\n // the need for an intermediate function.\n ast: {\n (tpl: string, opts?: PublicOpts): T;\n (tpl: TemplateStringsArray, ...args: unknown[]): T;\n };\n};\n\n// Prebuild the options that will be used when parsing a `.ast` template.\n// These do not use a pattern because there is no way for users to pass in\n// replacement patterns to begin with, and disabling pattern matching means\n// users have more flexibility in what type of content they have in their\n// template JS.\nconst NO_PLACEHOLDER: TemplateOpts = validate({\n placeholderPattern: false,\n});\n\nexport default function createTemplateBuilder<T>(\n formatter: Formatter<T>,\n defaultOpts?: TemplateOpts,\n): TemplateBuilder<T> {\n const templateFnCache = new WeakMap();\n const templateAstCache = new WeakMap();\n const cachedOpts = defaultOpts || validate(null);\n\n return Object.assign(\n ((tpl, ...args) => {\n if (typeof tpl === \"string\") {\n if (args.length > 1) throw new Error(\"Unexpected extra params.\");\n return extendedTrace(\n stringTemplate(formatter, tpl, merge(cachedOpts, validate(args[0]))),\n );\n } else if (Array.isArray(tpl)) {\n let builder = templateFnCache.get(tpl);\n if (!builder) {\n builder = literalTemplate(formatter, tpl, cachedOpts);\n templateFnCache.set(tpl, builder);\n }\n return extendedTrace(builder(args));\n } else if (typeof tpl === \"object\" && tpl) {\n if (args.length > 0) throw new Error(\"Unexpected extra params.\");\n return createTemplateBuilder(\n formatter,\n merge(cachedOpts, validate(tpl)),\n );\n }\n throw new Error(`Unexpected template param ${typeof tpl}`);\n }) as TemplateBuilder<T>,\n {\n ast: (tpl: string | string[], ...args: unknown[]) => {\n if (typeof tpl === \"string\") {\n if (args.length > 1) throw new Error(\"Unexpected extra params.\");\n return stringTemplate(\n formatter,\n tpl,\n merge(merge(cachedOpts, validate(args[0])), NO_PLACEHOLDER),\n )();\n } else if (Array.isArray(tpl)) {\n let builder = templateAstCache.get(tpl);\n if (!builder) {\n builder = literalTemplate(\n formatter,\n tpl,\n merge(cachedOpts, NO_PLACEHOLDER),\n );\n templateAstCache.set(tpl, builder);\n }\n return builder(args)();\n }\n\n throw new Error(`Unexpected template param ${typeof tpl}`);\n },\n },\n );\n}\n\nfunction extendedTrace<Arg, Result>(\n fn: (_: Arg) => Result,\n): (_: Arg) => Result {\n // Since we lazy parse the template, we get the current stack so we have the\n // original stack to append if it errors when parsing\n const rootErr = new Error();\n\n return (arg: Arg) => {\n try {\n return fn(arg);\n } catch (err) {\n // We slice off the top 3 items in the stack to remove the call to\n // 'extendedTrace', and the anonymous builder function, with the final\n // stripped line being the error message itself since we threw it\n // in the first place and it doesn't matter.\n err.stack += `\\n =============\\n${rootErr.stack!.split(\"\\n\").slice(3).join(\"\\n\")}`;\n throw err;\n }\n };\n}\n","import * as formatters from \"./formatters.ts\";\nimport createTemplateBuilder from \"./builder.ts\";\n\nexport const smart = createTemplateBuilder(formatters.smart);\nexport const statement = createTemplateBuilder(formatters.statement);\nexport const statements = createTemplateBuilder(formatters.statements);\nexport const expression = createTemplateBuilder(formatters.expression);\nexport const program = createTemplateBuilder(formatters.program);\n\ntype DefaultTemplateBuilder = typeof smart & {\n smart: typeof smart;\n statement: typeof statement;\n statements: typeof statements;\n expression: typeof expression;\n program: typeof program;\n};\n\nexport default Object.assign(smart.bind(undefined) as DefaultTemplateBuilder, {\n smart,\n statement,\n statements,\n expression,\n program,\n ast: smart.ast,\n});\n\nexport type {\n PublicOpts as Options,\n PublicReplacements as Replacements,\n} from \"./options.ts\";\n"],"names":["assertExpressionStatement","_t","makeStatementFormatter","fn","code","str","validate","unwrap","ast","program","body","slice","smart","length","statements","statement","Error","expression","start","stmt","merge","a","b","placeholderWhitelist","placeholderPattern","preserveComments","syntacticPlaceholders","parser","opts","Set","RegExp","undefined","normalizeReplacements","replacements","Array","isArray","reduce","acc","replacement","i","isCallExpression","isExpressionStatement","isFunction","isIdentifier","isJSXIdentifier","isNewExpression","isPlaceholder","isStatement","isStringLiteral","removePropertiesDeep","traverse","PATTERN","parseAndBuildMetadata","formatter","parseWithCodeFrame","state","syntactic","placeholders","placeholderNames","legacy","placeholderVisitorHandler","node","ancestors","name","hasSyntacticPlaceholders","value","test","has","parent","key","type","expectedNode","push","resolve","resolveAncestors","isDuplicate","add","index","parserOpts","plugins","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowSuperOutsideMethod","allowYieldOutsideFunction","sourceType","parse","err","loc","message","codeFrameColumns","blockStatement","cloneNode","emptyStatement","expressionStatement","identifier","stringLiteral","populatePlaceholders","metadata","forEach","placeholder","Object","hasOwn","placeholderName","keys","reverse","applyReplacement","e","map","set","typeAnnotation","optional","decorators","items","splice","stringTemplate","arg","literalTemplate","tpl","names","buildLiteralData","defaultReplacements","assign","prefix","raw","join","includes","buildTemplateCode","concat","from","NO_PLACEHOLDER","createTemplateBuilder","defaultOpts","templateFnCache","WeakMap","templateAstCache","cachedOpts","args","extendedTrace","builder","get","rootErr","stack","split","formatters","bind"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/formatters.ts","../src/options.ts","../src/parse.ts","../src/populate.ts","../src/string.ts","../src/literal.ts","../src/builder.ts","../src/index.ts"],"sourcesContent":["import { assertExpressionStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nexport type Formatter<T> = {\n code: (source: string) => string;\n validate: (ast: t.File) => void;\n unwrap: (ast: t.File) => T;\n};\n\nfunction makeStatementFormatter<T>(\n fn: (statements: t.Statement[]) => T,\n): Formatter<T> {\n return {\n // We need to prepend a \";\" to force statement parsing so that\n // ExpressionStatement strings won't be parsed as directives.\n // Alongside that, we also prepend a comment so that when a syntax error\n // is encountered, the user will be less likely to get confused about\n // where the random semicolon came from.\n code: str => `/* @babel/template */;\\n${str}`,\n validate: () => {},\n unwrap: (ast: t.File): T => {\n return fn(ast.program.body.slice(1));\n },\n };\n}\n\nexport const smart = makeStatementFormatter(body => {\n if (body.length > 1) {\n return body;\n } else {\n return body[0];\n }\n});\n\nexport const statements = makeStatementFormatter(body => body);\n\nexport const statement = makeStatementFormatter(body => {\n // We do this validation when unwrapping since the replacement process\n // could have added or removed statements.\n if (body.length === 0) {\n throw new Error(\"Found nothing to return.\");\n }\n if (body.length > 1) {\n throw new Error(\"Found multiple statements but wanted one\");\n }\n\n return body[0];\n});\n\nexport const expression: Formatter<t.Expression> = {\n code: str => `(\\n${str}\\n)`,\n validate: ast => {\n if (ast.program.body.length > 1) {\n throw new Error(\"Found multiple statements but wanted one\");\n }\n if (expression.unwrap(ast).start === 0) {\n throw new Error(\"Parse result included parens.\");\n }\n },\n unwrap: ({ program }) => {\n const [stmt] = program.body;\n assertExpressionStatement(stmt);\n return stmt.expression;\n },\n};\n\nexport const program: Formatter<t.Program> = {\n code: str => str,\n validate: () => {},\n unwrap: ast => ast.program,\n};\n","import type { ParserOptions as ParserOpts } from \"@babel/parser\";\n\nexport type { ParserOpts };\n\n/**\n * These are the options that 'babel-template' actually accepts and typechecks\n * when called. All other options are passed through to the parser.\n */\nexport type PublicOpts = {\n /**\n * A set of placeholder names to automatically accept, ignoring the given\n * pattern entirely.\n *\n * This option can be used when using %%foo%% style placeholders.\n */\n placeholderAllowlist?: Set<string>;\n /**\n * A pattern to search for when looking for Identifier and StringLiteral\n * nodes that can be replaced.\n *\n * 'false' will disable placeholder searching entirely, leaving only the\n * 'placeholderAllowlist' value to find replacements.\n *\n * Defaults to /^[_$A-Z0-9]+$/.\n *\n * This option can be used when using %%foo%% style placeholders.\n */\n placeholderPattern?: RegExp | false;\n /**\n * 'true' to pass through comments from the template into the resulting AST,\n * or 'false' to automatically discard comments. Defaults to 'false'.\n */\n preserveComments?: boolean;\n /**\n * 'true' to use %%foo%% style placeholders, 'false' to use legacy placeholders\n * described by placeholderPattern or placeholderAllowlist.\n * When it is not set, it behaves as 'true' if there are syntactic placeholders,\n * otherwise as 'false'.\n */\n syntacticPlaceholders?: boolean | null;\n} & ParserOpts;\n\nexport type TemplateOpts = {\n parser: ParserOpts;\n placeholderAllowlist?: Set<string>;\n placeholderPattern?: RegExp | false;\n preserveComments?: boolean;\n syntacticPlaceholders?: boolean;\n};\n\nexport function merge(a: TemplateOpts, b: TemplateOpts): TemplateOpts {\n const {\n placeholderAllowlist = a.placeholderAllowlist,\n placeholderPattern = a.placeholderPattern,\n preserveComments = a.preserveComments,\n syntacticPlaceholders = a.syntacticPlaceholders,\n } = b;\n\n return {\n parser: {\n ...a.parser,\n ...b.parser,\n },\n placeholderAllowlist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders,\n };\n}\n\nexport function validate(opts: unknown): TemplateOpts {\n if (opts != null && typeof opts !== \"object\") {\n throw new Error(\"Unknown template options.\");\n }\n\n if (opts != null && Object.hasOwn(opts, \"placeholderWhitelist\")) {\n if (!Object.hasOwn(opts, \"placeholderAllowlist\")) {\n throw new Error(\n \"The 'placeholderWhitelist' option has been renamed to \" +\n \"'placeholderAllowlist'. Please update your configuration.\",\n );\n }\n // Both options provided: new option takes precedence (supports Babel 7/8 cross-version compat)\n }\n\n const {\n placeholderAllowlist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders,\n ...parser\n } = opts || ({} as any);\n\n if (placeholderAllowlist != null && !(placeholderAllowlist instanceof Set)) {\n throw new Error(\n \"'.placeholderAllowlist' must be a Set, null, or undefined\",\n );\n }\n\n if (\n placeholderPattern != null &&\n !(placeholderPattern instanceof RegExp) &&\n placeholderPattern !== false\n ) {\n throw new Error(\n \"'.placeholderPattern' must be a RegExp, false, null, or undefined\",\n );\n }\n\n if (preserveComments != null && typeof preserveComments !== \"boolean\") {\n throw new Error(\n \"'.preserveComments' must be a boolean, null, or undefined\",\n );\n }\n\n if (\n syntacticPlaceholders != null &&\n typeof syntacticPlaceholders !== \"boolean\"\n ) {\n throw new Error(\n \"'.syntacticPlaceholders' must be a boolean, null, or undefined\",\n );\n }\n if (\n syntacticPlaceholders === true &&\n (placeholderAllowlist != null || placeholderPattern != null)\n ) {\n throw new Error(\n \"'.placeholderAllowlist' and '.placeholderPattern' aren't compatible\" +\n \" with '.syntacticPlaceholders: true'\",\n );\n }\n\n return {\n parser,\n placeholderAllowlist: placeholderAllowlist || undefined,\n placeholderPattern:\n placeholderPattern == null ? undefined : placeholderPattern,\n preserveComments: preserveComments == null ? undefined : preserveComments,\n syntacticPlaceholders:\n syntacticPlaceholders == null ? undefined : syntacticPlaceholders,\n };\n}\n\nexport type PublicReplacements = Record<string, unknown> | unknown[];\nexport type TemplateReplacements = Record<string, unknown> | void;\n\nexport function normalizeReplacements(\n replacements: unknown,\n): TemplateReplacements {\n if (Array.isArray(replacements)) {\n return replacements.reduce((acc, replacement, i) => {\n acc[\"$\" + i] = replacement;\n return acc;\n }, {});\n } else if (typeof replacements === \"object\" || replacements == null) {\n return (replacements as any) || undefined;\n }\n\n throw new Error(\n \"Template replacements must be an array, object, null, or undefined\",\n );\n}\n","import {\n isCallExpression,\n isExpressionStatement,\n isFunction,\n isIdentifier,\n isJSXIdentifier,\n isNewExpression,\n isPlaceholder,\n isStatement,\n isStringLiteral,\n removePropertiesDeep,\n traverse,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { TraversalAncestors } from \"@babel/types\";\nimport { parse } from \"@babel/parser\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport type { TemplateOpts, ParserOpts } from \"./options.ts\";\nimport type { Formatter } from \"./formatters.ts\";\n\nexport type Metadata = {\n ast: t.File;\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n};\n\ntype PlaceholderType = \"string\" | \"param\" | \"statement\" | \"other\";\nexport type Placeholder = {\n name: string;\n resolve: (a: t.File) => { parent: t.Node; key: string; index?: number };\n type: PlaceholderType;\n isDuplicate: boolean;\n};\n\nconst PATTERN = /^[_$A-Z0-9]+$/;\n\nexport default function parseAndBuildMetadata<T>(\n formatter: Formatter<T>,\n code: string,\n opts: TemplateOpts,\n): Metadata {\n const {\n placeholderAllowlist,\n placeholderPattern,\n preserveComments = false,\n syntacticPlaceholders,\n } = opts;\n\n const ast = parseWithCodeFrame(code, opts.parser, syntacticPlaceholders);\n\n removePropertiesDeep(ast, {\n preserveComments,\n });\n\n formatter.validate(ast);\n\n const state: MetadataState = {\n syntactic: { placeholders: [], placeholderNames: new Set() },\n legacy: { placeholders: [], placeholderNames: new Set() },\n placeholderAllowlist,\n placeholderPattern,\n syntacticPlaceholders,\n };\n\n traverse(ast, placeholderVisitorHandler, state);\n\n return {\n ast,\n ...(state.syntactic.placeholders.length ? state.syntactic : state.legacy),\n };\n}\n\nfunction placeholderVisitorHandler(\n node: t.Node,\n ancestors: TraversalAncestors,\n state: MetadataState,\n) {\n let name: string;\n\n let hasSyntacticPlaceholders = state.syntactic.placeholders.length > 0;\n\n if (isPlaceholder(node)) {\n if (state.syntacticPlaceholders === false) {\n throw new Error(\n \"%%foo%%-style placeholders can't be used when \" +\n \"'.syntacticPlaceholders' is false.\",\n );\n }\n name = node.name.name;\n hasSyntacticPlaceholders = true;\n } else if (hasSyntacticPlaceholders || state.syntacticPlaceholders) {\n return;\n } else if (isIdentifier(node) || isJSXIdentifier(node)) {\n name = node.name;\n } else if (isStringLiteral(node)) {\n name = node.value;\n } else {\n return;\n }\n\n if (\n hasSyntacticPlaceholders &&\n (state.placeholderPattern != null || state.placeholderAllowlist != null)\n ) {\n // This check is also in options.js. We need it there to handle the default\n // .syntacticPlaceholders behavior.\n throw new Error(\n \"'.placeholderAllowlist' and '.placeholderPattern' aren't compatible\" +\n \" with '.syntacticPlaceholders: true'\",\n );\n }\n\n if (\n !hasSyntacticPlaceholders &&\n (state.placeholderPattern === false ||\n !(state.placeholderPattern || PATTERN).test(name)) &&\n !state.placeholderAllowlist?.has(name)\n ) {\n return;\n }\n\n // Keep our own copy of the ancestors so we can use it in .resolve().\n ancestors = ancestors.slice();\n\n const { node: parent, key } = ancestors[ancestors.length - 1];\n\n let type: PlaceholderType;\n if (\n isStringLiteral(node) ||\n isPlaceholder(node, { expectedNode: \"StringLiteral\" })\n ) {\n type = \"string\";\n } else if (\n (isNewExpression(parent) && key === \"arguments\") ||\n (isCallExpression(parent) && key === \"arguments\") ||\n (isFunction(parent) && key === \"params\")\n ) {\n type = \"param\";\n } else if (isExpressionStatement(parent) && !isPlaceholder(node)) {\n type = \"statement\";\n ancestors = ancestors.slice(0, -1);\n } else if (isStatement(node) && isPlaceholder(node)) {\n type = \"statement\";\n } else {\n type = \"other\";\n }\n\n const { placeholders, placeholderNames } = !hasSyntacticPlaceholders\n ? state.legacy\n : state.syntactic;\n\n placeholders.push({\n name,\n type,\n resolve: ast => resolveAncestors(ast, ancestors),\n isDuplicate: placeholderNames.has(name),\n });\n placeholderNames.add(name);\n}\n\nfunction resolveAncestors(ast: t.File, ancestors: TraversalAncestors) {\n let parent: t.Node = ast;\n for (let i = 0; i < ancestors.length - 1; i++) {\n const { key, index } = ancestors[i];\n\n if (index === undefined) {\n parent = (parent as any)[key];\n } else {\n parent = (parent as any)[key][index];\n }\n }\n\n const { key, index } = ancestors[ancestors.length - 1];\n\n return { parent, key, index };\n}\n\ntype MetadataState = {\n syntactic: {\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n };\n legacy: {\n placeholders: Placeholder[];\n placeholderNames: Set<string>;\n };\n placeholderAllowlist?: Set<string>;\n placeholderPattern?: RegExp | false;\n syntacticPlaceholders?: boolean;\n};\n\nfunction parseWithCodeFrame(\n code: string,\n parserOpts: ParserOpts,\n syntacticPlaceholders?: boolean,\n): t.File {\n const plugins = (parserOpts.plugins || []).slice();\n if (syntacticPlaceholders !== false) {\n plugins.push(\"placeholders\");\n }\n\n parserOpts = {\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n allowNewTargetOutsideFunction: true,\n allowSuperOutsideMethod: true,\n allowYieldOutsideFunction: true,\n sourceType: \"module\",\n ...parserOpts,\n plugins,\n };\n\n try {\n return parse(code, parserOpts);\n } catch (err) {\n const loc = err.loc;\n if (loc) {\n err.message += \"\\n\" + codeFrameColumns(code, { start: loc });\n err.code = \"BABEL_TEMPLATE_PARSE_ERROR\";\n }\n throw err;\n }\n}\n","import {\n blockStatement,\n cloneNode,\n emptyStatement,\n expressionStatement,\n identifier,\n isStatement,\n isStringLiteral,\n stringLiteral,\n validate,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport type { TemplateReplacements } from \"./options.ts\";\nimport type { Metadata, Placeholder } from \"./parse.ts\";\n\nexport default function populatePlaceholders(\n metadata: Metadata,\n replacements: TemplateReplacements,\n): t.File {\n const ast = cloneNode(metadata.ast);\n\n if (replacements) {\n metadata.placeholders.forEach(placeholder => {\n if (!Object.hasOwn(replacements, placeholder.name)) {\n const placeholderName = placeholder.name;\n\n throw new Error(\n `Error: No substitution given for \"${placeholderName}\". If this is not meant to be a\n placeholder you may want to consider passing one of the following options to @babel/template:\n - { placeholderPattern: false, placeholderAllowlist: new Set(['${placeholderName}'])}\n - { placeholderPattern: /^${placeholderName}$/ }`,\n );\n }\n });\n Object.keys(replacements).forEach(key => {\n if (!metadata.placeholderNames.has(key)) {\n throw new Error(`Unknown substitution \"${key}\" given`);\n }\n });\n }\n\n // Process in reverse order so AST mutation doesn't change indices that\n // will be needed for later calls to `placeholder.resolve()`.\n metadata.placeholders\n .slice()\n .reverse()\n .forEach(placeholder => {\n try {\n applyReplacement(\n placeholder,\n ast,\n (replacements && replacements[placeholder.name]) ?? null,\n );\n } catch (e) {\n e.message = `@babel/template placeholder \"${placeholder.name}\": ${e.message}`;\n throw e;\n }\n });\n\n return ast;\n}\n\nfunction applyReplacement(\n placeholder: Placeholder,\n ast: t.File,\n replacement: any,\n) {\n // Track inserted nodes and clone them if they are inserted more than\n // once to avoid injecting the same node multiple times.\n if (placeholder.isDuplicate) {\n if (Array.isArray(replacement)) {\n replacement = replacement.map(node => cloneNode(node));\n } else if (typeof replacement === \"object\") {\n replacement = cloneNode(replacement);\n }\n }\n\n const { parent, key, index } = placeholder.resolve(ast);\n\n if (placeholder.type === \"string\") {\n if (typeof replacement === \"string\") {\n replacement = stringLiteral(replacement);\n }\n if (!replacement || !isStringLiteral(replacement)) {\n throw new Error(\"Expected string substitution\");\n }\n } else if (placeholder.type === \"statement\") {\n if (index === undefined) {\n if (!replacement) {\n replacement = emptyStatement();\n } else if (Array.isArray(replacement)) {\n replacement = blockStatement(replacement);\n } else if (typeof replacement === \"string\") {\n replacement = expressionStatement(identifier(replacement));\n } else if (!isStatement(replacement)) {\n replacement = expressionStatement(replacement);\n }\n } else {\n if (replacement && !Array.isArray(replacement)) {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n if (!isStatement(replacement)) {\n replacement = expressionStatement(replacement);\n }\n }\n }\n } else if (placeholder.type === \"param\") {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n\n if (index === undefined) throw new Error(\"Assertion failure.\");\n } else {\n if (typeof replacement === \"string\") {\n replacement = identifier(replacement);\n }\n if (Array.isArray(replacement)) {\n throw new Error(\"Cannot replace single expression with an array.\");\n }\n }\n\n function set(parent: any, key: any, value: any) {\n const node = parent[key] as t.Node;\n parent[key] = value;\n if (node.type === \"Identifier\" || node.type === \"Placeholder\") {\n if (node.typeAnnotation) {\n value.typeAnnotation = node.typeAnnotation;\n }\n if (node.optional) {\n value.optional = node.optional;\n }\n if (node.decorators) {\n value.decorators = node.decorators;\n }\n }\n }\n\n if (index === undefined) {\n validate(parent, key, replacement);\n\n set(parent, key, replacement);\n } else {\n const items: t.Node[] = (parent as any)[key].slice();\n\n if (placeholder.type === \"statement\" || placeholder.type === \"param\") {\n if (replacement == null) {\n items.splice(index, 1);\n } else if (Array.isArray(replacement)) {\n items.splice(index, 1, ...replacement);\n } else {\n set(items, index, replacement);\n }\n } else {\n set(items, index, replacement);\n }\n\n validate(parent, key, items);\n (parent as any)[key] = items;\n }\n}\n","import type { Formatter } from \"./formatters.ts\";\nimport type { TemplateOpts } from \"./options.ts\";\nimport type { Metadata } from \"./parse.ts\";\nimport { normalizeReplacements } from \"./options.ts\";\nimport parseAndBuildMetadata from \"./parse.ts\";\nimport populatePlaceholders from \"./populate.ts\";\n\nexport default function stringTemplate<T>(\n formatter: Formatter<T>,\n code: string,\n opts: TemplateOpts,\n): (arg?: unknown) => T {\n code = formatter.code(code);\n\n let metadata: Metadata;\n\n return (arg?: unknown) => {\n const replacements = normalizeReplacements(arg);\n\n if (!metadata) metadata = parseAndBuildMetadata(formatter, code, opts);\n\n return formatter.unwrap(populatePlaceholders(metadata, replacements));\n };\n}\n","import type { Formatter } from \"./formatters.ts\";\nimport type { TemplateReplacements, TemplateOpts } from \"./options.ts\";\nimport { normalizeReplacements } from \"./options.ts\";\nimport parseAndBuildMetadata from \"./parse.ts\";\nimport populatePlaceholders from \"./populate.ts\";\n\nexport default function literalTemplate<T>(\n formatter: Formatter<T>,\n tpl: string[],\n opts: TemplateOpts,\n): (_: unknown[]) => (_: unknown) => T {\n const { metadata, names } = buildLiteralData(formatter, tpl, opts);\n\n return arg => {\n const defaultReplacements: TemplateReplacements = {};\n arg.forEach((replacement, i) => {\n defaultReplacements[names[i]] = replacement;\n });\n\n return (arg: unknown) => {\n const replacements = normalizeReplacements(arg);\n\n if (replacements) {\n Object.keys(replacements).forEach(key => {\n if (Object.hasOwn(defaultReplacements, key)) {\n throw new Error(\"Unexpected replacement overlap.\");\n }\n });\n }\n\n return formatter.unwrap(\n populatePlaceholders(\n metadata,\n replacements\n ? Object.assign(replacements, defaultReplacements)\n : defaultReplacements,\n ),\n );\n };\n };\n}\n\nfunction buildLiteralData<T>(\n formatter: Formatter<T>,\n tpl: string[],\n opts: TemplateOpts,\n) {\n let prefix = \"BABEL_TPL$\";\n\n const raw = tpl.join(\"\");\n\n do {\n // If there are cases where the template already contains $$BABEL_TPL$0 or any other\n // matching pattern, we keep adding \"$$\" characters until a unique prefix\n // is found.\n prefix = \"$$\" + prefix;\n } while (raw.includes(prefix));\n\n const { names, code } = buildTemplateCode(tpl, prefix);\n\n const metadata = parseAndBuildMetadata(formatter, formatter.code(code), {\n parser: opts.parser,\n\n // Explicitly include our generated names in the allowlist so users never\n // have to think about whether their placeholder pattern will match.\n placeholderAllowlist: new Set(\n names.concat(\n opts.placeholderAllowlist ? Array.from(opts.placeholderAllowlist) : [],\n ),\n ),\n placeholderPattern: opts.placeholderPattern,\n preserveComments: opts.preserveComments,\n syntacticPlaceholders: opts.syntacticPlaceholders,\n });\n\n return { metadata, names };\n}\n\nfunction buildTemplateCode(\n tpl: string[],\n prefix: string,\n): { names: string[]; code: string } {\n const names = [];\n\n let code = tpl[0];\n\n for (let i = 1; i < tpl.length; i++) {\n const value = `${prefix}${i - 1}`;\n names.push(value);\n\n code += value + tpl[i];\n }\n\n return { names, code };\n}\n","import { merge, validate } from \"./options.ts\";\nimport type {\n TemplateOpts,\n PublicOpts,\n PublicReplacements,\n} from \"./options.ts\";\nimport type { Formatter } from \"./formatters.ts\";\n\nimport stringTemplate from \"./string.ts\";\nimport literalTemplate from \"./literal.ts\";\n\nexport type TemplateBuilder<T> = {\n // Build a new builder, merging the given options with the previous ones.\n (opts: PublicOpts): TemplateBuilder<T>;\n\n // Building from a string produces an AST builder function by default.\n (tpl: string, opts?: PublicOpts): (replacements?: PublicReplacements) => T;\n\n // Building from a template literal produces an AST builder function by default.\n (\n tpl: TemplateStringsArray,\n ...args: unknown[]\n ): (replacements?: PublicReplacements) => T;\n\n // Allow users to explicitly create templates that produce ASTs, skipping\n // the need for an intermediate function.\n ast: {\n (tpl: string, opts?: PublicOpts): T;\n (tpl: TemplateStringsArray, ...args: unknown[]): T;\n };\n};\n\n// Prebuild the options that will be used when parsing a `.ast` template.\n// These do not use a pattern because there is no way for users to pass in\n// replacement patterns to begin with, and disabling pattern matching means\n// users have more flexibility in what type of content they have in their\n// template JS.\nconst NO_PLACEHOLDER: TemplateOpts = validate({\n placeholderPattern: false,\n});\n\nexport default function createTemplateBuilder<T>(\n formatter: Formatter<T>,\n defaultOpts?: TemplateOpts,\n): TemplateBuilder<T> {\n const templateFnCache = new WeakMap();\n const templateAstCache = new WeakMap();\n const cachedOpts = defaultOpts || validate(null);\n\n return Object.assign(\n ((tpl, ...args) => {\n if (typeof tpl === \"string\") {\n if (args.length > 1) throw new Error(\"Unexpected extra params.\");\n return extendedTrace(\n stringTemplate(formatter, tpl, merge(cachedOpts, validate(args[0]))),\n );\n } else if (Array.isArray(tpl)) {\n let builder = templateFnCache.get(tpl);\n if (!builder) {\n builder = literalTemplate(formatter, tpl, cachedOpts);\n templateFnCache.set(tpl, builder);\n }\n return extendedTrace(builder(args));\n } else if (typeof tpl === \"object\" && tpl) {\n if (args.length > 0) throw new Error(\"Unexpected extra params.\");\n return createTemplateBuilder(\n formatter,\n merge(cachedOpts, validate(tpl)),\n );\n }\n throw new Error(`Unexpected template param ${typeof tpl}`);\n }) as TemplateBuilder<T>,\n {\n ast: (tpl: string | string[], ...args: unknown[]) => {\n if (typeof tpl === \"string\") {\n if (args.length > 1) throw new Error(\"Unexpected extra params.\");\n return stringTemplate(\n formatter,\n tpl,\n merge(merge(cachedOpts, validate(args[0])), NO_PLACEHOLDER),\n )();\n } else if (Array.isArray(tpl)) {\n let builder = templateAstCache.get(tpl);\n if (!builder) {\n builder = literalTemplate(\n formatter,\n tpl,\n merge(cachedOpts, NO_PLACEHOLDER),\n );\n templateAstCache.set(tpl, builder);\n }\n return builder(args)();\n }\n\n throw new Error(`Unexpected template param ${typeof tpl}`);\n },\n },\n );\n}\n\nfunction extendedTrace<Arg, Result>(\n fn: (_: Arg) => Result,\n): (_: Arg) => Result {\n // Since we lazy parse the template, we get the current stack so we have the\n // original stack to append if it errors when parsing\n const rootErr = new Error();\n\n return (arg: Arg) => {\n try {\n return fn(arg);\n } catch (err) {\n // We slice off the top 3 items in the stack to remove the call to\n // 'extendedTrace', and the anonymous builder function, with the final\n // stripped line being the error message itself since we threw it\n // in the first place and it doesn't matter.\n err.stack += `\\n =============\\n${rootErr.stack!.split(\"\\n\").slice(3).join(\"\\n\")}`;\n throw err;\n }\n };\n}\n","import * as formatters from \"./formatters.ts\";\nimport createTemplateBuilder from \"./builder.ts\";\n\nexport const smart = createTemplateBuilder(formatters.smart);\nexport const statement = createTemplateBuilder(formatters.statement);\nexport const statements = createTemplateBuilder(formatters.statements);\nexport const expression = createTemplateBuilder(formatters.expression);\nexport const program = createTemplateBuilder(formatters.program);\n\ntype DefaultTemplateBuilder = typeof smart & {\n smart: typeof smart;\n statement: typeof statement;\n statements: typeof statements;\n expression: typeof expression;\n program: typeof program;\n};\n\nexport default Object.assign(smart.bind(undefined) as DefaultTemplateBuilder, {\n smart,\n statement,\n statements,\n expression,\n program,\n ast: smart.ast,\n});\n\nexport type {\n PublicOpts as Options,\n PublicReplacements as Replacements,\n} from \"./options.ts\";\n"],"names":["assertExpressionStatement","_t","makeStatementFormatter","fn","code","str","validate","unwrap","ast","program","body","slice","smart","length","statements","statement","Error","expression","start","stmt","merge","a","b","placeholderAllowlist","placeholderPattern","preserveComments","syntacticPlaceholders","parser","opts","Object","hasOwn","Set","RegExp","undefined","normalizeReplacements","replacements","Array","isArray","reduce","acc","replacement","i","isCallExpression","isExpressionStatement","isFunction","isIdentifier","isJSXIdentifier","isNewExpression","isPlaceholder","isStatement","isStringLiteral","removePropertiesDeep","traverse","PATTERN","parseAndBuildMetadata","formatter","parseWithCodeFrame","state","syntactic","placeholders","placeholderNames","legacy","placeholderVisitorHandler","node","ancestors","name","hasSyntacticPlaceholders","value","test","has","parent","key","type","expectedNode","push","resolve","resolveAncestors","isDuplicate","add","index","parserOpts","plugins","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowSuperOutsideMethod","allowYieldOutsideFunction","sourceType","parse","err","loc","message","codeFrameColumns","blockStatement","cloneNode","emptyStatement","expressionStatement","identifier","stringLiteral","populatePlaceholders","metadata","forEach","placeholder","placeholderName","keys","reverse","applyReplacement","e","map","set","typeAnnotation","optional","decorators","items","splice","stringTemplate","arg","literalTemplate","tpl","names","buildLiteralData","defaultReplacements","assign","prefix","raw","join","includes","buildTemplateCode","concat","from","NO_PLACEHOLDER","createTemplateBuilder","defaultOpts","templateFnCache","WeakMap","templateAstCache","cachedOpts","args","extendedTrace","builder","get","rootErr","stack","split","formatters","bind"],"mappings":"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"} |
+4
-4
| { | ||
| "name": "@babel/template", | ||
| "version": "8.0.0-rc.3", | ||
| "version": "8.0.0-rc.4", | ||
| "description": "Generate an AST from a string template.", | ||
@@ -19,5 +19,5 @@ "author": "The Babel Team (https://babel.dev/team)", | ||
| "dependencies": { | ||
| "@babel/code-frame": "^8.0.0-rc.3", | ||
| "@babel/parser": "^8.0.0-rc.3", | ||
| "@babel/types": "^8.0.0-rc.3" | ||
| "@babel/code-frame": "^8.0.0-rc.4", | ||
| "@babel/parser": "^8.0.0-rc.4", | ||
| "@babel/types": "^8.0.0-rc.4" | ||
| }, | ||
@@ -24,0 +24,0 @@ "engines": { |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
70080
1.35%608
0.83%Updated
Updated