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
57 lines • 2.14 kB
JavaScript
;
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 CompilerError_1 = require("../errors/CompilerError");
const typeUtilities_1 = require("../typeUtilities");
function safeMapGet(map, key, node) {
const find = map.get(key);
if (!find) {
throw new CompilerError_1.CompilerError(`Failed to find context for ${node.getKindName()} ${node.getText()}`, node, CompilerError_1.CompilerErrorType.BadContext);
}
return find;
}
function compileNamespaceDeclaration(state, node) {
if (typeUtilities_1.isTypeOnlyNamespace(node)) {
return "";
}
state.pushIdStack();
const name = node.getName();
_1.checkReserved(name, node, true);
const parentNamespace = node.getFirstAncestorByKind(ts.SyntaxKind.ModuleDeclaration);
state.pushExport(name, node);
state.pushHoistStack(name);
let result = "";
const id = state.getNewId();
const previousName = state.namespaceStack.get(name);
if (parentNamespace) {
const parentName = safeMapGet(state.namespaceStack, parentNamespace.getName(), node);
result += state.indent + `${name} = ${parentName}.${name} or {} do\n`;
}
else {
result += state.indent + `${name} = ${name} or {} do\n`;
}
state.namespaceStack.set(name, id);
state.pushIndent();
result += state.indent + `local ${id} = ${name};\n`;
result += _1.compileStatementedNode(state, node);
if (previousName) {
state.namespaceStack.set(name, previousName);
}
else {
state.namespaceStack.delete(name);
}
state.popIndent();
result += state.indent + `end;\n`;
state.popIdStack();
return result;
}
exports.compileNamespaceDeclaration = compileNamespaceDeclaration;
//# sourceMappingURL=namespace.js.map