typescript-to-lua 1.11.1 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CompilerOptions.d.ts +2 -1
- package/dist/CompilerOptions.js +1 -0
- package/dist/LuaLib.d.ts +4 -0
- package/dist/LuaLib.js +69 -19
- package/dist/LuaPrinter.js +2 -1
- package/dist/lualib/5.0/ArraySlice.lua +2 -10
- package/dist/lualib/5.0/ArraySplice.lua +1 -5
- package/dist/lualib/5.0/ParseFloat.lua +1 -5
- package/dist/lualib/5.0/StringCharCodeAt.lua +1 -5
- package/dist/lualib/5.0/lualib_bundle.lua +5 -25
- package/dist/lualib/universal/ArraySlice.lua +2 -10
- package/dist/lualib/universal/ArraySplice.lua +1 -5
- package/dist/lualib/universal/ParseFloat.lua +1 -5
- package/dist/lualib/universal/SparseArraySpread.lua +1 -5
- package/dist/lualib/universal/StringCharCodeAt.lua +1 -5
- package/dist/lualib/universal/lualib_bundle.lua +6 -30
- package/dist/lualib-build/plugin.js +1 -1
- package/dist/transformation/builtins/array.js +1 -1
- package/dist/transformation/utils/diagnostics.d.ts +6 -0
- package/dist/transformation/utils/diagnostics.js +3 -1
- package/dist/transformation/utils/language-extensions.d.ts +4 -0
- package/dist/transformation/utils/language-extensions.js +66 -1
- package/dist/transformation/utils/typescript/index.d.ts +1 -0
- package/dist/transformation/utils/typescript/index.js +5 -1
- package/dist/transformation/utils/typescript/types.js +0 -3
- package/dist/transformation/visitors/expression-statement.d.ts +2 -2
- package/dist/transformation/visitors/expression-statement.js +4 -5
- package/dist/transformation/visitors/identifier.js +3 -1
- package/dist/transformation/visitors/language-extensions/operators.js +9 -15
- package/dist/transformation/visitors/language-extensions/table.d.ts +2 -4
- package/dist/transformation/visitors/language-extensions/table.js +32 -38
- package/dist/transformation/visitors/optional-chaining.d.ts +2 -1
- package/dist/transformation/visitors/optional-chaining.js +78 -32
- package/dist/transformation/visitors/void.js +1 -1
- package/dist/transpilation/diagnostics.js +1 -1
- package/dist/transpilation/find-lua-requires.d.ts +6 -0
- package/dist/transpilation/find-lua-requires.js +145 -0
- package/dist/transpilation/resolve.js +17 -25
- package/dist/transpilation/transpiler.d.ts +1 -0
- package/dist/transpilation/transpiler.js +13 -3
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ const transpiler_1 = require("./transpiler");
|
|
|
9
9
|
const utils_1 = require("../utils");
|
|
10
10
|
const diagnostics_1 = require("./diagnostics");
|
|
11
11
|
const CompilerOptions_1 = require("../CompilerOptions");
|
|
12
|
+
const find_lua_requires_1 = require("./find-lua-requires");
|
|
12
13
|
const resolver = resolve.ResolverFactory.createResolver({
|
|
13
14
|
extensions: [".lua"],
|
|
14
15
|
enforceExtension: true,
|
|
@@ -32,12 +33,13 @@ class ResolutionContext {
|
|
|
32
33
|
if (this.resolvedFiles.has(file.fileName))
|
|
33
34
|
return;
|
|
34
35
|
this.resolvedFiles.set(file.fileName, file);
|
|
35
|
-
|
|
36
|
+
// Do this backwards so the replacements do not mess with the positions of the previous requires
|
|
37
|
+
for (const required of (0, find_lua_requires_1.findLuaRequires)(file.code).reverse()) {
|
|
36
38
|
// Do not resolve noResolution paths
|
|
37
|
-
if (required.startsWith("@NoResolution:")) {
|
|
39
|
+
if (required.requirePath.startsWith("@NoResolution:")) {
|
|
38
40
|
// Remove @NoResolution prefix if not building in library mode
|
|
39
41
|
if (!isBuildModeLibrary(this.program)) {
|
|
40
|
-
const path = required.replace("@NoResolution:", "");
|
|
42
|
+
const path = required.requirePath.replace("@NoResolution:", "");
|
|
41
43
|
replaceRequireInCode(file, required, path);
|
|
42
44
|
replaceRequireInSourceMap(file, required, path);
|
|
43
45
|
}
|
|
@@ -50,21 +52,21 @@ class ResolutionContext {
|
|
|
50
52
|
}
|
|
51
53
|
resolveImport(file, required) {
|
|
52
54
|
// Do no resolve lualib - always use the lualib of the application entry point, not the lualib from external packages
|
|
53
|
-
if (required === "lualib_bundle") {
|
|
55
|
+
if (required.requirePath === "lualib_bundle") {
|
|
54
56
|
this.resolvedFiles.set("lualib_bundle", { fileName: "lualib_bundle", code: "" });
|
|
55
57
|
return;
|
|
56
58
|
}
|
|
57
|
-
if (this.noResolvePaths.has(required)) {
|
|
59
|
+
if (this.noResolvePaths.has(required.requirePath)) {
|
|
58
60
|
if (this.options.tstlVerbose) {
|
|
59
|
-
console.log(`Skipping module resolution of ${required} as it is in the tsconfig noResolvePaths.`);
|
|
61
|
+
console.log(`Skipping module resolution of ${required.requirePath} as it is in the tsconfig noResolvePaths.`);
|
|
60
62
|
}
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
|
-
const dependencyPath = this.resolveDependencyPath(file, required);
|
|
65
|
+
const dependencyPath = this.resolveDependencyPath(file, required.requirePath);
|
|
64
66
|
if (!dependencyPath)
|
|
65
67
|
return this.couldNotResolveImport(required, file);
|
|
66
68
|
if (this.options.tstlVerbose) {
|
|
67
|
-
console.log(`Resolved ${required} to ${(0, utils_1.normalizeSlashes)(dependencyPath)}`);
|
|
69
|
+
console.log(`Resolved ${required.requirePath} to ${(0, utils_1.normalizeSlashes)(dependencyPath)}`);
|
|
68
70
|
}
|
|
69
71
|
this.processDependency(dependencyPath);
|
|
70
72
|
// Figure out resolved require path and dependency output path
|
|
@@ -96,7 +98,7 @@ class ResolutionContext {
|
|
|
96
98
|
const fallbackRequire = fallbackResolve(required, (0, transpiler_1.getSourceDir)(this.program), path.dirname(file.fileName));
|
|
97
99
|
replaceRequireInCode(file, required, fallbackRequire);
|
|
98
100
|
replaceRequireInSourceMap(file, required, fallbackRequire);
|
|
99
|
-
this.diagnostics.push((0, diagnostics_1.couldNotResolveRequire)(required, path.relative((0, transpiler_1.getProjectRoot)(this.program), file.fileName)));
|
|
101
|
+
this.diagnostics.push((0, diagnostics_1.couldNotResolveRequire)(required.requirePath, path.relative((0, transpiler_1.getProjectRoot)(this.program), file.fileName)));
|
|
100
102
|
}
|
|
101
103
|
resolveDependencyPath(requiringFile, dependency) {
|
|
102
104
|
var _a;
|
|
@@ -261,27 +263,17 @@ function shouldIncludeDependency(resolvedDependency, program) {
|
|
|
261
263
|
function isBuildModeLibrary(program) {
|
|
262
264
|
return program.getCompilerOptions().buildMode === CompilerOptions_1.BuildMode.Library;
|
|
263
265
|
}
|
|
264
|
-
function findRequiredPaths(code) {
|
|
265
|
-
// Find all require("<path>") paths in a lua code string
|
|
266
|
-
const paths = [];
|
|
267
|
-
const pattern = /(^|\s|;|=|\()require\s*\(?(["|'])(.+?)\2\)?/g;
|
|
268
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
269
|
-
let match;
|
|
270
|
-
while ((match = pattern.exec(code))) {
|
|
271
|
-
paths.push(match[3]);
|
|
272
|
-
}
|
|
273
|
-
return paths;
|
|
274
|
-
}
|
|
275
266
|
function replaceRequireInCode(file, originalRequire, newRequire) {
|
|
276
267
|
const requirePath = (0, utils_1.formatPathToLuaPath)(newRequire.replace(".lua", ""));
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
268
|
+
file.code = file.code =
|
|
269
|
+
file.code.substring(0, originalRequire.from) +
|
|
270
|
+
`require("${requirePath}")` +
|
|
271
|
+
file.code.substring(originalRequire.to + 1);
|
|
280
272
|
}
|
|
281
273
|
function replaceRequireInSourceMap(file, originalRequire, newRequire) {
|
|
282
274
|
const requirePath = (0, utils_1.formatPathToLuaPath)(newRequire.replace(".lua", ""));
|
|
283
275
|
if (file.sourceMapNode) {
|
|
284
|
-
replaceInSourceMap(file.sourceMapNode, file.sourceMapNode, `"${originalRequire}"`, `"${requirePath}"`);
|
|
276
|
+
replaceInSourceMap(file.sourceMapNode, file.sourceMapNode, `"${originalRequire.requirePath}"`, `"${requirePath}"`);
|
|
285
277
|
}
|
|
286
278
|
}
|
|
287
279
|
function replaceInSourceMap(node, parent, require, resolvedRequire) {
|
|
@@ -316,7 +308,7 @@ function hasSourceFileInProject(filePath, program) {
|
|
|
316
308
|
// Transform an import path to a lua require that is probably not correct, but can be used as fallback when regular resolution fails
|
|
317
309
|
function fallbackResolve(required, sourceRootDir, fileDir) {
|
|
318
310
|
return (0, utils_1.formatPathToLuaPath)(path
|
|
319
|
-
.normalize(path.join(path.relative(sourceRootDir, fileDir), required))
|
|
311
|
+
.normalize(path.join(path.relative(sourceRootDir, fileDir), required.requirePath))
|
|
320
312
|
.split(path.sep)
|
|
321
313
|
.filter(s => s !== "." && s !== "..")
|
|
322
314
|
.join(path.sep));
|
|
@@ -19,6 +19,7 @@ export declare class Transpiler {
|
|
|
19
19
|
protected getEmitPlan(program: ts.Program, diagnostics: ts.Diagnostic[], files: ProcessedFile[]): {
|
|
20
20
|
emitPlan: EmitFile[];
|
|
21
21
|
};
|
|
22
|
+
private getLuaLibBundleContent;
|
|
22
23
|
}
|
|
23
24
|
export declare function getEmitPath(file: string, program: ts.Program): string;
|
|
24
25
|
export declare function getEmitPathRelativeToOutDir(fileName: string, program: ts.Program): string;
|
|
@@ -61,7 +61,6 @@ class Transpiler {
|
|
|
61
61
|
return diagnostics;
|
|
62
62
|
}
|
|
63
63
|
getEmitPlan(program, diagnostics, files) {
|
|
64
|
-
var _a;
|
|
65
64
|
performance.startSection("getEmitPlan");
|
|
66
65
|
const options = program.getCompilerOptions();
|
|
67
66
|
if (options.tstlVerbose) {
|
|
@@ -79,8 +78,8 @@ class Transpiler {
|
|
|
79
78
|
}
|
|
80
79
|
// Add lualib bundle to source dir 'virtually', will be moved to correct output dir in emitPlan
|
|
81
80
|
const fileName = (0, utils_1.normalizeSlashes)(path.resolve(getSourceDir(program), "lualib_bundle.lua"));
|
|
82
|
-
const
|
|
83
|
-
resolutionResult.resolvedFiles.unshift({ fileName, code
|
|
81
|
+
const code = this.getLuaLibBundleContent(options, resolutionResult.resolvedFiles);
|
|
82
|
+
resolutionResult.resolvedFiles.unshift({ fileName, code });
|
|
84
83
|
}
|
|
85
84
|
let emitPlan;
|
|
86
85
|
if ((0, CompilerOptions_1.isBundleEnabled)(options)) {
|
|
@@ -97,6 +96,17 @@ class Transpiler {
|
|
|
97
96
|
performance.endSection("getEmitPlan");
|
|
98
97
|
return { emitPlan };
|
|
99
98
|
}
|
|
99
|
+
getLuaLibBundleContent(options, resolvedFiles) {
|
|
100
|
+
var _a;
|
|
101
|
+
const luaTarget = (_a = options.luaTarget) !== null && _a !== void 0 ? _a : CompilerOptions_1.LuaTarget.Universal;
|
|
102
|
+
if (options.luaLibImport === CompilerOptions_1.LuaLibImportKind.RequireMinimal) {
|
|
103
|
+
const usedFeatures = (0, LuaLib_1.findUsedLualibFeatures)(luaTarget, this.emitHost, resolvedFiles.map(f => f.code));
|
|
104
|
+
return (0, LuaLib_1.buildMinimalLualibBundle)(usedFeatures, luaTarget, this.emitHost);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return (0, LuaLib_1.getLuaLibBundle)(luaTarget, this.emitHost);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
100
110
|
}
|
|
101
111
|
exports.Transpiler = Transpiler;
|
|
102
112
|
function getEmitPath(file, program) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-to-lua",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.1",
|
|
4
4
|
"description": "A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!",
|
|
5
5
|
"repository": "https://github.com/TypeScriptToLua/TypeScriptToLua",
|
|
6
6
|
"homepage": "https://typescripttolua.github.io/",
|