astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
28 lines (25 loc) • 4.36 kB
JavaScript
import compileMatcher from './index.mjs'
import indentDebug from './indentDebug.mjs'
export default function compileAndMatcher(path, paths, compileOptions) {
const { debug } = compileOptions
const elemOptions = { ...compileOptions, debug: indentDebug(debug, 1) }
const matchers = paths.map((path) => compileMatcher(path, elemOptions))
const nodeType = new Set()
for (const m of matchers) {
if (Array.isArray(m.nodeType)) m.nodeType.forEach((t) => nodeType.add(t))
else if (m.nodeType) nodeType.add(m.nodeType)
}
return {
pattern: path,
nodeType: nodeType.size ? [...nodeType] : undefined,
optional: true,
match: (path, matchSoFar) => {
debug('$And')
for (const matcher of matchers) {
matchSoFar = matcher.match(path, matchSoFar)
if (!matchSoFar) return null
}
return matchSoFar
},
}
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlTWF0Y2hlciIsImluZGVudERlYnVnIiwiY29tcGlsZUFuZE1hdGNoZXIiLCJwYXRoIiwicGF0aHMiLCJjb21waWxlT3B0aW9ucyIsImRlYnVnIiwiZWxlbU9wdGlvbnMiLCJtYXRjaGVycyIsIm1hcCIsIm5vZGVUeXBlIiwiU2V0IiwibSIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJ0IiwiYWRkIiwicGF0dGVybiIsInNpemUiLCJ1bmRlZmluZWQiLCJvcHRpb25hbCIsIm1hdGNoIiwibWF0Y2hTb0ZhciIsIm1hdGNoZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZU1hdGNoZXIvQW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGUsIE5vZGVQYXRoIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgY29tcGlsZU1hdGNoZXIsIHsgQ29tcGlsZWRNYXRjaGVyLCBDb21waWxlT3B0aW9ucywgTWF0Y2hSZXN1bHQgfSBmcm9tICcuJ1xuaW1wb3J0IHsgTm9kZVR5cGUgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCBpbmRlbnREZWJ1ZyBmcm9tICcuL2luZGVudERlYnVnJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21waWxlQW5kTWF0Y2hlcihcbiAgcGF0aDogTm9kZVBhdGgsXG4gIHBhdGhzOiBOb2RlUGF0aDxOb2RlLCBOb2RlW10+LFxuICBjb21waWxlT3B0aW9uczogQ29tcGlsZU9wdGlvbnNcbik6IENvbXBpbGVkTWF0Y2hlciB8IHZvaWQge1xuICBjb25zdCB7IGRlYnVnIH0gPSBjb21waWxlT3B0aW9uc1xuICBjb25zdCBlbGVtT3B0aW9ucyA9IHtcbiAgICAuLi5jb21waWxlT3B0aW9ucyxcbiAgICBkZWJ1ZzogaW5kZW50RGVidWcoZGVidWcsIDEpLFxuICB9XG4gIGNvbnN0IG1hdGNoZXJzID0gcGF0aHMubWFwKChwYXRoKSA9PiBjb21waWxlTWF0Y2hlcihwYXRoLCBlbGVtT3B0aW9ucykpXG4gIGNvbnN0IG5vZGVUeXBlOiBTZXQ8Tm9kZVR5cGU+ID0gbmV3IFNldCgpXG4gIGZvciAoY29uc3QgbSBvZiBtYXRjaGVycykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG0ubm9kZVR5cGUpKSBtLm5vZGVUeXBlLmZvckVhY2goKHQpID0+IG5vZGVUeXBlLmFkZCh0KSlcbiAgICBlbHNlIGlmIChtLm5vZGVUeXBlKSBub2RlVHlwZS5hZGQobS5ub2RlVHlwZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdHRlcm46IHBhdGgsXG4gICAgbm9kZVR5cGU6IG5vZGVUeXBlLnNpemUgPyBbLi4ubm9kZVR5cGVdIDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIG1hdGNoOiAocGF0aDogTm9kZVBhdGgsIG1hdGNoU29GYXI6IE1hdGNoUmVzdWx0KTogTWF0Y2hSZXN1bHQgPT4ge1xuICAgICAgZGVidWcoJyRBbmQnKVxuICAgICAgZm9yIChjb25zdCBtYXRjaGVyIG9mIG1hdGNoZXJzKSB7XG4gICAgICAgIG1hdGNoU29GYXIgPSBtYXRjaGVyLm1hdGNoKHBhdGgsIG1hdGNoU29GYXIpXG4gICAgICAgIGlmICghbWF0Y2hTb0ZhcikgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaFNvRmFyXG4gICAgfSxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBT0EsY0FBUCxNQUE2RSxHQUE3RTs7QUFFQSxPQUFPQyxXQUFQLE1BQXdCLGVBQXhCOztBQUVBLGVBQWUsU0FBU0MsaUJBQVQ7QUFDYkMsSUFEYTtBQUViQyxLQUZhO0FBR2JDLGNBSGE7QUFJVztFQUN4QixNQUFNLEVBQUVDLEtBQUYsS0FBWUQsY0FBbEI7RUFDQSxNQUFNRSxXQUFXLEdBQUc7SUFDbEIsR0FBR0YsY0FEZTtJQUVsQkMsS0FBSyxFQUFFTCxXQUFXLENBQUNLLEtBQUQsRUFBUSxDQUFSLENBRkEsRUFBcEI7O0VBSUEsTUFBTUUsUUFBUSxHQUFHSixLQUFLLENBQUNLLEdBQU4sQ0FBVSxDQUFDTixJQUFELEtBQVVILGNBQWMsQ0FBQ0csSUFBRCxFQUFPSSxXQUFQLENBQWxDLENBQWpCO0VBQ0EsTUFBTUcsUUFBdUIsR0FBRyxJQUFJQyxHQUFKLEVBQWhDO0VBQ0EsS0FBSyxNQUFNQyxDQUFYLElBQWdCSixRQUFoQixFQUEwQjtJQUN4QixJQUFJSyxLQUFLLENBQUNDLE9BQU4sQ0FBY0YsQ0FBQyxDQUFDRixRQUFoQixDQUFKLEVBQStCRSxDQUFDLENBQUNGLFFBQUYsQ0FBV0ssT0FBWCxDQUFtQixDQUFDQyxDQUFELEtBQU9OLFFBQVEsQ0FBQ08sR0FBVCxDQUFhRCxDQUFiLENBQTFCLEVBQS9CO0lBQ0ssSUFBSUosQ0FBQyxDQUFDRixRQUFOLEVBQWdCQSxRQUFRLENBQUNPLEdBQVQsQ0FBYUwsQ0FBQyxDQUFDRixRQUFmO0VBQ3RCO0VBQ0QsT0FBTztJQUNMUSxPQUFPLEVBQUVmLElBREo7SUFFTE8sUUFBUSxFQUFFQSxRQUFRLENBQUNTLElBQVQsR0FBZ0IsQ0FBQyxHQUFHVCxRQUFKLENBQWhCLEdBQWdDVSxTQUZyQztJQUdMQyxRQUFRLEVBQUUsSUFITDtJQUlMQyxLQUFLLEVBQUUsQ0FBQ25CLElBQUQsRUFBaUJvQixVQUFqQixLQUEwRDtNQUMvRGpCLEtBQUssQ0FBQyxNQUFELENBQUw7TUFDQSxLQUFLLE1BQU1rQixPQUFYLElBQXNCaEIsUUFBdEIsRUFBZ0M7UUFDOUJlLFVBQVUsR0FBR0MsT0FBTyxDQUFDRixLQUFSLENBQWNuQixJQUFkLEVBQW9Cb0IsVUFBcEIsQ0FBYjtRQUNBLElBQUksQ0FBQ0EsVUFBTCxFQUFpQixPQUFPLElBQVA7TUFDbEI7TUFDRCxPQUFPQSxVQUFQO0lBQ0QsQ0FYSSxFQUFQOztBQWFEIn0=