UNPKG

astx

Version:

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

46 lines (40 loc) 5.17 kB
import { getPlaceholder } from '../compileMatcher/Placeholder.mjs' import { unescapeIdentifier } from './Placeholder.mjs' import cloneNode from '../util/cloneNode.mjs' import * as t from '@babel/types' function generateValue(cooked) { return { raw: cooked.replace(/\\|`|\${/g, '\\$&'), cooked, } } export default function compileTemplateLiteralReplacement(path) { const pattern = path.value if (pattern.quasis.length === 1) { const [quasi] = pattern.quasis if (quasi.value.cooked) { const placeholder = getPlaceholder(quasi.value.cooked) if (placeholder) { return { generate: (match) => { var _match$stringCaptures const captured = (_match$stringCaptures = match.stringCaptures) === null || _match$stringCaptures === void 0 ? void 0 : _match$stringCaptures[placeholder] return captured ? t.templateLiteral( [t.templateElement(generateValue(captured), true)], [] ) : cloneNode(pattern) }, } } const unescaped = unescapeIdentifier(quasi.value.cooked) if (unescaped !== quasi.value.cooked) quasi.value = generateValue(unescaped) } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQbGFjZWhvbGRlciIsInVuZXNjYXBlSWRlbnRpZmllciIsImNsb25lTm9kZSIsInQiLCJnZW5lcmF0ZVZhbHVlIiwiY29va2VkIiwicmF3IiwicmVwbGFjZSIsImNvbXBpbGVUZW1wbGF0ZUxpdGVyYWxSZXBsYWNlbWVudCIsInBhdGgiLCJwYXR0ZXJuIiwidmFsdWUiLCJxdWFzaXMiLCJsZW5ndGgiLCJxdWFzaSIsInBsYWNlaG9sZGVyIiwiZ2VuZXJhdGUiLCJtYXRjaCIsImNhcHR1cmVkIiwic3RyaW5nQ2FwdHVyZXMiLCJ0ZW1wbGF0ZUxpdGVyYWwiLCJ0ZW1wbGF0ZUVsZW1lbnQiLCJ1bmVzY2FwZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZVJlcGxhY2VtZW50L1RlbXBsYXRlTGl0ZXJhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZUxpdGVyYWwsIE5vZGVQYXRoIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRQbGFjZWhvbGRlciB9IGZyb20gJy4uL2NvbXBpbGVNYXRjaGVyL1BsYWNlaG9sZGVyJ1xuaW1wb3J0IHsgQ29tcGlsZWRSZXBsYWNlbWVudCwgUmVwbGFjZWFibGVNYXRjaCB9IGZyb20gJy4vJ1xuaW1wb3J0IHsgdW5lc2NhcGVJZGVudGlmaWVyIH0gZnJvbSAnLi9QbGFjZWhvbGRlcidcbmltcG9ydCBjbG9uZU5vZGUgZnJvbSAnLi4vdXRpbC9jbG9uZU5vZGUnXG5pbXBvcnQgKiBhcyB0IGZyb20gJ0BiYWJlbC90eXBlcydcblxuZnVuY3Rpb24gZ2VuZXJhdGVWYWx1ZShjb29rZWQ6IHN0cmluZyk6IHsgcmF3OiBzdHJpbmc7IGNvb2tlZDogc3RyaW5nIH0ge1xuICByZXR1cm4geyByYXc6IGNvb2tlZC5yZXBsYWNlKC9cXFxcfGB8XFwkey9nLCAnXFxcXCQmJyksIGNvb2tlZCB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBpbGVUZW1wbGF0ZUxpdGVyYWxSZXBsYWNlbWVudChcbiAgcGF0aDogTm9kZVBhdGg8VGVtcGxhdGVMaXRlcmFsPlxuKTogQ29tcGlsZWRSZXBsYWNlbWVudCB8IHZvaWQge1xuICBjb25zdCBwYXR0ZXJuID0gcGF0aC52YWx1ZVxuICBpZiAocGF0dGVybi5xdWFzaXMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgW3F1YXNpXSA9IHBhdHRlcm4ucXVhc2lzXG4gICAgaWYgKHF1YXNpLnZhbHVlLmNvb2tlZCkge1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcihxdWFzaS52YWx1ZS5jb29rZWQpXG4gICAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZW5lcmF0ZTogKG1hdGNoOiBSZXBsYWNlYWJsZU1hdGNoKTogVGVtcGxhdGVMaXRlcmFsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVkID0gbWF0Y2guc3RyaW5nQ2FwdHVyZXM/LltwbGFjZWhvbGRlcl1cbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlZFxuICAgICAgICAgICAgICA/IHQudGVtcGxhdGVMaXRlcmFsKFxuICAgICAgICAgICAgICAgICAgW3QudGVtcGxhdGVFbGVtZW50KGdlbmVyYXRlVmFsdWUoY2FwdHVyZWQpLCB0cnVlKV0sXG4gICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBjbG9uZU5vZGUocGF0dGVybilcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB1bmVzY2FwZWQgPSB1bmVzY2FwZUlkZW50aWZpZXIocXVhc2kudmFsdWUuY29va2VkKVxuICAgICAgaWYgKHVuZXNjYXBlZCAhPT0gcXVhc2kudmFsdWUuY29va2VkKVxuICAgICAgICBxdWFzaS52YWx1ZSA9IGdlbmVyYXRlVmFsdWUodW5lc2NhcGVkKVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsU0FBU0EsY0FBVCxRQUErQiwrQkFBL0I7O0FBRUEsU0FBU0Msa0JBQVQsUUFBbUMsZUFBbkM7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLG1CQUF0QjtBQUNBLE9BQU8sS0FBS0MsQ0FBWixNQUFtQixjQUFuQjs7QUFFQSxTQUFTQyxhQUFULENBQXVCQyxNQUF2QixFQUF3RTtFQUN0RSxPQUFPLEVBQUVDLEdBQUcsRUFBRUQsTUFBTSxDQUFDRSxPQUFQLENBQWUsV0FBZixFQUE0QixNQUE1QixDQUFQLEVBQTRDRixNQUE1QyxFQUFQO0FBQ0Q7O0FBRUQsZUFBZSxTQUFTRyxpQ0FBVDtBQUNiQyxJQURhO0FBRWU7RUFDNUIsTUFBTUMsT0FBTyxHQUFHRCxJQUFJLENBQUNFLEtBQXJCO0VBQ0EsSUFBSUQsT0FBTyxDQUFDRSxNQUFSLENBQWVDLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7SUFDL0IsTUFBTSxDQUFDQyxLQUFELElBQVVKLE9BQU8sQ0FBQ0UsTUFBeEI7SUFDQSxJQUFJRSxLQUFLLENBQUNILEtBQU4sQ0FBWU4sTUFBaEIsRUFBd0I7TUFDdEIsTUFBTVUsV0FBVyxHQUFHZixjQUFjLENBQUNjLEtBQUssQ0FBQ0gsS0FBTixDQUFZTixNQUFiLENBQWxDO01BQ0EsSUFBSVUsV0FBSixFQUFpQjtRQUNmLE9BQU87VUFDTEMsUUFBUSxFQUFFLENBQUNDLEtBQUQsS0FBOEM7WUFDdEQsTUFBTUMsUUFBUSw0QkFBR0QsS0FBSyxDQUFDRSxjQUFULDBEQUFHLHNCQUF1QkosV0FBdkIsQ0FBakI7WUFDQSxPQUFPRyxRQUFRO1lBQ1hmLENBQUMsQ0FBQ2lCLGVBQUY7WUFDRSxDQUFDakIsQ0FBQyxDQUFDa0IsZUFBRixDQUFrQmpCLGFBQWEsQ0FBQ2MsUUFBRCxDQUEvQixFQUEyQyxJQUEzQyxDQUFELENBREY7WUFFRSxFQUZGLENBRFc7O1lBS1hoQixTQUFTLENBQUNRLE9BQUQsQ0FMYjtVQU1ELENBVEksRUFBUDs7TUFXRDtNQUNELE1BQU1ZLFNBQVMsR0FBR3JCLGtCQUFrQixDQUFDYSxLQUFLLENBQUNILEtBQU4sQ0FBWU4sTUFBYixDQUFwQztNQUNBLElBQUlpQixTQUFTLEtBQUtSLEtBQUssQ0FBQ0gsS0FBTixDQUFZTixNQUE5QjtNQUNFUyxLQUFLLENBQUNILEtBQU4sR0FBY1AsYUFBYSxDQUFDa0IsU0FBRCxDQUEzQjtJQUNIO0VBQ0Y7QUFDRiJ9