astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
48 lines (41 loc) • 5.71 kB
JavaScript
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