UNPKG

astx

Version:

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

51 lines (48 loc) 7.03 kB
import compileMatcher from './index.mjs' import compilePlaceholderMatcher from './Placeholder.mjs' import indentDebug from './indentDebug.mjs' const nodeTypes = ['ObjectProperty'] export default function compileObjectPropertyMatcher(path, compileOptions) { const { debug, backend } = compileOptions const n = backend.t.namedTypes const subCompileOptions = { ...compileOptions, debug: indentDebug(debug, 1) } const pattern = path.value if (n.Identifier.check(pattern.key)) { if ( pattern.shorthand && !pattern.computed && backend.t.astNodesAreEquivalent(pattern.key, pattern.value) ) { const placeholderMatcher = compilePlaceholderMatcher( path, pattern.key.name, compileOptions, { nodeType: 'ObjectMember', } ) if (placeholderMatcher) return placeholderMatcher } } if (!pattern.computed) { const keyMatcher = compileMatcher(path.get('key'), subCompileOptions) const valueMatcher = compileMatcher(path.get('value'), subCompileOptions) return { pattern: path, nodeType: nodeTypes, match: (_path, matchSoFar) => { const { value: node } = _path if (!nodeTypes.includes(node.type)) { debug(`wrong node type`) return null } const path = _path debug('key') matchSoFar = keyMatcher.match(path.get('key'), matchSoFar) if (!matchSoFar) return null debug('value') return valueMatcher.match(path.get('value'), matchSoFar) }, } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlTWF0Y2hlciIsImNvbXBpbGVQbGFjZWhvbGRlck1hdGNoZXIiLCJpbmRlbnREZWJ1ZyIsIm5vZGVUeXBlcyIsImNvbXBpbGVPYmplY3RQcm9wZXJ0eU1hdGNoZXIiLCJwYXRoIiwiY29tcGlsZU9wdGlvbnMiLCJkZWJ1ZyIsImJhY2tlbmQiLCJuIiwidCIsIm5hbWVkVHlwZXMiLCJzdWJDb21waWxlT3B0aW9ucyIsInBhdHRlcm4iLCJ2YWx1ZSIsIklkZW50aWZpZXIiLCJjaGVjayIsImtleSIsInNob3J0aGFuZCIsImNvbXB1dGVkIiwiYXN0Tm9kZXNBcmVFcXVpdmFsZW50IiwicGxhY2Vob2xkZXJNYXRjaGVyIiwibmFtZSIsIm5vZGVUeXBlIiwia2V5TWF0Y2hlciIsImdldCIsInZhbHVlTWF0Y2hlciIsIm1hdGNoIiwiX3BhdGgiLCJtYXRjaFNvRmFyIiwibm9kZSIsImluY2x1ZGVzIiwidHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21waWxlTWF0Y2hlci9PYmplY3RQcm9wZXJ0eS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RQcm9wZXJ0eSwgTm9kZVBhdGgsIE5vZGVUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgY29tcGlsZU1hdGNoZXIsIHsgQ29tcGlsZWRNYXRjaGVyLCBDb21waWxlT3B0aW9ucywgTWF0Y2hSZXN1bHQgfSBmcm9tICcuJ1xuaW1wb3J0IGNvbXBpbGVQbGFjZWhvbGRlck1hdGNoZXIgZnJvbSAnLi9QbGFjZWhvbGRlcidcbmltcG9ydCBpbmRlbnREZWJ1ZyBmcm9tICcuL2luZGVudERlYnVnJ1xuXG5jb25zdCBub2RlVHlwZXM6IE5vZGVUeXBlW10gPSBbJ09iamVjdFByb3BlcnR5J11cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcGlsZU9iamVjdFByb3BlcnR5TWF0Y2hlcihcbiAgcGF0aDogTm9kZVBhdGg8T2JqZWN0UHJvcGVydHksIE9iamVjdFByb3BlcnR5PixcbiAgY29tcGlsZU9wdGlvbnM6IENvbXBpbGVPcHRpb25zXG4pOiBDb21waWxlZE1hdGNoZXIgfCB2b2lkIHtcbiAgY29uc3QgeyBkZWJ1ZywgYmFja2VuZCB9ID0gY29tcGlsZU9wdGlvbnNcbiAgY29uc3QgbiA9IGJhY2tlbmQudC5uYW1lZFR5cGVzXG4gIGNvbnN0IHN1YkNvbXBpbGVPcHRpb25zID0ge1xuICAgIC4uLmNvbXBpbGVPcHRpb25zLFxuICAgIGRlYnVnOiBpbmRlbnREZWJ1ZyhkZWJ1ZywgMSksXG4gIH1cbiAgY29uc3QgcGF0dGVybjogT2JqZWN0UHJvcGVydHkgPSBwYXRoLnZhbHVlXG5cbiAgaWYgKG4uSWRlbnRpZmllci5jaGVjayhwYXR0ZXJuLmtleSkpIHtcbiAgICBpZiAoXG4gICAgICBwYXR0ZXJuLnNob3J0aGFuZCAmJlxuICAgICAgIXBhdHRlcm4uY29tcHV0ZWQgJiZcbiAgICAgIGJhY2tlbmQudC5hc3ROb2Rlc0FyZUVxdWl2YWxlbnQocGF0dGVybi5rZXksIHBhdHRlcm4udmFsdWUpXG4gICAgKSB7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlck1hdGNoZXIgPSBjb21waWxlUGxhY2Vob2xkZXJNYXRjaGVyKFxuICAgICAgICBwYXRoLFxuICAgICAgICBwYXR0ZXJuLmtleS5uYW1lLFxuICAgICAgICBjb21waWxlT3B0aW9ucyxcbiAgICAgICAgeyBub2RlVHlwZTogJ09iamVjdE1lbWJlcicgfVxuICAgICAgKVxuXG4gICAgICBpZiAocGxhY2Vob2xkZXJNYXRjaGVyKSByZXR1cm4gcGxhY2Vob2xkZXJNYXRjaGVyXG4gICAgfVxuICB9XG4gIGlmICghcGF0dGVybi5jb21wdXRlZCkge1xuICAgIGNvbnN0IGtleU1hdGNoZXIgPSBjb21waWxlTWF0Y2hlcihwYXRoLmdldCgna2V5JyksIHN1YkNvbXBpbGVPcHRpb25zKVxuICAgIGNvbnN0IHZhbHVlTWF0Y2hlciA9IGNvbXBpbGVNYXRjaGVyKHBhdGguZ2V0KCd2YWx1ZScpLCBzdWJDb21waWxlT3B0aW9ucylcbiAgICByZXR1cm4ge1xuICAgICAgcGF0dGVybjogcGF0aCxcbiAgICAgIG5vZGVUeXBlOiBub2RlVHlwZXMsXG4gICAgICBtYXRjaDogKF9wYXRoOiBOb2RlUGF0aCwgbWF0Y2hTb0ZhcjogTWF0Y2hSZXN1bHQpOiBNYXRjaFJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG5vZGUgfSA9IF9wYXRoXG4gICAgICAgIGlmICghbm9kZVR5cGVzLmluY2x1ZGVzKG5vZGUudHlwZSkpIHtcbiAgICAgICAgICBkZWJ1Zyhgd3Jvbmcgbm9kZSB0eXBlYClcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGg6IE5vZGVQYXRoPE9iamVjdFByb3BlcnR5PiA9IF9wYXRoIGFzIE5vZGVQYXRoPGFueT5cbiAgICAgICAgZGVidWcoJ2tleScpXG4gICAgICAgIG1hdGNoU29GYXIgPSBrZXlNYXRjaGVyLm1hdGNoKHBhdGguZ2V0KCdrZXknKSwgbWF0Y2hTb0ZhcilcbiAgICAgICAgaWYgKCFtYXRjaFNvRmFyKSByZXR1cm4gbnVsbFxuICAgICAgICBkZWJ1ZygndmFsdWUnKVxuICAgICAgICByZXR1cm4gdmFsdWVNYXRjaGVyLm1hdGNoKHBhdGguZ2V0KCd2YWx1ZScpLCBtYXRjaFNvRmFyKVxuICAgICAgfSxcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU9BLGNBQVAsTUFBNkUsR0FBN0U7QUFDQSxPQUFPQyx5QkFBUCxNQUFzQyxlQUF0QztBQUNBLE9BQU9DLFdBQVAsTUFBd0IsZUFBeEI7O0FBRUEsTUFBTUMsU0FBcUIsR0FBRyxDQUFDLGdCQUFELENBQTlCOztBQUVBLGVBQWUsU0FBU0MsNEJBQVQ7QUFDYkMsSUFEYTtBQUViQyxjQUZhO0FBR1c7RUFDeEIsTUFBTSxFQUFFQyxLQUFGLEVBQVNDLE9BQVQsS0FBcUJGLGNBQTNCO0VBQ0EsTUFBTUcsQ0FBQyxHQUFHRCxPQUFPLENBQUNFLENBQVIsQ0FBVUMsVUFBcEI7RUFDQSxNQUFNQyxpQkFBaUIsR0FBRztJQUN4QixHQUFHTixjQURxQjtJQUV4QkMsS0FBSyxFQUFFTCxXQUFXLENBQUNLLEtBQUQsRUFBUSxDQUFSLENBRk0sRUFBMUI7O0VBSUEsTUFBTU0sT0FBdUIsR0FBR1IsSUFBSSxDQUFDUyxLQUFyQzs7RUFFQSxJQUFJTCxDQUFDLENBQUNNLFVBQUYsQ0FBYUMsS0FBYixDQUFtQkgsT0FBTyxDQUFDSSxHQUEzQixDQUFKLEVBQXFDO0lBQ25DO0lBQ0VKLE9BQU8sQ0FBQ0ssU0FBUjtJQUNBLENBQUNMLE9BQU8sQ0FBQ00sUUFEVDtJQUVBWCxPQUFPLENBQUNFLENBQVIsQ0FBVVUscUJBQVYsQ0FBZ0NQLE9BQU8sQ0FBQ0ksR0FBeEMsRUFBNkNKLE9BQU8sQ0FBQ0MsS0FBckQsQ0FIRjtJQUlFO01BQ0EsTUFBTU8sa0JBQWtCLEdBQUdwQix5QkFBeUI7TUFDbERJLElBRGtEO01BRWxEUSxPQUFPLENBQUNJLEdBQVIsQ0FBWUssSUFGc0M7TUFHbERoQixjQUhrRDtNQUlsRCxFQUFFaUIsUUFBUSxFQUFFLGNBQVosRUFKa0QsQ0FBcEQ7OztNQU9BLElBQUlGLGtCQUFKLEVBQXdCLE9BQU9BLGtCQUFQO0lBQ3pCO0VBQ0Y7RUFDRCxJQUFJLENBQUNSLE9BQU8sQ0FBQ00sUUFBYixFQUF1QjtJQUNyQixNQUFNSyxVQUFVLEdBQUd4QixjQUFjLENBQUNLLElBQUksQ0FBQ29CLEdBQUwsQ0FBUyxLQUFULENBQUQsRUFBa0JiLGlCQUFsQixDQUFqQztJQUNBLE1BQU1jLFlBQVksR0FBRzFCLGNBQWMsQ0FBQ0ssSUFBSSxDQUFDb0IsR0FBTCxDQUFTLE9BQVQsQ0FBRCxFQUFvQmIsaUJBQXBCLENBQW5DO0lBQ0EsT0FBTztNQUNMQyxPQUFPLEVBQUVSLElBREo7TUFFTGtCLFFBQVEsRUFBRXBCLFNBRkw7TUFHTHdCLEtBQUssRUFBRSxDQUFDQyxLQUFELEVBQWtCQyxVQUFsQixLQUEyRDtRQUNoRSxNQUFNLEVBQUVmLEtBQUssRUFBRWdCLElBQVQsS0FBa0JGLEtBQXhCO1FBQ0EsSUFBSSxDQUFDekIsU0FBUyxDQUFDNEIsUUFBVixDQUFtQkQsSUFBSSxDQUFDRSxJQUF4QixDQUFMLEVBQW9DO1VBQ2xDekIsS0FBSyxDQUFFLGlCQUFGLENBQUw7VUFDQSxPQUFPLElBQVA7UUFDRDtRQUNELE1BQU1GLElBQThCLEdBQUd1QixLQUF2QztRQUNBckIsS0FBSyxDQUFDLEtBQUQsQ0FBTDtRQUNBc0IsVUFBVSxHQUFHTCxVQUFVLENBQUNHLEtBQVgsQ0FBaUJ0QixJQUFJLENBQUNvQixHQUFMLENBQVMsS0FBVCxDQUFqQixFQUFrQ0ksVUFBbEMsQ0FBYjtRQUNBLElBQUksQ0FBQ0EsVUFBTCxFQUFpQixPQUFPLElBQVA7UUFDakJ0QixLQUFLLENBQUMsT0FBRCxDQUFMO1FBQ0EsT0FBT21CLFlBQVksQ0FBQ0MsS0FBYixDQUFtQnRCLElBQUksQ0FBQ29CLEdBQUwsQ0FBUyxPQUFULENBQW5CLEVBQXNDSSxVQUF0QyxDQUFQO01BQ0QsQ0FmSSxFQUFQOztFQWlCRDtBQUNGIn0=