astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
46 lines (40 loc) • 5.17 kB
JavaScript
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