UNPKG

astx

Version:

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

57 lines (40 loc) 1.28 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.cloneAstWithOriginals = cloneAstWithOriginals; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _symbols = require("./symbols"); function cloneAstWithOriginals(ast, src) { var clones = new Map(); function cloneNode(node) { var _result; var clone = clones.get(node); if (clone) return clone; var result = (_result = {}, (0, _defineProperty2["default"])(_result, _symbols.original, node), (0, _defineProperty2["default"])(_result, _symbols.source, src), _result); for (var field in node) { result[field] = cloneValue(node[field]); } clones.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; } return cloneNode(ast); }