UNPKG

astx

Version:

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

48 lines (41 loc) 5.71 kB
import compileReplacement from './index.mjs' import indentDebug from '../compileMatcher/indentDebug.mjs' export default function compileGenericNodeReplacement(path, compileOptions) { const pattern = path.value const { backend: { t }, } = compileOptions const { debug } = compileOptions const propertyValues = [] const childReplacements = [] for (const key of t.getFieldNames(pattern)) { const value = t.getFieldValue(pattern, key) const fieldPath = path.get(key) if (Array.isArray(fieldPath.value) || fieldPath.node === fieldPath.value) { childReplacements.push([ key, compileReplacement(fieldPath, { ...compileOptions, debug: indentDebug(debug, 2), }), ]) } else { propertyValues.push([key, value]) } } return { generate: (match) => { const result = { type: pattern.type, } for (const [key, replacement] of childReplacements) { const value = replacement.generate(match) if (value !== undefined) result[key] = value } for (const [key, value] of propertyValues) { if (value !== undefined) result[key] = value } return result }, } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlUmVwbGFjZW1lbnQiLCJpbmRlbnREZWJ1ZyIsImNvbXBpbGVHZW5lcmljTm9kZVJlcGxhY2VtZW50IiwicGF0aCIsImNvbXBpbGVPcHRpb25zIiwicGF0dGVybiIsInZhbHVlIiwiYmFja2VuZCIsInQiLCJkZWJ1ZyIsInByb3BlcnR5VmFsdWVzIiwiY2hpbGRSZXBsYWNlbWVudHMiLCJrZXkiLCJnZXRGaWVsZE5hbWVzIiwiZ2V0RmllbGRWYWx1ZSIsImZpZWxkUGF0aCIsImdldCIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGUiLCJwdXNoIiwiZ2VuZXJhdGUiLCJtYXRjaCIsInJlc3VsdCIsInR5cGUiLCJyZXBsYWNlbWVudCIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21waWxlUmVwbGFjZW1lbnQvR2VuZXJpY05vZGVSZXBsYWNlbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlLCBOb2RlUGF0aCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IGNvbXBpbGVSZXBsYWNlbWVudCwge1xuICBDb21waWxlZFJlcGxhY2VtZW50LFxuICBDb21waWxlUmVwbGFjZW1lbnRPcHRpb25zLFxuICBSZXBsYWNlYWJsZU1hdGNoLFxufSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IGluZGVudERlYnVnIGZyb20gJy4uL2NvbXBpbGVNYXRjaGVyL2luZGVudERlYnVnJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21waWxlR2VuZXJpY05vZGVSZXBsYWNlbWVudChcbiAgcGF0aDogTm9kZVBhdGgsXG4gIGNvbXBpbGVPcHRpb25zOiBDb21waWxlUmVwbGFjZW1lbnRPcHRpb25zXG4pOiBDb21waWxlZFJlcGxhY2VtZW50IHtcbiAgY29uc3QgcGF0dGVybiA9IHBhdGgudmFsdWVcbiAgY29uc3Qge1xuICAgIGJhY2tlbmQ6IHsgdCB9LFxuICB9ID0gY29tcGlsZU9wdGlvbnNcblxuICBjb25zdCB7IGRlYnVnIH0gPSBjb21waWxlT3B0aW9uc1xuXG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzOiBbc3RyaW5nLCBhbnldW10gPSBbXVxuICBjb25zdCBjaGlsZFJlcGxhY2VtZW50czogW3N0cmluZywgQ29tcGlsZWRSZXBsYWNlbWVudF1bXSA9IFtdXG5cbiAgZm9yIChjb25zdCBrZXkgb2YgdC5nZXRGaWVsZE5hbWVzKHBhdHRlcm4pKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0LmdldEZpZWxkVmFsdWUocGF0dGVybiwga2V5KVxuICAgIGNvbnN0IGZpZWxkUGF0aCA9IHBhdGguZ2V0KGtleSlcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkUGF0aC52YWx1ZSkgfHwgZmllbGRQYXRoLm5vZGUgPT09IGZpZWxkUGF0aC52YWx1ZSkge1xuICAgICAgY2hpbGRSZXBsYWNlbWVudHMucHVzaChbXG4gICAgICAgIGtleSxcbiAgICAgICAgY29tcGlsZVJlcGxhY2VtZW50KGZpZWxkUGF0aCwge1xuICAgICAgICAgIC4uLmNvbXBpbGVPcHRpb25zLFxuICAgICAgICAgIGRlYnVnOiBpbmRlbnREZWJ1ZyhkZWJ1ZywgMiksXG4gICAgICAgIH0pLFxuICAgICAgXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydHlWYWx1ZXMucHVzaChba2V5LCB2YWx1ZV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZTogKG1hdGNoOiBSZXBsYWNlYWJsZU1hdGNoKTogTm9kZSB8IE5vZGVbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHtcbiAgICAgICAgdHlwZTogcGF0dGVybi50eXBlLFxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJlcGxhY2VtZW50XSBvZiBjaGlsZFJlcGxhY2VtZW50cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcGxhY2VtZW50LmdlbmVyYXRlKG1hdGNoKVxuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHByb3BlcnR5VmFsdWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9LFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPQSxrQkFBUDs7OztBQUlPLFNBSlA7QUFLQSxPQUFPQyxXQUFQLE1BQXdCLCtCQUF4Qjs7QUFFQSxlQUFlLFNBQVNDLDZCQUFUO0FBQ2JDLElBRGE7QUFFYkMsY0FGYTtBQUdRO0VBQ3JCLE1BQU1DLE9BQU8sR0FBR0YsSUFBSSxDQUFDRyxLQUFyQjtFQUNBLE1BQU07SUFDSkMsT0FBTyxFQUFFLEVBQUVDLENBQUYsRUFETDtFQUVGSixjQUZKOztFQUlBLE1BQU0sRUFBRUssS0FBRixLQUFZTCxjQUFsQjs7RUFFQSxNQUFNTSxjQUErQixHQUFHLEVBQXhDO0VBQ0EsTUFBTUMsaUJBQWtELEdBQUcsRUFBM0Q7O0VBRUEsS0FBSyxNQUFNQyxHQUFYLElBQWtCSixDQUFDLENBQUNLLGFBQUYsQ0FBZ0JSLE9BQWhCLENBQWxCLEVBQTRDO0lBQzFDLE1BQU1DLEtBQUssR0FBR0UsQ0FBQyxDQUFDTSxhQUFGLENBQWdCVCxPQUFoQixFQUF5Qk8sR0FBekIsQ0FBZDtJQUNBLE1BQU1HLFNBQVMsR0FBR1osSUFBSSxDQUFDYSxHQUFMLENBQVNKLEdBQVQsQ0FBbEI7O0lBRUEsSUFBSUssS0FBSyxDQUFDQyxPQUFOLENBQWNILFNBQVMsQ0FBQ1QsS0FBeEIsS0FBa0NTLFNBQVMsQ0FBQ0ksSUFBVixLQUFtQkosU0FBUyxDQUFDVCxLQUFuRSxFQUEwRTtNQUN4RUssaUJBQWlCLENBQUNTLElBQWxCLENBQXVCO01BQ3JCUixHQURxQjtNQUVyQlosa0JBQWtCLENBQUNlLFNBQUQsRUFBWTtRQUM1QixHQUFHWCxjQUR5QjtRQUU1QkssS0FBSyxFQUFFUixXQUFXLENBQUNRLEtBQUQsRUFBUSxDQUFSLENBRlUsRUFBWixDQUZHLENBQXZCOzs7SUFPRCxDQVJELE1BUU87TUFDTEMsY0FBYyxDQUFDVSxJQUFmLENBQW9CLENBQUNSLEdBQUQsRUFBTU4sS0FBTixDQUFwQjtJQUNEO0VBQ0Y7O0VBRUQsT0FBTztJQUNMZSxRQUFRLEVBQUUsQ0FBQ0MsS0FBRCxLQUE0QztNQUNwRCxNQUFNQyxNQUFXLEdBQUc7UUFDbEJDLElBQUksRUFBRW5CLE9BQU8sQ0FBQ21CLElBREksRUFBcEI7OztNQUlBLEtBQUssTUFBTSxDQUFDWixHQUFELEVBQU1hLFdBQU4sQ0FBWCxJQUFpQ2QsaUJBQWpDLEVBQW9EO1FBQ2xELE1BQU1MLEtBQUssR0FBR21CLFdBQVcsQ0FBQ0osUUFBWixDQUFxQkMsS0FBckIsQ0FBZDs7UUFFQSxJQUFJaEIsS0FBSyxLQUFLb0IsU0FBZCxFQUF5QkgsTUFBTSxDQUFDWCxHQUFELENBQU4sR0FBY04sS0FBZDtNQUMxQjs7TUFFRCxLQUFLLE1BQU0sQ0FBQ00sR0FBRCxFQUFNTixLQUFOLENBQVgsSUFBMkJJLGNBQTNCLEVBQTJDO1FBQ3pDLElBQUlKLEtBQUssS0FBS29CLFNBQWQsRUFBeUJILE1BQU0sQ0FBQ1gsR0FBRCxDQUFOLEdBQWNOLEtBQWQ7TUFDMUI7O01BRUQsT0FBT2lCLE1BQVA7SUFDRCxDQWpCSSxFQUFQOztBQW1CRCJ9