summaryrefslogtreecommitdiff
path: root/includes/search/node_modules/@babel/types/lib/clone/cloneNode.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/search/node_modules/@babel/types/lib/clone/cloneNode.js')
-rw-r--r--includes/search/node_modules/@babel/types/lib/clone/cloneNode.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/includes/search/node_modules/@babel/types/lib/clone/cloneNode.js b/includes/search/node_modules/@babel/types/lib/clone/cloneNode.js
new file mode 100644
index 0000000..57ced3e
--- /dev/null
+++ b/includes/search/node_modules/@babel/types/lib/clone/cloneNode.js
@@ -0,0 +1,122 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cloneNode;
+
+var _definitions = require("../definitions");
+
+var _generated = require("../validators/generated");
+
+const has = Function.call.bind(Object.prototype.hasOwnProperty);
+
+function cloneIfNode(obj, deep, withoutLoc, commentsCache) {
+ if (obj && typeof obj.type === "string") {
+ return cloneNodeInternal(obj, deep, withoutLoc, commentsCache);
+ }
+
+ return obj;
+}
+
+function cloneIfNodeOrArray(obj, deep, withoutLoc, commentsCache) {
+ if (Array.isArray(obj)) {
+ return obj.map(node => cloneIfNode(node, deep, withoutLoc, commentsCache));
+ }
+
+ return cloneIfNode(obj, deep, withoutLoc, commentsCache);
+}
+
+function cloneNode(node, deep = true, withoutLoc = false) {
+ return cloneNodeInternal(node, deep, withoutLoc, new Map());
+}
+
+function cloneNodeInternal(node, deep = true, withoutLoc = false, commentsCache) {
+ if (!node) return node;
+ const {
+ type
+ } = node;
+ const newNode = {
+ type: node.type
+ };
+
+ if ((0, _generated.isIdentifier)(node)) {
+ newNode.name = node.name;
+
+ if (has(node, "optional") && typeof node.optional === "boolean") {
+ newNode.optional = node.optional;
+ }
+
+ if (has(node, "typeAnnotation")) {
+ newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc, commentsCache) : node.typeAnnotation;
+ }
+ } else if (!has(_definitions.NODE_FIELDS, type)) {
+ throw new Error(`Unknown node type: "${type}"`);
+ } else {
+ for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {
+ if (has(node, field)) {
+ if (deep) {
+ newNode[field] = (0, _generated.isFile)(node) && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc, commentsCache) : cloneIfNodeOrArray(node[field], true, withoutLoc, commentsCache);
+ } else {
+ newNode[field] = node[field];
+ }
+ }
+ }
+ }
+
+ if (has(node, "loc")) {
+ if (withoutLoc) {
+ newNode.loc = null;
+ } else {
+ newNode.loc = node.loc;
+ }
+ }
+
+ if (has(node, "leadingComments")) {
+ newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc, commentsCache);
+ }
+
+ if (has(node, "innerComments")) {
+ newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc, commentsCache);
+ }
+
+ if (has(node, "trailingComments")) {
+ newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc, commentsCache);
+ }
+
+ if (has(node, "extra")) {
+ newNode.extra = Object.assign({}, node.extra);
+ }
+
+ return newNode;
+}
+
+function maybeCloneComments(comments, deep, withoutLoc, commentsCache) {
+ if (!comments || !deep) {
+ return comments;
+ }
+
+ return comments.map(comment => {
+ const cache = commentsCache.get(comment);
+ if (cache) return cache;
+ const {
+ type,
+ value,
+ loc
+ } = comment;
+ const ret = {
+ type,
+ value,
+ loc
+ };
+
+ if (withoutLoc) {
+ ret.loc = null;
+ }
+
+ commentsCache.set(comment, ret);
+ return ret;
+ });
+}
+
+//# sourceMappingURL=cloneNode.js.map