UNPKG

astx

Version:

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

28 lines (25 loc) 4.36 kB
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=