UNPKG

astx

Version:

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

31 lines (26 loc) 4.24 kB
import { original } from './symbols.mjs' export default function detectChangedNodes(t, path) { if (!t.namedTypes.Node.check(path.value)) return for (const field of t.getFieldNames(path.value)) { if (field === 'type') continue const child = path.get(field) if (t.namedTypes.Node.check(child.value)) { detectChangedNodes(t, child) } else if (Array.isArray(child.value)) { for (let i = 0; i < child.value.length; i++) { const elem = child.get(i) if (t.namedTypes.Node.check(elem.value)) { detectChangedNodes(t, elem) } } } } const orig = path.value[original] if (orig && !t.astNodesAreEquivalent(path.value, orig)) { let parent = path while (parent) { if (parent.value) delete parent.value[original] parent = parent.parent } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcmlnaW5hbCIsImRldGVjdENoYW5nZWROb2RlcyIsInQiLCJwYXRoIiwibmFtZWRUeXBlcyIsIk5vZGUiLCJjaGVjayIsInZhbHVlIiwiZmllbGQiLCJnZXRGaWVsZE5hbWVzIiwiY2hpbGQiLCJnZXQiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwiZWxlbSIsIm9yaWciLCJhc3ROb2Rlc0FyZUVxdWl2YWxlbnQiLCJwYXJlbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9kZXRlY3RDaGFuZ2VkTm9kZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZSwgTm9kZVBhdGggfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCAqIGFzIEFzdFR5cGVzIGZyb20gJ2FzdC10eXBlcydcbmltcG9ydCB7IG9yaWdpbmFsIH0gZnJvbSAnLi9zeW1ib2xzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RDaGFuZ2VkTm9kZXMoXG4gIHQ6IHR5cGVvZiBBc3RUeXBlcyxcbiAgcGF0aDogTm9kZVBhdGg8Tm9kZT5cbik6IHZvaWQge1xuICBpZiAoIXQubmFtZWRUeXBlcy5Ob2RlLmNoZWNrKHBhdGgudmFsdWUpKSByZXR1cm5cbiAgZm9yIChjb25zdCBmaWVsZCBvZiB0LmdldEZpZWxkTmFtZXMocGF0aC52YWx1ZSkpIHtcbiAgICBpZiAoZmllbGQgPT09ICd0eXBlJykgY29udGludWVcbiAgICBjb25zdCBjaGlsZCA9IHBhdGguZ2V0KGZpZWxkKVxuICAgIGlmICh0Lm5hbWVkVHlwZXMuTm9kZS5jaGVjayhjaGlsZC52YWx1ZSkpIHtcbiAgICAgIGRldGVjdENoYW5nZWROb2Rlcyh0LCBjaGlsZClcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQudmFsdWUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBjaGlsZC5nZXQoaSlcbiAgICAgICAgaWYgKHQubmFtZWRUeXBlcy5Ob2RlLmNoZWNrKGVsZW0udmFsdWUpKSB7XG4gICAgICAgICAgZGV0ZWN0Q2hhbmdlZE5vZGVzKHQsIGVsZW0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgb3JpZyA9IChwYXRoLnZhbHVlIGFzIGFueSlbb3JpZ2luYWxdXG4gIGlmIChvcmlnICYmICF0LmFzdE5vZGVzQXJlRXF1aXZhbGVudChwYXRoLnZhbHVlLCBvcmlnKSkge1xuICAgIGxldCBwYXJlbnQ6IE5vZGVQYXRoIHwgbnVsbCA9IHBhdGhcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LnZhbHVlKSBkZWxldGUgKHBhcmVudC52YWx1ZSBhcyBhbnkpW29yaWdpbmFsXVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudFxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUVBLFNBQVNBLFFBQVQsUUFBeUIsV0FBekI7O0FBRUEsZUFBZSxTQUFTQyxrQkFBVDtBQUNiQyxDQURhO0FBRWJDLElBRmE7QUFHUDtFQUNOLElBQUksQ0FBQ0QsQ0FBQyxDQUFDRSxVQUFGLENBQWFDLElBQWIsQ0FBa0JDLEtBQWxCLENBQXdCSCxJQUFJLENBQUNJLEtBQTdCLENBQUwsRUFBMEM7RUFDMUMsS0FBSyxNQUFNQyxLQUFYLElBQW9CTixDQUFDLENBQUNPLGFBQUYsQ0FBZ0JOLElBQUksQ0FBQ0ksS0FBckIsQ0FBcEIsRUFBaUQ7SUFDL0MsSUFBSUMsS0FBSyxLQUFLLE1BQWQsRUFBc0I7SUFDdEIsTUFBTUUsS0FBSyxHQUFHUCxJQUFJLENBQUNRLEdBQUwsQ0FBU0gsS0FBVCxDQUFkO0lBQ0EsSUFBSU4sQ0FBQyxDQUFDRSxVQUFGLENBQWFDLElBQWIsQ0FBa0JDLEtBQWxCLENBQXdCSSxLQUFLLENBQUNILEtBQTlCLENBQUosRUFBMEM7TUFDeENOLGtCQUFrQixDQUFDQyxDQUFELEVBQUlRLEtBQUosQ0FBbEI7SUFDRCxDQUZELE1BRU8sSUFBSUUsS0FBSyxDQUFDQyxPQUFOLENBQWNILEtBQUssQ0FBQ0gsS0FBcEIsQ0FBSixFQUFnQztNQUNyQyxLQUFLLElBQUlPLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdKLEtBQUssQ0FBQ0gsS0FBTixDQUFZUSxNQUFoQyxFQUF3Q0QsQ0FBQyxFQUF6QyxFQUE2QztRQUMzQyxNQUFNRSxJQUFJLEdBQUdOLEtBQUssQ0FBQ0MsR0FBTixDQUFVRyxDQUFWLENBQWI7UUFDQSxJQUFJWixDQUFDLENBQUNFLFVBQUYsQ0FBYUMsSUFBYixDQUFrQkMsS0FBbEIsQ0FBd0JVLElBQUksQ0FBQ1QsS0FBN0IsQ0FBSixFQUF5QztVQUN2Q04sa0JBQWtCLENBQUNDLENBQUQsRUFBSWMsSUFBSixDQUFsQjtRQUNEO01BQ0Y7SUFDRjtFQUNGO0VBQ0QsTUFBTUMsSUFBSSxHQUFJZCxJQUFJLENBQUNJLEtBQU4sQ0FBb0JQLFFBQXBCLENBQWI7RUFDQSxJQUFJaUIsSUFBSSxJQUFJLENBQUNmLENBQUMsQ0FBQ2dCLHFCQUFGLENBQXdCZixJQUFJLENBQUNJLEtBQTdCLEVBQW9DVSxJQUFwQyxDQUFiLEVBQXdEO0lBQ3RELElBQUlFLE1BQXVCLEdBQUdoQixJQUE5QjtJQUNBLE9BQU9nQixNQUFQLEVBQWU7TUFDYixJQUFJQSxNQUFNLENBQUNaLEtBQVgsRUFBa0IsT0FBUVksTUFBTSxDQUFDWixLQUFSLENBQXNCUCxRQUF0QixDQUFQO01BQ2xCbUIsTUFBTSxHQUFHQSxNQUFNLENBQUNBLE1BQWhCO0lBQ0Q7RUFDRjtBQUNGIn0=