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