Socket
Socket
Sign inDemoInstall

@babel/template

Package Overview
Dependencies
Maintainers
4
Versions
85
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@babel/template - npm Package Compare versions

Comparing version 7.21.4-esm.4 to 7.21.9

28

lib/builder.js

@@ -1,19 +0,25 @@

import { merge, validate } from "./options.js";
import stringTemplate from "./string.js";
import literalTemplate from "./literal.js";
const NO_PLACEHOLDER = validate({
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createTemplateBuilder;
var _options = require("./options");
var _string = require("./string");
var _literal = require("./literal");
const NO_PLACEHOLDER = (0, _options.validate)({
placeholderPattern: false
});
export default function createTemplateBuilder(formatter, defaultOpts) {
function createTemplateBuilder(formatter, defaultOpts) {
const templateFnCache = new WeakMap();
const templateAstCache = new WeakMap();
const cachedOpts = defaultOpts || validate(null);
const cachedOpts = defaultOpts || (0, _options.validate)(null);
return Object.assign((tpl, ...args) => {
if (typeof tpl === "string") {
if (args.length > 1) throw new Error("Unexpected extra params.");
return extendedTrace(stringTemplate(formatter, tpl, merge(cachedOpts, validate(args[0]))));
return extendedTrace((0, _string.default)(formatter, tpl, (0, _options.merge)(cachedOpts, (0, _options.validate)(args[0]))));
} else if (Array.isArray(tpl)) {
let builder = templateFnCache.get(tpl);
if (!builder) {
builder = literalTemplate(formatter, tpl, cachedOpts);
builder = (0, _literal.default)(formatter, tpl, cachedOpts);
templateFnCache.set(tpl, builder);

@@ -24,3 +30,3 @@ }

if (args.length > 0) throw new Error("Unexpected extra params.");
return createTemplateBuilder(formatter, merge(cachedOpts, validate(tpl)));
return createTemplateBuilder(formatter, (0, _options.merge)(cachedOpts, (0, _options.validate)(tpl)));
}

@@ -32,7 +38,7 @@ throw new Error(`Unexpected template param ${typeof tpl}`);

if (args.length > 1) throw new Error("Unexpected extra params.");
return stringTemplate(formatter, tpl, merge(merge(cachedOpts, validate(args[0])), NO_PLACEHOLDER))();
return (0, _string.default)(formatter, tpl, (0, _options.merge)((0, _options.merge)(cachedOpts, (0, _options.validate)(args[0])), NO_PLACEHOLDER))();
} else if (Array.isArray(tpl)) {
let builder = templateAstCache.get(tpl);
if (!builder) {
builder = literalTemplate(formatter, tpl, merge(cachedOpts, NO_PLACEHOLDER));
builder = (0, _literal.default)(formatter, tpl, (0, _options.merge)(cachedOpts, NO_PLACEHOLDER));
templateAstCache.set(tpl, builder);

@@ -39,0 +45,0 @@ }

@@ -1,2 +0,8 @@

import * as _t from "@babel/types";
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.statements = exports.statement = exports.smart = exports.program = exports.expression = void 0;
var _t = require("@babel/types");
const {

@@ -14,3 +20,3 @@ assertExpressionStatement

}
export const smart = makeStatementFormatter(body => {
const smart = makeStatementFormatter(body => {
if (body.length > 1) {

@@ -22,4 +28,6 @@ return body;

});
export const statements = makeStatementFormatter(body => body);
export const statement = makeStatementFormatter(body => {
exports.smart = smart;
const statements = makeStatementFormatter(body => body);
exports.statements = statements;
const statement = makeStatementFormatter(body => {
if (body.length === 0) {

@@ -33,3 +41,4 @@ throw new Error("Found nothing to return.");

});
export const expression = {
exports.statement = statement;
const expression = {
code: str => `(\n${str}\n)`,

@@ -52,3 +61,4 @@ validate: ast => {

};
export const program = {
exports.expression = expression;
const program = {
code: str => str,

@@ -58,3 +68,4 @@ validate: () => {},

};
exports.program = program;
//# sourceMappingURL=formatters.js.map

@@ -1,9 +0,20 @@

import * as formatters from "./formatters.js";
import createTemplateBuilder from "./builder.js";
export const smart = createTemplateBuilder(formatters.smart);
export const statement = createTemplateBuilder(formatters.statement);
export const statements = createTemplateBuilder(formatters.statements);
export const expression = createTemplateBuilder(formatters.expression);
export const program = createTemplateBuilder(formatters.program);
export default Object.assign(smart.bind(undefined), {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.statements = exports.statement = exports.smart = exports.program = exports.expression = exports.default = void 0;
var formatters = require("./formatters");
var _builder = require("./builder");
const smart = (0, _builder.default)(formatters.smart);
exports.smart = smart;
const statement = (0, _builder.default)(formatters.statement);
exports.statement = statement;
const statements = (0, _builder.default)(formatters.statements);
exports.statements = statements;
const expression = (0, _builder.default)(formatters.expression);
exports.expression = expression;
const program = (0, _builder.default)(formatters.program);
exports.program = program;
var _default = Object.assign(smart.bind(undefined), {
smart,

@@ -16,3 +27,4 @@ statement,

});
exports.default = _default;
//# sourceMappingURL=index.js.map

@@ -1,5 +0,11 @@

import { normalizeReplacements } from "./options.js";
import parseAndBuildMetadata from "./parse.js";
import populatePlaceholders from "./populate.js";
export default function literalTemplate(formatter, tpl, opts) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = literalTemplate;
var _options = require("./options");
var _parse = require("./parse");
var _populate = require("./populate");
function literalTemplate(formatter, tpl, opts) {
const {

@@ -15,3 +21,3 @@ metadata,

return arg => {
const replacements = normalizeReplacements(arg);
const replacements = (0, _options.normalizeReplacements)(arg);
if (replacements) {

@@ -24,3 +30,3 @@ Object.keys(replacements).forEach(key => {

}
return formatter.unwrap(populatePlaceholders(metadata, replacements ? Object.assign(replacements, defaultReplacements) : defaultReplacements));
return formatter.unwrap((0, _populate.default)(metadata, replacements ? Object.assign(replacements, defaultReplacements) : defaultReplacements));
};

@@ -30,19 +36,18 @@ };

function buildLiteralData(formatter, tpl, opts) {
let names;
let nameSet;
let metadata;
let prefix = "";
let prefix = "BABEL_TPL$";
const raw = tpl.join("");
do {
prefix += "$";
const result = buildTemplateCode(tpl, prefix);
names = result.names;
nameSet = new Set(names);
metadata = parseAndBuildMetadata(formatter, formatter.code(result.code), {
parser: opts.parser,
placeholderWhitelist: new Set(result.names.concat(opts.placeholderWhitelist ? Array.from(opts.placeholderWhitelist) : [])),
placeholderPattern: opts.placeholderPattern,
preserveComments: opts.preserveComments,
syntacticPlaceholders: opts.syntacticPlaceholders
});
} while (metadata.placeholders.some(placeholder => placeholder.isDuplicate && nameSet.has(placeholder.name)));
prefix = "$$" + prefix;
} while (raw.includes(prefix));
const {
names,
code
} = buildTemplateCode(tpl, prefix);
const metadata = (0, _parse.default)(formatter, formatter.code(code), {
parser: opts.parser,
placeholderWhitelist: new Set(names.concat(opts.placeholderWhitelist ? Array.from(opts.placeholderWhitelist) : [])),
placeholderPattern: opts.placeholderPattern,
preserveComments: opts.preserveComments,
syntacticPlaceholders: opts.syntacticPlaceholders
});
return {

@@ -49,0 +54,0 @@ metadata,

@@ -0,4 +1,12 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.merge = merge;
exports.normalizeReplacements = normalizeReplacements;
exports.validate = validate;
const _excluded = ["placeholderWhitelist", "placeholderPattern", "preserveComments", "syntacticPlaceholders"];
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
export function merge(a, b) {
function merge(a, b) {
const {

@@ -18,3 +26,3 @@ placeholderWhitelist = a.placeholderWhitelist,

}
export function validate(opts) {
function validate(opts) {
if (opts != null && typeof opts !== "object") {

@@ -54,3 +62,3 @@ throw new Error("Unknown template options.");

}
export function normalizeReplacements(replacements) {
function normalizeReplacements(replacements) {
if (Array.isArray(replacements)) {

@@ -57,0 +65,0 @@ return replacements.reduce((acc, replacement, i) => {

@@ -1,2 +0,10 @@

import * as _t from "@babel/types";
"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 {

@@ -15,6 +23,4 @@ isCallExpression,

} = _t;
import { parse } from "@babel/parser";
import { codeFrameColumns } from "@babel/code-frame";
const PATTERN = /^[_$A-Z0-9]+$/;
export default function parseAndBuildMetadata(formatter, code, opts) {
function parseAndBuildMetadata(formatter, code, opts) {
const {

@@ -31,24 +37,19 @@ placeholderWhitelist,

formatter.validate(ast);
const syntactic = {
placeholders: [],
placeholderNames: new Set()
};
const legacy = {
placeholders: [],
placeholderNames: new Set()
};
const isLegacyRef = {
value: undefined
};
traverse(ast, placeholderVisitorHandler, {
syntactic,
legacy,
isLegacyRef,
const state = {
syntactic: {
placeholders: [],
placeholderNames: new Set()
},
legacy: {
placeholders: [],
placeholderNames: new Set()
},
placeholderWhitelist,
placeholderPattern,
syntacticPlaceholders
});
};
traverse(ast, placeholderVisitorHandler, state);
return Object.assign({
ast
}, isLegacyRef.value ? legacy : syntactic);
}, state.syntactic.placeholders.length ? state.syntactic : state.legacy);
}

@@ -58,24 +59,22 @@ function placeholderVisitorHandler(node, ancestors, state) {

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.");
} else {
name = node.name.name;
state.isLegacyRef.value = false;
}
} else if (state.isLegacyRef.value === false || state.syntacticPlaceholders) {
name = node.name.name;
hasSyntacticPlaceholders = true;
} else if (hasSyntacticPlaceholders || state.syntacticPlaceholders) {
return;
} else if (isIdentifier(node) || isJSXIdentifier(node)) {
name = node.name;
state.isLegacyRef.value = true;
} else if (isStringLiteral(node)) {
name = node.value;
state.isLegacyRef.value = true;
} else {
return;
}
if (!state.isLegacyRef.value && (state.placeholderPattern != null || state.placeholderWhitelist != null)) {
if (hasSyntacticPlaceholders && (state.placeholderPattern != null || state.placeholderWhitelist != null)) {
throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'");
}
if (state.isLegacyRef.value && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !((_state$placeholderWhi = state.placeholderWhitelist) != null && _state$placeholderWhi.has(name))) {
if (!hasSyntacticPlaceholders && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !((_state$placeholderWhi = state.placeholderWhitelist) != null && _state$placeholderWhi.has(name))) {
return;

@@ -106,3 +105,3 @@ }

placeholderNames
} = state.isLegacyRef.value ? state.legacy : state.syntactic;
} = !hasSyntacticPlaceholders ? state.legacy : state.syntactic;
placeholders.push({

@@ -152,7 +151,7 @@ name,

try {
return parse(code, parserOpts);
return (0, _parser.parse)(code, parserOpts);
} catch (err) {
const loc = err.loc;
if (loc) {
err.message += "\n" + codeFrameColumns(code, {
err.message += "\n" + (0, _codeFrame.codeFrameColumns)(code, {
start: loc

@@ -159,0 +158,0 @@ });

@@ -1,2 +0,8 @@

import * as _t from "@babel/types";
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = populatePlaceholders;
var _t = require("@babel/types");
const {

@@ -13,3 +19,3 @@ blockStatement,

} = _t;
export default function populatePlaceholders(metadata, replacements) {
function populatePlaceholders(metadata, replacements) {
const ast = cloneNode(metadata.ast);

@@ -16,0 +22,0 @@ if (replacements) {

@@ -1,11 +0,17 @@

import { normalizeReplacements } from "./options.js";
import parseAndBuildMetadata from "./parse.js";
import populatePlaceholders from "./populate.js";
export default function stringTemplate(formatter, code, opts) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = stringTemplate;
var _options = require("./options");
var _parse = require("./parse");
var _populate = require("./populate");
function stringTemplate(formatter, code, opts) {
code = formatter.code(code);
let metadata;
return arg => {
const replacements = normalizeReplacements(arg);
if (!metadata) metadata = parseAndBuildMetadata(formatter, code, opts);
return formatter.unwrap(populatePlaceholders(metadata, replacements));
const replacements = (0, _options.normalizeReplacements)(arg);
if (!metadata) metadata = (0, _parse.default)(formatter, code, opts);
return formatter.unwrap((0, _populate.default)(metadata, replacements));
};

@@ -12,0 +18,0 @@ }

{
"name": "@babel/template",
"version": "7.21.4-esm.4",
"version": "7.21.9",
"description": "Generate an AST from a string template.",

@@ -19,5 +19,5 @@ "author": "The Babel Team (https://babel.dev/team)",

"dependencies": {
"@babel/code-frame": "7.21.4-esm.4",
"@babel/parser": "7.21.4-esm.4",
"@babel/types": "7.21.4-esm.4"
"@babel/code-frame": "^7.21.4",
"@babel/parser": "^7.21.9",
"@babel/types": "^7.21.5"
},

@@ -27,3 +27,3 @@ "engines": {

},
"type": "module"
"type": "commonjs"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc