UNPKG

astx

Version:

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

57 lines (47 loc) 5.18 kB
import { original, source } from './symbols.mjs' const commentClones = new Map() function isComment(node) { return node.type === 'CommentLine' || node.type === 'CommentBlock' } export default function cloneNode(node) { if (isComment(node)) { const clone = commentClones.get(node) if (clone && node.value === clone.value) return clone } const result = { [original]: node[original], [source]: node[source], } for (const field in node) { switch (field) { case 'start': case 'end': case 'loc': case 'range': continue } const 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) { const obj = value if (typeof obj.type === 'string') { return cloneNode(value) } const result = {} for (const key in obj) { result[key] = cloneValue(obj[key]) } return result } return value } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcmlnaW5hbCIsInNvdXJjZSIsImNvbW1lbnRDbG9uZXMiLCJNYXAiLCJpc0NvbW1lbnQiLCJub2RlIiwidHlwZSIsImNsb25lTm9kZSIsImNsb25lIiwiZ2V0IiwidmFsdWUiLCJyZXN1bHQiLCJmaWVsZCIsImNsb25lVmFsdWUiLCJzZXQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJPYmplY3QiLCJvYmoiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jbG9uZU5vZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWVudCwgTm9kZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgb3JpZ2luYWwsIHNvdXJjZSB9IGZyb20gJy4vc3ltYm9scydcblxuY29uc3QgY29tbWVudENsb25lczogTWFwPENvbW1lbnQsIENvbW1lbnQ+ID0gbmV3IE1hcCgpXG5cbmZ1bmN0aW9uIGlzQ29tbWVudChub2RlOiBhbnkpOiBub2RlIGlzIENvbW1lbnQge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnQ29tbWVudExpbmUnIHx8IG5vZGUudHlwZSA9PT0gJ0NvbW1lbnRCbG9jaydcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmVOb2RlPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBUKTogVCB7XG4gIGlmIChpc0NvbW1lbnQobm9kZSkpIHtcbiAgICBjb25zdCBjbG9uZSA9IGNvbW1lbnRDbG9uZXMuZ2V0KG5vZGUpXG4gICAgaWYgKGNsb25lICYmIChub2RlIGFzIENvbW1lbnQpLnZhbHVlID09PSBjbG9uZS52YWx1ZSkgcmV0dXJuIGNsb25lIGFzIGFueVxuICB9XG4gIGNvbnN0IHJlc3VsdDogYW55ID0ge1xuICAgIFtvcmlnaW5hbF06IChub2RlIGFzIGFueSlbb3JpZ2luYWxdLFxuICAgIFtzb3VyY2VdOiAobm9kZSBhcyBhbnkpW3NvdXJjZV0sXG4gIH1cbiAgZm9yIChjb25zdCBmaWVsZCBpbiBub2RlKSB7XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgIGNhc2UgJ2xvYyc6XG4gICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgYW55KVtmaWVsZF1cbiAgICByZXN1bHRbZmllbGRdID0gY2xvbmVWYWx1ZSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNDb21tZW50KG5vZGUpKSB7XG4gICAgY29tbWVudENsb25lcy5zZXQobm9kZSwgcmVzdWx0KVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gY2xvbmVWYWx1ZTxUPih2YWx1ZTogVCk6IFQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKHZhbHVlIGFzIGFueSkubWFwKGNsb25lVmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gdmFsdWVcbiAgICBpZiAodHlwZW9mIG9iai50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNsb25lTm9kZSh2YWx1ZSBhcyBhbnkpXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVWYWx1ZShvYmpba2V5XSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsU0FBU0EsUUFBVCxFQUFtQkMsTUFBbkIsUUFBaUMsV0FBakM7O0FBRUEsTUFBTUMsYUFBb0MsR0FBRyxJQUFJQyxHQUFKLEVBQTdDOztBQUVBLFNBQVNDLFNBQVQsQ0FBbUJDLElBQW5CLEVBQStDO0VBQzdDLE9BQU9BLElBQUksQ0FBQ0MsSUFBTCxLQUFjLGFBQWQsSUFBK0JELElBQUksQ0FBQ0MsSUFBTCxLQUFjLGNBQXBEO0FBQ0Q7O0FBRUQsZUFBZSxTQUFTQyxTQUFULENBQW1DRixJQUFuQyxFQUErQztFQUM1RCxJQUFJRCxTQUFTLENBQUNDLElBQUQsQ0FBYixFQUFxQjtJQUNuQixNQUFNRyxLQUFLLEdBQUdOLGFBQWEsQ0FBQ08sR0FBZCxDQUFrQkosSUFBbEIsQ0FBZDtJQUNBLElBQUlHLEtBQUssSUFBS0gsSUFBRCxDQUFrQkssS0FBbEIsS0FBNEJGLEtBQUssQ0FBQ0UsS0FBL0MsRUFBc0QsT0FBT0YsS0FBUDtFQUN2RDtFQUNELE1BQU1HLE1BQVcsR0FBRztJQUNsQixDQUFDWCxRQUFELEdBQWFLLElBQUQsQ0FBY0wsUUFBZCxDQURNO0lBRWxCLENBQUNDLE1BQUQsR0FBV0ksSUFBRCxDQUFjSixNQUFkLENBRlEsRUFBcEI7O0VBSUEsS0FBSyxNQUFNVyxLQUFYLElBQW9CUCxJQUFwQixFQUEwQjtJQUN4QixRQUFRTyxLQUFSO01BQ0UsS0FBSyxPQUFMO01BQ0EsS0FBSyxLQUFMO01BQ0EsS0FBSyxLQUFMO01BQ0EsS0FBSyxPQUFMO1FBQ0UsU0FMSjs7SUFPQSxNQUFNRixLQUFLLEdBQUlMLElBQUQsQ0FBY08sS0FBZCxDQUFkO0lBQ0FELE1BQU0sQ0FBQ0MsS0FBRCxDQUFOLEdBQWdCQyxVQUFVLENBQUNILEtBQUQsQ0FBMUI7RUFDRDtFQUNELElBQUlOLFNBQVMsQ0FBQ0MsSUFBRCxDQUFiLEVBQXFCO0lBQ25CSCxhQUFhLENBQUNZLEdBQWQsQ0FBa0JULElBQWxCLEVBQXdCTSxNQUF4QjtFQUNEO0VBQ0QsT0FBT0EsTUFBUDtBQUNEOztBQUVELFNBQVNFLFVBQVQsQ0FBdUJILEtBQXZCLEVBQW9DO0VBQ2xDLElBQUlLLEtBQUssQ0FBQ0MsT0FBTixDQUFjTixLQUFkLENBQUosRUFBMEI7SUFDeEIsT0FBUUEsS0FBRCxDQUFlTyxHQUFmLENBQW1CSixVQUFuQixDQUFQO0VBQ0Q7RUFDRCxJQUFJSCxLQUFLLFlBQVlRLE1BQXJCLEVBQTZCO0lBQzNCLE1BQU1DLEdBQXdCLEdBQUdULEtBQWpDO0lBQ0EsSUFBSSxPQUFPUyxHQUFHLENBQUNiLElBQVgsS0FBb0IsUUFBeEIsRUFBa0M7TUFDaEMsT0FBT0MsU0FBUyxDQUFDRyxLQUFELENBQWhCO0lBQ0Q7SUFDRCxNQUFNQyxNQUFXLEdBQUcsRUFBcEI7SUFDQSxLQUFLLE1BQU1TLEdBQVgsSUFBa0JELEdBQWxCLEVBQXVCO01BQ3JCUixNQUFNLENBQUNTLEdBQUQsQ0FBTixHQUFjUCxVQUFVLENBQUNNLEdBQUcsQ0FBQ0MsR0FBRCxDQUFKLENBQXhCO0lBQ0Q7SUFDRCxPQUFPVCxNQUFQO0VBQ0Q7RUFDRCxPQUFPRCxLQUFQO0FBQ0QifQ==