UNPKG

@marko/compiler

Version:
56 lines (49 loc) 1.86 kB
"use strict";exports.__esModule = true;exports.normalizeTemplateString = normalizeTemplateString;var _compiler = require("@marko/compiler"); var _jsesc = _interopRequireDefault(require("jsesc"));function _interopRequireDefault(e) {return e && e.__esModule ? e : { default: e };} function normalizeTemplateString(quasis, ...expressions) { quasis = quasis.map((q) => _compiler.types.isTemplateElement(q) ? q.value.cooked : q); for (let i = expressions.length; i--;) { let v = expressions[i]; if (_compiler.types.isTemplateLiteral(v)) { quasis[i] += v.quasis[0].value.cooked; quasis[i + 1] = v.quasis[v.quasis.length - 1].value.cooked + (quasis[i + 1] || ""); quasis.splice( i + 1, 0, ...v.quasis.slice(1, -1).map((q) => q.value.cooked) ); expressions.splice(i, 1, ...v.expressions); i += v.expressions.length; } else if (_compiler.types.isStringLiteral(v) || typeof v === "string") { const value = _compiler.types.isStringLiteral(v) ? v.value : v; quasis[i] += value + quasis[i + 1]; expressions.splice(i, 1); quasis.splice(i + 1, 1); } } if (!expressions.length) { // No expression, just return a literal or empty. const literal = quasis.join(""); return literal === "" ? undefined : _compiler.types.stringLiteral(literal); } if ( expressions.length === 1 && quasis.length === 2 && quasis.every(isEmptyString)) { // Only expression `${expr}` just return the expr. return expressions[0]; } // Do it. return _compiler.types.templateLiteral(quasis.map(getTemplateElement), expressions); } function getTemplateElement(s = "") { return _compiler.types.templateElement({ cooked: s, raw: (0, _jsesc.default)(s, { quotes: "backtick" }) }); } function isEmptyString(s = "") { return s === ""; }