UNPKG

roblox-ts

Version:

<div align="center"><img width=25% src="https://i.imgur.com/yCjHmng.png"></div> <h1 align="center"><a href="https://roblox-ts.github.io/">roblox-ts</a></h1> <div align="center">A TypeScript-to-Lua Compiler for Roblox</div> <br> <div align="center"> <a hr

78 lines 3.04 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const ts = __importStar(require("ts-morph")); const _1 = require("."); const typeUtilities_1 = require("../typeUtilities"); const utility_1 = require("../utility"); function sanitizeTemplate(str) { str = str.replace(/(^|[^\\](?:\\\\)*)"/g, '$1\\"'); // replace " with \" str = str.replace(/(\r?\n|\r)/g, "\\$1"); // prefix new lines with \ return str; } exports.sanitizeTemplate = sanitizeTemplate; function wrapQuotes(s) { return `"${s}"`; } function getTemplateParts(state, node, tostring) { if (ts.TypeGuards.isNoSubstitutionTemplateLiteral(node)) { return { expressions: [], literals: [wrapQuotes(sanitizeTemplate(node.getText().slice(1, -1)))], }; } else { const literals = [ wrapQuotes(sanitizeTemplate(node .getHead() .getText() .slice(1, -2))), ]; for (const span of node.getTemplateSpans()) { const literal = span.getLiteral(); literals.push(wrapQuotes(sanitizeTemplate(literal.getText().slice(1, ts.TypeGuards.isTemplateMiddle(literal) ? -2 : -1)))); } const expressions = _1.compileList(state, node.getTemplateSpans().map(span => utility_1.skipNodesDownwards(span.getExpression())), (_, exp) => { const expStr = _1.compileExpression(state, exp); if (tostring) { return typeUtilities_1.isStringType(typeUtilities_1.getType(exp)) ? expStr : `tostring(${expStr})`; } else { return expStr; } }); return { expressions, literals, }; } } function compileTemplateExpression(state, node) { const parts = getTemplateParts(state, node, true); const bin = new Array(); for (let i = 0; i < parts.expressions.length; i++) { bin.push(parts.literals[i]); bin.push(parts.expressions[i]); } bin.push(parts.literals[parts.literals.length - 1]); return bin.filter(v => v !== `""`).join(" .. "); } exports.compileTemplateExpression = compileTemplateExpression; function compileTaggedTemplateExpression(state, node) { const tagStr = _1.compileExpression(state, utility_1.skipNodesDownwards(node.getTag())); const parts = getTemplateParts(state, node.getTemplate(), false); if (parts.expressions.length > 0) { return `${tagStr}({ ${parts.literals.join(", ")} }, ${parts.expressions.join(", ")})`; } else { return `${tagStr}({ ${parts.literals.join(", ")} })`; } } exports.compileTaggedTemplateExpression = compileTaggedTemplateExpression; //# sourceMappingURL=template.js.map