jscodeshaft
Version:
Collection of more or less primitive helpers and abstractions for JSCodeShift, build for design system migrations and upgrades.
31 lines (30 loc) • 1.05 kB
JavaScript
/**
* @typedef {function} templateArgs
* @param {string[]} quasis Collection of quasis (literal fragments)
* @param {*[]} expressions Collection of literal nodes for primitives OR
* expressions containers for anything else.
* @returns {Node}
*//**
* Create String Template Literal.
* the order of composition will be always like this:
* Q1 E1 Q2 E2 ... En Qn
*
* @TODO Accept primitives directly
*
* @param {function} j JSCodeShift instance
* @returns {function(templateArgs): Node}
* @see https://vramana.github.io/blog/2015/12/21/codemod-tutorial/
* @see https://github.com/cpojer/js-codemod/blob/master/transforms/template-literals.js
*/
export const createTemplateLiteral = j => (quasis, expressions) => (
Array.isArray(quasis) && Array.isArray(expressions)
? j.templateLiteral(
quasis.map((val, index) => (
j.templateElement(
{cooked: val, raw: val},
(index === quasis.length - 1),
)
)), expressions,
)
: undefined
);