astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
81 lines (67 loc) • 9.26 kB
JavaScript
import convertJSXChildReplacement from './convertJSXChildReplacement.mjs'
import convertJSXAttributeValueReplacement from './convertJSXAttributeValueReplacement.mjs'
import TypeParameter from './convertTypeParameterReplacement.mjs'
import TSTypeParameter from './convertTSTypeParameterReplacement.mjs'
import convertFlowTypeReplacement from './convertFlowTypeReplacement.mjs'
import convertTSTypeReplacement from './convertTSTypeReplacement.mjs'
import convertPropertyReplacement from './convertPropertyReplacement.mjs'
import convertExpressionReplacement from './convertExpressionReplacement.mjs'
import convertStatementReplacement from './convertStatementReplacement.mjs'
import convertImportSpecifierReplacement from './convertImportSpecifierReplacement.mjs'
import * as t from '@babel/types'
import ensureArray from '../util/ensureArray.mjs'
import convertArrayElementReplacement from './convertArrayElementReplacement.mjs'
function identity(x) {
return x
}
const nodeConverters = {
TypeParameter,
TSTypeParameter,
ImportSpecifier: convertImportSpecifierReplacement,
ImportDefaultSpecifier: convertImportSpecifierReplacement,
}
export default function createReplacementConverter(path) {
var _path$parentPath
const parentNode =
(_path$parentPath = path.parentPath) === null || _path$parentPath === void 0
? void 0
: _path$parentPath.node
const nodeConverter = nodeConverters[path.node.type]
if (nodeConverter) return nodeConverter(path)
switch (
parentNode === null || parentNode === void 0 ? void 0 : parentNode.type
) {
case 'JSXAttribute':
if (path.node === parentNode.value)
return convertJSXAttributeValueReplacement
break
case 'JSXElement':
return convertJSXChildReplacement
case 'ObjectExpression':
case 'ObjectPattern':
return convertPropertyReplacement
case 'ArrayExpression':
case 'ArrayPattern':
return convertArrayElementReplacement
}
if (t.isStatement(path.node)) {
return convertStatementReplacement
}
if (t.isExpression(path.node)) {
return convertExpressionReplacement
}
if (t.isFlow(path.node)) {
return convertFlowTypeReplacement
}
if (t.isTSType(path.node)) {
return convertTSTypeReplacement
}
return identity
}
export function* bulkConvert(nodes, convert) {
for (const node of ensureArray(nodes)) {
const converted = convert(node)
if (Array.isArray(converted)) yield* converted
else yield converted
}
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb252ZXJ0SlNYQ2hpbGRSZXBsYWNlbWVudCIsImNvbnZlcnRKU1hBdHRyaWJ1dGVWYWx1ZVJlcGxhY2VtZW50IiwiVHlwZVBhcmFtZXRlciIsIlRTVHlwZVBhcmFtZXRlciIsImNvbnZlcnRGbG93VHlwZVJlcGxhY2VtZW50IiwiY29udmVydFRTVHlwZVJlcGxhY2VtZW50IiwiY29udmVydFByb3BlcnR5UmVwbGFjZW1lbnQiLCJjb252ZXJ0RXhwcmVzc2lvblJlcGxhY2VtZW50IiwiY29udmVydFN0YXRlbWVudFJlcGxhY2VtZW50IiwiY29udmVydEltcG9ydFNwZWNpZmllclJlcGxhY2VtZW50IiwidCIsImVuc3VyZUFycmF5IiwiY29udmVydEFycmF5RWxlbWVudFJlcGxhY2VtZW50IiwiaWRlbnRpdHkiLCJ4Iiwibm9kZUNvbnZlcnRlcnMiLCJJbXBvcnRTcGVjaWZpZXIiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiY3JlYXRlUmVwbGFjZW1lbnRDb252ZXJ0ZXIiLCJwYXRoIiwicGFyZW50Tm9kZSIsInBhcmVudFBhdGgiLCJub2RlIiwibm9kZUNvbnZlcnRlciIsInR5cGUiLCJ2YWx1ZSIsImlzU3RhdGVtZW50IiwiaXNFeHByZXNzaW9uIiwiaXNGbG93IiwiaXNUU1R5cGUiLCJidWxrQ29udmVydCIsIm5vZGVzIiwiY29udmVydCIsImNvbnZlcnRlZCIsIkFycmF5IiwiaXNBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0UmVwbGFjZW1lbnQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZSwgTm9kZVBhdGggfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCBjb252ZXJ0SlNYQ2hpbGRSZXBsYWNlbWVudCBmcm9tICcuL2NvbnZlcnRKU1hDaGlsZFJlcGxhY2VtZW50J1xuaW1wb3J0IGNvbnZlcnRKU1hBdHRyaWJ1dGVWYWx1ZVJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydEpTWEF0dHJpYnV0ZVZhbHVlUmVwbGFjZW1lbnQnXG5pbXBvcnQgVHlwZVBhcmFtZXRlciBmcm9tICcuL2NvbnZlcnRUeXBlUGFyYW1ldGVyUmVwbGFjZW1lbnQnXG5pbXBvcnQgVFNUeXBlUGFyYW1ldGVyIGZyb20gJy4vY29udmVydFRTVHlwZVBhcmFtZXRlclJlcGxhY2VtZW50J1xuaW1wb3J0IGNvbnZlcnRGbG93VHlwZVJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydEZsb3dUeXBlUmVwbGFjZW1lbnQnXG5pbXBvcnQgY29udmVydFRTVHlwZVJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydFRTVHlwZVJlcGxhY2VtZW50J1xuaW1wb3J0IGNvbnZlcnRQcm9wZXJ0eVJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydFByb3BlcnR5UmVwbGFjZW1lbnQnXG5pbXBvcnQgY29udmVydEV4cHJlc3Npb25SZXBsYWNlbWVudCBmcm9tICcuL2NvbnZlcnRFeHByZXNzaW9uUmVwbGFjZW1lbnQnXG5pbXBvcnQgY29udmVydFN0YXRlbWVudFJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydFN0YXRlbWVudFJlcGxhY2VtZW50J1xuaW1wb3J0IGNvbnZlcnRJbXBvcnRTcGVjaWZpZXJSZXBsYWNlbWVudCBmcm9tICcuL2NvbnZlcnRJbXBvcnRTcGVjaWZpZXJSZXBsYWNlbWVudCdcbmltcG9ydCAqIGFzIHQgZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0IGVuc3VyZUFycmF5IGZyb20gJy4uL3V0aWwvZW5zdXJlQXJyYXknXG5pbXBvcnQgY29udmVydEFycmF5RWxlbWVudFJlcGxhY2VtZW50IGZyb20gJy4vY29udmVydEFycmF5RWxlbWVudFJlcGxhY2VtZW50J1xuXG5leHBvcnQgdHlwZSBSZXBsYWNlbWVudENvbnZlcnRlciA9IChyZXBsYWNlbWVudDogTm9kZSkgPT4gTm9kZSB8IE5vZGVbXVxuXG5mdW5jdGlvbiBpZGVudGl0eTxUPih4OiBUKTogVCB7XG4gIHJldHVybiB4XG59XG5cbmNvbnN0IG5vZGVDb252ZXJ0ZXJzOiBSZWNvcmQ8c3RyaW5nLCAocGF0aDogTm9kZVBhdGgpID0+IFJlcGxhY2VtZW50Q29udmVydGVyPiA9XG4gIHtcbiAgICBUeXBlUGFyYW1ldGVyLFxuICAgIFRTVHlwZVBhcmFtZXRlcixcbiAgICBJbXBvcnRTcGVjaWZpZXI6IGNvbnZlcnRJbXBvcnRTcGVjaWZpZXJSZXBsYWNlbWVudCxcbiAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBjb252ZXJ0SW1wb3J0U3BlY2lmaWVyUmVwbGFjZW1lbnQsXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVwbGFjZW1lbnRDb252ZXJ0ZXIoXG4gIHBhdGg6IE5vZGVQYXRoPGFueT5cbik6IFJlcGxhY2VtZW50Q29udmVydGVyIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IHBhdGgucGFyZW50UGF0aD8ubm9kZVxuICBjb25zdCBub2RlQ29udmVydGVyID0gbm9kZUNvbnZlcnRlcnNbcGF0aC5ub2RlLnR5cGVdXG5cbiAgaWYgKG5vZGVDb252ZXJ0ZXIpIHJldHVybiBub2RlQ29udmVydGVyKHBhdGgpXG5cbiAgc3dpdGNoIChwYXJlbnROb2RlPy50eXBlKSB7XG4gICAgY2FzZSAnSlNYQXR0cmlidXRlJzpcbiAgICAgIGlmIChwYXRoLm5vZGUgPT09IHBhcmVudE5vZGUudmFsdWUpXG4gICAgICAgIHJldHVybiBjb252ZXJ0SlNYQXR0cmlidXRlVmFsdWVSZXBsYWNlbWVudFxuXG4gICAgICBicmVha1xuICAgIGNhc2UgJ0pTWEVsZW1lbnQnOlxuICAgICAgcmV0dXJuIGNvbnZlcnRKU1hDaGlsZFJlcGxhY2VtZW50XG4gICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgY2FzZSAnT2JqZWN0UGF0dGVybic6XG4gICAgICByZXR1cm4gY29udmVydFByb3BlcnR5UmVwbGFjZW1lbnRcbiAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgIGNhc2UgJ0FycmF5UGF0dGVybic6XG4gICAgICByZXR1cm4gY29udmVydEFycmF5RWxlbWVudFJlcGxhY2VtZW50XG4gIH1cblxuICBpZiAodC5pc1N0YXRlbWVudChwYXRoLm5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRTdGF0ZW1lbnRSZXBsYWNlbWVudFxuICB9XG5cbiAgaWYgKHQuaXNFeHByZXNzaW9uKHBhdGgubm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb25SZXBsYWNlbWVudFxuICB9XG5cbiAgaWYgKHQuaXNGbG93KHBhdGgubm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydEZsb3dUeXBlUmVwbGFjZW1lbnRcbiAgfVxuXG4gIGlmICh0LmlzVFNUeXBlKHBhdGgubm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydFRTVHlwZVJlcGxhY2VtZW50XG4gIH1cblxuICByZXR1cm4gaWRlbnRpdHlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBidWxrQ29udmVydChcbiAgbm9kZXM6IE5vZGUgfCBOb2RlW10sXG4gIGNvbnZlcnQ6IFJlcGxhY2VtZW50Q29udmVydGVyXG4pOiBJdGVyYWJsZTxOb2RlPiB7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBlbnN1cmVBcnJheShub2RlcykpIHtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0KG5vZGUpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29udmVydGVkKSkgeWllbGQqIGNvbnZlcnRlZFxuICAgIGVsc2UgeWllbGQgY29udmVydGVkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU9BLDBCQUFQLE1BQXVDLDhCQUF2QztBQUNBLE9BQU9DLG1DQUFQLE1BQWdELHVDQUFoRDtBQUNBLE9BQU9DLGFBQVAsTUFBMEIsbUNBQTFCO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixxQ0FBNUI7QUFDQSxPQUFPQywwQkFBUCxNQUF1Qyw4QkFBdkM7QUFDQSxPQUFPQyx3QkFBUCxNQUFxQyw0QkFBckM7QUFDQSxPQUFPQywwQkFBUCxNQUF1Qyw4QkFBdkM7QUFDQSxPQUFPQyw0QkFBUCxNQUF5QyxnQ0FBekM7QUFDQSxPQUFPQywyQkFBUCxNQUF3QywrQkFBeEM7QUFDQSxPQUFPQyxpQ0FBUCxNQUE4QyxxQ0FBOUM7QUFDQSxPQUFPLEtBQUtDLENBQVosTUFBbUIsY0FBbkI7QUFDQSxPQUFPQyxXQUFQLE1BQXdCLHFCQUF4QjtBQUNBLE9BQU9DLDhCQUFQLE1BQTJDLGtDQUEzQzs7OztBQUlBLFNBQVNDLFFBQVQsQ0FBcUJDLENBQXJCLEVBQThCO0VBQzVCLE9BQU9BLENBQVA7QUFDRDs7QUFFRCxNQUFNQyxjQUF3RTtBQUM1RTtFQUNFYixhQURGO0VBRUVDLGVBRkY7RUFHRWEsZUFBZSxFQUFFUCxpQ0FIbkI7RUFJRVEsc0JBQXNCLEVBQUVSLGlDQUoxQixFQURGOzs7QUFRQSxlQUFlLFNBQVNTLDBCQUFUO0FBQ2JDLElBRGE7QUFFUztFQUN0QixNQUFNQyxVQUFVLHVCQUFHRCxJQUFJLENBQUNFLFVBQVIscURBQUcsaUJBQWlCQyxJQUFwQztFQUNBLE1BQU1DLGFBQWEsR0FBR1IsY0FBYyxDQUFDSSxJQUFJLENBQUNHLElBQUwsQ0FBVUUsSUFBWCxDQUFwQzs7RUFFQSxJQUFJRCxhQUFKLEVBQW1CLE9BQU9BLGFBQWEsQ0FBQ0osSUFBRCxDQUFwQjs7RUFFbkIsUUFBUUMsVUFBUixhQUFRQSxVQUFSLHVCQUFRQSxVQUFVLENBQUVJLElBQXBCO0lBQ0UsS0FBSyxjQUFMO01BQ0UsSUFBSUwsSUFBSSxDQUFDRyxJQUFMLEtBQWNGLFVBQVUsQ0FBQ0ssS0FBN0I7TUFDRSxPQUFPeEIsbUNBQVA7O01BRUY7SUFDRixLQUFLLFlBQUw7TUFDRSxPQUFPRCwwQkFBUDtJQUNGLEtBQUssa0JBQUw7SUFDQSxLQUFLLGVBQUw7TUFDRSxPQUFPTSwwQkFBUDtJQUNGLEtBQUssaUJBQUw7SUFDQSxLQUFLLGNBQUw7TUFDRSxPQUFPTSw4QkFBUCxDQWJKOzs7RUFnQkEsSUFBSUYsQ0FBQyxDQUFDZ0IsV0FBRixDQUFjUCxJQUFJLENBQUNHLElBQW5CLENBQUosRUFBOEI7SUFDNUIsT0FBT2QsMkJBQVA7RUFDRDs7RUFFRCxJQUFJRSxDQUFDLENBQUNpQixZQUFGLENBQWVSLElBQUksQ0FBQ0csSUFBcEIsQ0FBSixFQUErQjtJQUM3QixPQUFPZiw0QkFBUDtFQUNEOztFQUVELElBQUlHLENBQUMsQ0FBQ2tCLE1BQUYsQ0FBU1QsSUFBSSxDQUFDRyxJQUFkLENBQUosRUFBeUI7SUFDdkIsT0FBT2xCLDBCQUFQO0VBQ0Q7O0VBRUQsSUFBSU0sQ0FBQyxDQUFDbUIsUUFBRixDQUFXVixJQUFJLENBQUNHLElBQWhCLENBQUosRUFBMkI7SUFDekIsT0FBT2pCLHdCQUFQO0VBQ0Q7O0VBRUQsT0FBT1EsUUFBUDtBQUNEOztBQUVELE9BQU8sVUFBVWlCLFdBQVY7QUFDTEMsS0FESztBQUVMQyxPQUZLO0FBR1c7RUFDaEIsS0FBSyxNQUFNVixJQUFYLElBQW1CWCxXQUFXLENBQUNvQixLQUFELENBQTlCLEVBQXVDO0lBQ3JDLE1BQU1FLFNBQVMsR0FBR0QsT0FBTyxDQUFDVixJQUFELENBQXpCO0lBQ0EsSUFBSVksS0FBSyxDQUFDQyxPQUFOLENBQWNGLFNBQWQsQ0FBSixFQUE4QixPQUFPQSxTQUFQLENBQTlCO0lBQ0ssTUFBTUEsU0FBTjtFQUNOO0FBQ0YifQ==