astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
89 lines (79 loc) • 8.28 kB
JavaScript
import {
getArrayPlaceholder,
getPlaceholder,
getRestPlaceholder,
isCapturePlaceholder,
unescapeIdentifier,
} from '../compileMatcher/Placeholder.mjs'
import createReplacementConverter, {
bulkConvert,
} from '../convertReplacement/index.mjs'
import cloneNode from '../util/cloneNode.mjs'
export { unescapeIdentifier }
export function compileArrayPlaceholderReplacement(
pattern,
identifier, // eslint-disable-next-line @typescript-eslint/no-unused-vars
compileReplacementOptions
) {
const arrayPlaceholder =
getArrayPlaceholder(identifier) || getRestPlaceholder(identifier)
if (arrayPlaceholder && isCapturePlaceholder(arrayPlaceholder)) {
const convertReplacement = createReplacementConverter(pattern)
return {
generate: (match) => {
var _match$arrayCaptures
const captures =
(_match$arrayCaptures = match.arrayCaptures) === null ||
_match$arrayCaptures === void 0
? void 0
: _match$arrayCaptures[arrayPlaceholder]
if (captures) {
return [
...bulkConvert(
captures.map((c) => cloneNode(c)),
convertReplacement
),
]
}
return [...bulkConvert(cloneNode(pattern.value), convertReplacement)]
},
}
}
}
export default function compilePlaceholderReplacement(
pattern,
identifier,
compileReplacementOptions
) {
const placeholder = getPlaceholder(identifier)
if (placeholder && isCapturePlaceholder(placeholder)) {
const convertReplacement = createReplacementConverter(pattern)
return {
generate: (match) => {
var _match$captures
const capture =
(_match$captures = match.captures) === null ||
_match$captures === void 0
? void 0
: _match$captures[placeholder]
if (capture) {
var _astx
const clone = cloneNode(capture)
if (
(_astx = capture.astx) !== null &&
_astx !== void 0 &&
_astx.excludeTypeAnnotationFromCapture
)
delete clone.typeAnnotation
return convertReplacement(clone)
}
return convertReplacement(cloneNode(pattern.value))
},
}
}
return compileArrayPlaceholderReplacement(
pattern,
identifier,
compileReplacementOptions
)
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRBcnJheVBsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJnZXRSZXN0UGxhY2Vob2xkZXIiLCJpc0NhcHR1cmVQbGFjZWhvbGRlciIsInVuZXNjYXBlSWRlbnRpZmllciIsImNyZWF0ZVJlcGxhY2VtZW50Q29udmVydGVyIiwiYnVsa0NvbnZlcnQiLCJjbG9uZU5vZGUiLCJjb21waWxlQXJyYXlQbGFjZWhvbGRlclJlcGxhY2VtZW50IiwicGF0dGVybiIsImlkZW50aWZpZXIiLCJjb21waWxlUmVwbGFjZW1lbnRPcHRpb25zIiwiYXJyYXlQbGFjZWhvbGRlciIsImNvbnZlcnRSZXBsYWNlbWVudCIsImdlbmVyYXRlIiwibWF0Y2giLCJjYXB0dXJlcyIsImFycmF5Q2FwdHVyZXMiLCJtYXAiLCJjIiwidmFsdWUiLCJjb21waWxlUGxhY2Vob2xkZXJSZXBsYWNlbWVudCIsInBsYWNlaG9sZGVyIiwiY2FwdHVyZSIsImNsb25lIiwiYXN0eCIsImV4Y2x1ZGVUeXBlQW5ub3RhdGlvbkZyb21DYXB0dXJlIiwidHlwZUFubm90YXRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZVJlcGxhY2VtZW50L1BsYWNlaG9sZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVSZXBsYWNlbWVudE9wdGlvbnMsXG4gIENvbXBpbGVkUmVwbGFjZW1lbnQsXG4gIFJlcGxhY2VhYmxlTWF0Y2gsXG59IGZyb20gJy4nXG5pbXBvcnQgeyBOb2RlLCBOb2RlUGF0aCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0QXJyYXlQbGFjZWhvbGRlcixcbiAgZ2V0UGxhY2Vob2xkZXIsXG4gIGdldFJlc3RQbGFjZWhvbGRlcixcbiAgaXNDYXB0dXJlUGxhY2Vob2xkZXIsXG4gIHVuZXNjYXBlSWRlbnRpZmllcixcbn0gZnJvbSAnLi4vY29tcGlsZU1hdGNoZXIvUGxhY2Vob2xkZXInXG5pbXBvcnQgY3JlYXRlUmVwbGFjZW1lbnRDb252ZXJ0ZXIsIHsgYnVsa0NvbnZlcnQgfSBmcm9tICcuLi9jb252ZXJ0UmVwbGFjZW1lbnQnXG5pbXBvcnQgY2xvbmVOb2RlIGZyb20gJy4uL3V0aWwvY2xvbmVOb2RlJ1xuZXhwb3J0IHsgdW5lc2NhcGVJZGVudGlmaWVyIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVBcnJheVBsYWNlaG9sZGVyUmVwbGFjZW1lbnQoXG4gIHBhdHRlcm46IE5vZGVQYXRoLFxuICBpZGVudGlmaWVyOiBzdHJpbmcsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgY29tcGlsZVJlcGxhY2VtZW50T3B0aW9uczogQ29tcGlsZVJlcGxhY2VtZW50T3B0aW9uc1xuKTogQ29tcGlsZWRSZXBsYWNlbWVudCB8IHZvaWQge1xuICBjb25zdCBhcnJheVBsYWNlaG9sZGVyID1cbiAgICBnZXRBcnJheVBsYWNlaG9sZGVyKGlkZW50aWZpZXIpIHx8IGdldFJlc3RQbGFjZWhvbGRlcihpZGVudGlmaWVyKVxuICBpZiAoYXJyYXlQbGFjZWhvbGRlciAmJiBpc0NhcHR1cmVQbGFjZWhvbGRlcihhcnJheVBsYWNlaG9sZGVyKSkge1xuICAgIGNvbnN0IGNvbnZlcnRSZXBsYWNlbWVudCA9IGNyZWF0ZVJlcGxhY2VtZW50Q29udmVydGVyKHBhdHRlcm4pXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlOiAobWF0Y2g6IFJlcGxhY2VhYmxlTWF0Y2gpOiBOb2RlIHwgTm9kZVtdID0+IHtcbiAgICAgICAgY29uc3QgY2FwdHVyZXMgPSBtYXRjaC5hcnJheUNhcHR1cmVzPy5bYXJyYXlQbGFjZWhvbGRlcl1cbiAgICAgICAgaWYgKGNhcHR1cmVzKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmJ1bGtDb252ZXJ0KFxuICAgICAgICAgICAgICBjYXB0dXJlcy5tYXAoKGMpID0+IGNsb25lTm9kZShjKSksXG4gICAgICAgICAgICAgIGNvbnZlcnRSZXBsYWNlbWVudFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5idWxrQ29udmVydChjbG9uZU5vZGUocGF0dGVybi52YWx1ZSksIGNvbnZlcnRSZXBsYWNlbWVudCldXG4gICAgICB9LFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21waWxlUGxhY2Vob2xkZXJSZXBsYWNlbWVudChcbiAgcGF0dGVybjogTm9kZVBhdGgsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgY29tcGlsZVJlcGxhY2VtZW50T3B0aW9uczogQ29tcGlsZVJlcGxhY2VtZW50T3B0aW9uc1xuKTogQ29tcGlsZWRSZXBsYWNlbWVudCB8IHZvaWQge1xuICBjb25zdCBwbGFjZWhvbGRlciA9IGdldFBsYWNlaG9sZGVyKGlkZW50aWZpZXIpXG4gIGlmIChwbGFjZWhvbGRlciAmJiBpc0NhcHR1cmVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcikpIHtcbiAgICBjb25zdCBjb252ZXJ0UmVwbGFjZW1lbnQgPSBjcmVhdGVSZXBsYWNlbWVudENvbnZlcnRlcihwYXR0ZXJuKVxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZTogKG1hdGNoOiBSZXBsYWNlYWJsZU1hdGNoKTogTm9kZSB8IE5vZGVbXSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBtYXRjaC5jYXB0dXJlcz8uW3BsYWNlaG9sZGVyXVxuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGNvbnN0IGNsb25lID0gY2xvbmVOb2RlKGNhcHR1cmUpXG4gICAgICAgICAgaWYgKChjYXB0dXJlIGFzIGFueSkuYXN0eD8uZXhjbHVkZVR5cGVBbm5vdGF0aW9uRnJvbUNhcHR1cmUpXG4gICAgICAgICAgICBkZWxldGUgKGNsb25lIGFzIGFueSkudHlwZUFubm90YXRpb25cbiAgICAgICAgICByZXR1cm4gY29udmVydFJlcGxhY2VtZW50KGNsb25lKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0UmVwbGFjZW1lbnQoY2xvbmVOb2RlKHBhdHRlcm4udmFsdWUpKVxuICAgICAgfSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGVBcnJheVBsYWNlaG9sZGVyUmVwbGFjZW1lbnQoXG4gICAgcGF0dGVybixcbiAgICBpZGVudGlmaWVyLFxuICAgIGNvbXBpbGVSZXBsYWNlbWVudE9wdGlvbnNcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQTtBQUNFQSxtQkFERjtBQUVFQyxjQUZGO0FBR0VDLGtCQUhGO0FBSUVDLG9CQUpGO0FBS0VDLGtCQUxGO0FBTU8sK0JBTlA7QUFPQSxPQUFPQywwQkFBUCxJQUFxQ0MsV0FBckMsUUFBd0QsdUJBQXhEO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixtQkFBdEI7QUFDQSxTQUFTSCxrQkFBVDs7QUFFQSxPQUFPLFNBQVNJLGtDQUFUO0FBQ0xDLE9BREs7QUFFTEMsVUFGSztBQUdMO0FBQ0FDLHlCQUpLO0FBS3VCO0VBQzVCLE1BQU1DLGdCQUFnQjtFQUNwQlosbUJBQW1CLENBQUNVLFVBQUQsQ0FBbkIsSUFBbUNSLGtCQUFrQixDQUFDUSxVQUFELENBRHZEO0VBRUEsSUFBSUUsZ0JBQWdCLElBQUlULG9CQUFvQixDQUFDUyxnQkFBRCxDQUE1QyxFQUFnRTtJQUM5RCxNQUFNQyxrQkFBa0IsR0FBR1IsMEJBQTBCLENBQUNJLE9BQUQsQ0FBckQ7SUFDQSxPQUFPO01BQ0xLLFFBQVEsRUFBRSxDQUFDQyxLQUFELEtBQTRDO1FBQ3BELE1BQU1DLFFBQVEsMkJBQUdELEtBQUssQ0FBQ0UsYUFBVCx5REFBRyxxQkFBc0JMLGdCQUF0QixDQUFqQjtRQUNBLElBQUlJLFFBQUosRUFBYztVQUNaLE9BQU87VUFDTCxHQUFHVixXQUFXO1VBQ1pVLFFBQVEsQ0FBQ0UsR0FBVCxDQUFhLENBQUNDLENBQUQsS0FBT1osU0FBUyxDQUFDWSxDQUFELENBQTdCLENBRFk7VUFFWk4sa0JBRlksQ0FEVCxDQUFQOzs7UUFNRDtRQUNELE9BQU8sQ0FBQyxHQUFHUCxXQUFXLENBQUNDLFNBQVMsQ0FBQ0UsT0FBTyxDQUFDVyxLQUFULENBQVYsRUFBMkJQLGtCQUEzQixDQUFmLENBQVA7TUFDRCxDQVpJLEVBQVA7O0VBY0Q7QUFDRjs7QUFFRCxlQUFlLFNBQVNRLDZCQUFUO0FBQ2JaLE9BRGE7QUFFYkMsVUFGYTtBQUdiQyx5QkFIYTtBQUllO0VBQzVCLE1BQU1XLFdBQVcsR0FBR3JCLGNBQWMsQ0FBQ1MsVUFBRCxDQUFsQztFQUNBLElBQUlZLFdBQVcsSUFBSW5CLG9CQUFvQixDQUFDbUIsV0FBRCxDQUF2QyxFQUFzRDtJQUNwRCxNQUFNVCxrQkFBa0IsR0FBR1IsMEJBQTBCLENBQUNJLE9BQUQsQ0FBckQ7SUFDQSxPQUFPO01BQ0xLLFFBQVEsRUFBRSxDQUFDQyxLQUFELEtBQTRDO1FBQ3BELE1BQU1RLE9BQU8sc0JBQUdSLEtBQUssQ0FBQ0MsUUFBVCxvREFBRyxnQkFBaUJNLFdBQWpCLENBQWhCO1FBQ0EsSUFBSUMsT0FBSixFQUFhO1VBQ1gsTUFBTUMsS0FBSyxHQUFHakIsU0FBUyxDQUFDZ0IsT0FBRCxDQUF2QjtVQUNBLGFBQUtBLE9BQUQsQ0FBaUJFLElBQXJCLGtDQUFJLE1BQXVCQyxnQ0FBM0I7VUFDRSxPQUFRRixLQUFELENBQWVHLGNBQXRCO1VBQ0YsT0FBT2Qsa0JBQWtCLENBQUNXLEtBQUQsQ0FBekI7UUFDRDtRQUNELE9BQU9YLGtCQUFrQixDQUFDTixTQUFTLENBQUNFLE9BQU8sQ0FBQ1csS0FBVCxDQUFWLENBQXpCO01BQ0QsQ0FWSSxFQUFQOztFQVlEO0VBQ0QsT0FBT1osa0NBQWtDO0VBQ3ZDQyxPQUR1QztFQUV2Q0MsVUFGdUM7RUFHdkNDLHlCQUh1QyxDQUF6Qzs7QUFLRCJ9