UNPKG

astx

Version:

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

135 lines (115 loc) 3.16 kB
'use strict' Object.defineProperty(exports, '__esModule', { value: true, }) exports['default'] = detectChangedNodes var _symbols = require('./symbols') function _createForOfIteratorHelper(o, allowArrayLike) { var it = (typeof Symbol !== 'undefined' && o[Symbol.iterator]) || o['@@iterator'] if (!it) { if ( Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || (allowArrayLike && o && typeof o.length === 'number') ) { if (it) o = it var i = 0 var F = function F() {} return { s: F, n: function n() { if (i >= o.length) return { done: true, } return { done: false, value: o[i++], } }, e: function e(_e) { throw _e }, f: F, } } throw new TypeError( 'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.' ) } var normalCompletion = true, didErr = false, err return { s: function s() { it = it.call(o) }, n: function n() { var step = it.next() normalCompletion = step.done return step }, e: function e(_e2) { didErr = true err = _e2 }, f: function f() { try { if (!normalCompletion && it['return'] != null) it['return']() } finally { if (didErr) throw err } }, } } function _unsupportedIterableToArray(o, minLen) { if (!o) return if (typeof o === 'string') return _arrayLikeToArray(o, minLen) var n = Object.prototype.toString.call(o).slice(8, -1) if (n === 'Object' && o.constructor) n = o.constructor.name if (n === 'Map' || n === 'Set') return Array.from(o) if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen) } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i] } return arr2 } function detectChangedNodes(t, path) { if (!t.namedTypes.Node.check(path.value)) return var _iterator = _createForOfIteratorHelper(t.getFieldNames(path.value)), _step try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var field = _step.value if (field === 'type') continue var child = path.get(field) if (t.namedTypes.Node.check(child.value)) { detectChangedNodes(t, child) } else if (Array.isArray(child.value)) { for (var i = 0; i < child.value.length; i++) { var elem = child.get(i) if (t.namedTypes.Node.check(elem.value)) { detectChangedNodes(t, elem) } } } } } catch (err) { _iterator.e(err) } finally { _iterator.f() } var orig = path.value[_symbols.original] if (orig && !t.astNodesAreEquivalent(path.value, orig)) { var parent = path while (parent) { if (parent.value) delete parent.value[_symbols.original] parent = parent.parent } } }