summaryrefslogtreecommitdiff
path: root/tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js')
-rw-r--r--tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js b/tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js
new file mode 100644
index 0000000000..1a358f7ba0
--- /dev/null
+++ b/tools/node_modules/babel-eslint/node_modules/@babel/template/lib/populate.js
@@ -0,0 +1,120 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = populatePlaceholders;
+
+var t = _interopRequireWildcard(require("@babel/types"));
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function populatePlaceholders(metadata, replacements) {
+ var ast = t.cloneDeep(metadata.ast);
+
+ if (replacements) {
+ metadata.placeholders.forEach(function (placeholder) {
+ if (!Object.prototype.hasOwnProperty.call(replacements, placeholder.name)) {
+ throw new Error("No substitution given for \"" + placeholder.name + "\"");
+ }
+ });
+ Object.keys(replacements).forEach(function (key) {
+ if (!metadata.placeholderNames.has(key)) {
+ throw new Error("Unknown substitution \"" + key + "\" given");
+ }
+ });
+ }
+
+ metadata.placeholders.slice().reverse().forEach(function (placeholder) {
+ try {
+ applyReplacement(placeholder, ast, replacements && replacements[placeholder.name] || null);
+ } catch (e) {
+ e.message = "babel-template placeholder \"" + placeholder.name + "\": " + e.message;
+ throw e;
+ }
+ });
+ return ast;
+}
+
+function applyReplacement(placeholder, ast, replacement) {
+ if (placeholder.isDuplicate) {
+ if (Array.isArray(replacement)) {
+ replacement = replacement.map(function (node) {
+ return t.cloneDeep(node);
+ });
+ } else if (typeof replacement === "object") {
+ replacement = t.cloneDeep(replacement);
+ }
+ }
+
+ var _placeholder$resolve = placeholder.resolve(ast),
+ parent = _placeholder$resolve.parent,
+ key = _placeholder$resolve.key,
+ index = _placeholder$resolve.index;
+
+ if (placeholder.type === "string") {
+ if (typeof replacement === "string") {
+ replacement = t.stringLiteral(replacement);
+ }
+
+ if (!replacement || !t.isStringLiteral(replacement)) {
+ throw new Error("Expected string substitution");
+ }
+ } else if (placeholder.type === "statement") {
+ if (index === undefined) {
+ if (!replacement) {
+ replacement = t.emptyStatement();
+ } else if (Array.isArray(replacement)) {
+ replacement = t.blockStatement(replacement);
+ } else if (typeof replacement === "string") {
+ replacement = t.expressionStatement(t.identifier(replacement));
+ } else if (!t.isStatement(replacement)) {
+ replacement = t.expressionStatement(replacement);
+ }
+ } else {
+ if (replacement && !Array.isArray(replacement)) {
+ if (typeof replacement === "string") {
+ replacement = t.identifier(replacement);
+ }
+
+ if (!t.isStatement(replacement)) {
+ replacement = t.expressionStatement(replacement);
+ }
+ }
+ }
+ } else if (placeholder.type === "param") {
+ if (typeof replacement === "string") {
+ replacement = t.identifier(replacement);
+ }
+
+ if (index === undefined) throw new Error("Assertion failure.");
+ } else {
+ if (typeof replacement === "string") {
+ replacement = t.identifier(replacement);
+ }
+
+ if (Array.isArray(replacement)) {
+ throw new Error("Cannot replace single expression with an array.");
+ }
+ }
+
+ if (index === undefined) {
+ t.validate(parent, key, replacement);
+ parent[key] = replacement;
+ } else {
+ var items = parent[key].slice();
+
+ if (placeholder.type === "statement" || placeholder.type === "param") {
+ if (replacement == null) {
+ items.splice(index, 1);
+ } else if (Array.isArray(replacement)) {
+ items.splice.apply(items, [index, 1].concat(replacement));
+ } else {
+ items[index] = replacement;
+ }
+ } else {
+ items[index] = replacement;
+ }
+
+ t.validate(parent, key, items);
+ parent[key] = items;
+ }
+} \ No newline at end of file