@abaplint/transpiler
Version:
40 lines • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StringTemplateTranspiler = void 0;
const core_1 = require("@abaplint/core");
const _1 = require(".");
const chunk_1 = require("../chunk");
class StringTemplateTranspiler {
transpile(node, traversal) {
let ret = "";
const children = node.getChildren();
// eslint-disable-next-line @typescript-eslint/prefer-for-of
for (let i = 0; i < children.length; i++) {
const c = children[i];
const g = c.get();
if (c instanceof core_1.Nodes.TokenNode) {
let original = c.getFirstToken().getStr();
original = original.substring(1, original.length - 1);
original = original.replace(/`/g, "\\`");
if (g instanceof core_1.Tokens.StringTemplate) {
ret = "`" + original + "`";
}
else if (g instanceof core_1.Tokens.StringTemplateBegin) {
ret = "`" + original + "${";
}
else if (g instanceof core_1.Tokens.StringTemplateMiddle) {
ret = ret + "}" + original + "${";
}
else if (g instanceof core_1.Tokens.StringTemplateEnd) {
ret = ret + "}" + original + "`";
}
}
else if (c instanceof core_1.Nodes.ExpressionNode) {
ret += new _1.StringTemplateSourceTranspiler().transpile(c, traversal).getCode();
}
}
return new chunk_1.Chunk("new abap.types.String().set(" + ret + ")");
}
}
exports.StringTemplateTranspiler = StringTemplateTranspiler;
//# sourceMappingURL=string_template.js.map