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

57 lines 2.14 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 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