UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

72 lines (52 loc) 1.53 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = cloneNode; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _symbols = require("./symbols"); var commentClones = new Map(); function isComment(node) { return node.type === 'CommentLine' || node.type === 'CommentBlock'; } function cloneNode(node) { var _result; if (isComment(node)) { var clone = commentClones.get(node); if (clone && node.value === clone.value) return clone; } var result = (_result = {}, (0, _defineProperty2["default"])(_result, _symbols.original, node[_symbols.original]), (0, _defineProperty2["default"])(_result, _symbols.source, node[_symbols.source]), _result); for (var field in node) { switch (field) { case 'start': case 'end': case 'loc': case 'range': continue; } var value = node[field]; result[field] = cloneValue(value); } if (isComment(node)) { commentClones.set(node, result); } return result; } function cloneValue(value) { if (Array.isArray(value)) { return value.map(cloneValue); } if (value instanceof Object) { var obj = value; if (typeof obj.type === 'string') { return cloneNode(value); } var result = {}; for (var key in obj) { result[key] = cloneValue(obj[key]); } return result; } return value; }