UNPKG

typescript-to-lua

Version:

A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!

100 lines 4.88 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transpileFiles = transpileFiles; exports.transpileProject = transpileProject; exports.createVirtualProgram = createVirtualProgram; exports.transpileVirtualProject = transpileVirtualProject; exports.transpileString = transpileString; const fs = require("fs"); const path = require("path"); const ts = require("typescript"); const tsconfig_1 = require("../cli/tsconfig"); const utils_1 = require("../utils"); const output_collector_1 = require("./output-collector"); const transpiler_1 = require("./transpiler"); __exportStar(require("./transpile"), exports); __exportStar(require("./transpiler"), exports); function transpileFiles(rootNames, options = {}, writeFile) { const program = ts.createProgram(rootNames, options); const preEmitDiagnostics = ts.getPreEmitDiagnostics(program); const { diagnostics: transpileDiagnostics, emitSkipped } = new transpiler_1.Transpiler().emit({ program, writeFile }); const diagnostics = ts.sortAndDeduplicateDiagnostics([...preEmitDiagnostics, ...transpileDiagnostics]); return { diagnostics: [...diagnostics], emitSkipped }; } function transpileProject(configFileName, optionsToExtend, writeFile) { const parseResult = (0, tsconfig_1.parseConfigFileWithSystem)(configFileName, optionsToExtend); if (parseResult.errors.length > 0) { return { diagnostics: parseResult.errors, emitSkipped: true }; } return transpileFiles(parseResult.fileNames, parseResult.options, writeFile); } const libCache = {}; /** @internal */ function createVirtualProgram(input, options = {}) { const normalizedFiles = {}; for (const [path, file] of Object.entries(input)) { normalizedFiles[(0, utils_1.normalizeSlashes)(path)] = file; } const compilerHost = { fileExists: fileName => fileName in normalizedFiles || ts.sys.fileExists(fileName), getCanonicalFileName: fileName => fileName, getCurrentDirectory: () => "", getDefaultLibFileName: ts.getDefaultLibFileName, readFile: () => "", getNewLine: () => "\n", useCaseSensitiveFileNames: () => false, writeFile() { }, getSourceFile(fileName) { if (fileName in normalizedFiles) { return ts.createSourceFile(fileName, normalizedFiles[fileName], ts.ScriptTarget.Latest, false); } let filePath; if (fileName.startsWith("lib.")) { const typeScriptDir = path.dirname(require.resolve("typescript")); filePath = path.join(typeScriptDir, fileName); } if (fileName.includes("language-extensions")) { const dtsName = fileName.replace(/(\.d)?(\.ts)$/, ".d.ts"); filePath = path.resolve(dtsName); } if (filePath !== undefined) { if (libCache[fileName]) return libCache[fileName]; const content = fs.readFileSync(filePath, "utf8"); libCache[fileName] = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, false); return libCache[fileName]; } }, }; return ts.createProgram(Object.keys(normalizedFiles), options, compilerHost); } function transpileVirtualProject(files, options = {}) { const program = createVirtualProgram(files, options); const preEmitDiagnostics = ts.getPreEmitDiagnostics(program); const collector = (0, output_collector_1.createEmitOutputCollector)(); const { diagnostics: transpileDiagnostics } = new transpiler_1.Transpiler().emit({ program, writeFile: collector.writeFile }); const diagnostics = ts.sortAndDeduplicateDiagnostics([...preEmitDiagnostics, ...transpileDiagnostics]); return { diagnostics: [...diagnostics], transpiledFiles: collector.files }; } function transpileString(main, options = {}) { const { diagnostics, transpiledFiles } = transpileVirtualProject({ "main.ts": main }, options); return { diagnostics, file: transpiledFiles.find(({ sourceFiles }) => sourceFiles.some(f => f.fileName === "main.ts")), }; } //# sourceMappingURL=index.js.map