UNPKG

astx

Version:

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

81 lines (67 loc) 9.26 kB
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==