typescript-to-lua 1.0.1 → 1.3.0
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/CHANGELOG.md +46 -0
- package/dist/CompilerOptions.d.ts +4 -3
- package/dist/LuaAST.d.ts +1 -0
- package/dist/LuaAST.js +14 -6
- package/dist/LuaLib.d.ts +4 -3
- package/dist/LuaLib.js +6 -5
- package/dist/LuaPrinter.d.ts +15 -4
- package/dist/LuaPrinter.js +81 -29
- package/dist/cli/diagnostics.js +2 -2
- package/dist/cli/parse.d.ts +1 -1
- package/dist/cli/parse.js +14 -0
- package/dist/cli/report.js +1 -1
- package/dist/cli/tsconfig.js +4 -4
- package/dist/lualib/ArrayFlat.lua +1 -1
- package/dist/lualib/ArrayFlatMap.lua +1 -1
- package/dist/lualib/ArrayIsArray.lua +1 -1
- package/dist/lualib/ArrayReduce.lua +7 -1
- package/dist/lualib/ArrayReduceRight.lua +7 -1
- package/dist/lualib/ArraySetLength.lua +1 -1
- package/dist/lualib/ArraySplice.lua +5 -5
- package/dist/lualib/Await.lua +43 -19
- package/dist/lualib/CloneDescriptor.lua +7 -7
- package/dist/lualib/Decorate.lua +1 -1
- package/dist/lualib/DelegatedYield.lua +1 -3
- package/dist/lualib/Delete.lua +6 -6
- package/dist/lualib/Error.lua +47 -44
- package/dist/lualib/Generator.lua +1 -5
- package/dist/lualib/InstanceOf.lua +1 -1
- package/dist/lualib/InstanceOfObject.lua +1 -1
- package/dist/lualib/Map.lua +130 -134
- package/dist/lualib/Number.lua +1 -1
- package/dist/lualib/NumberIsFinite.lua +1 -1
- package/dist/lualib/NumberToString.lua +3 -5
- package/dist/lualib/ObjectDefineProperty.lua +40 -8
- package/dist/lualib/ParseFloat.lua +9 -5
- package/dist/lualib/ParseInt.lua +15 -3
- package/dist/lualib/Promise.lua +44 -26
- package/dist/lualib/Set.lua +119 -123
- package/dist/lualib/SetDescriptor.lua +7 -1
- package/dist/lualib/SourceMapTraceBack.lua +19 -9
- package/dist/lualib/SparseArrayNew.lua +5 -0
- package/dist/lualib/SparseArrayPush.lua +9 -0
- package/dist/lualib/SparseArraySpread.lua +4 -0
- package/dist/lualib/StringAccess.lua +1 -1
- package/dist/lualib/StringCharCodeAt.lua +1 -1
- package/dist/lualib/StringEndsWith.lua +2 -2
- package/dist/lualib/StringPadEnd.lua +2 -2
- package/dist/lualib/StringPadStart.lua +2 -2
- package/dist/lualib/StringReplace.lua +12 -11
- package/dist/lualib/StringReplaceAll.lua +35 -0
- package/dist/lualib/StringSlice.lua +2 -2
- package/dist/lualib/StringSplit.lua +3 -3
- package/dist/lualib/StringStartsWith.lua +1 -1
- package/dist/lualib/StringSubstr.lua +1 -1
- package/dist/lualib/StringSubstring.lua +2 -2
- package/dist/lualib/Symbol.lua +3 -5
- package/dist/lualib/WeakMap.lua +40 -42
- package/dist/lualib/WeakSet.lua +36 -38
- package/dist/lualib/lualib_bundle.lua +876 -745
- package/dist/transformation/builtins/array.js +29 -30
- package/dist/transformation/builtins/console.js +2 -2
- package/dist/transformation/builtins/function.js +14 -12
- package/dist/transformation/builtins/global.js +8 -8
- package/dist/transformation/builtins/index.d.ts +1 -1
- package/dist/transformation/builtins/index.js +69 -36
- package/dist/transformation/builtins/math.js +4 -4
- package/dist/transformation/builtins/number.js +7 -7
- package/dist/transformation/builtins/object.d.ts +2 -1
- package/dist/transformation/builtins/object.js +12 -13
- package/dist/transformation/builtins/promise.js +9 -9
- package/dist/transformation/builtins/string.js +32 -31
- package/dist/transformation/builtins/symbol.js +3 -3
- package/dist/transformation/context/context.d.ts +12 -0
- package/dist/transformation/context/context.js +105 -6
- package/dist/transformation/index.js +1 -1
- package/dist/transformation/utils/annotations.d.ts +1 -3
- package/dist/transformation/utils/annotations.js +0 -2
- package/dist/transformation/utils/assignment-validation.js +8 -7
- package/dist/transformation/utils/diagnostics.d.ts +9 -0
- package/dist/transformation/utils/diagnostics.js +8 -5
- package/dist/transformation/utils/export.d.ts +3 -2
- package/dist/transformation/utils/export.js +14 -7
- package/dist/transformation/utils/function-context.js +8 -8
- package/dist/transformation/utils/language-extensions.d.ts +2 -0
- package/dist/transformation/utils/language-extensions.js +7 -1
- package/dist/transformation/utils/lua-ast.d.ts +0 -1
- package/dist/transformation/utils/lua-ast.js +25 -35
- package/dist/transformation/utils/lualib.js +1 -1
- package/dist/transformation/utils/preceding-statements.d.ts +3 -0
- package/dist/transformation/utils/preceding-statements.js +11 -0
- package/dist/transformation/utils/safe-names.d.ts +4 -2
- package/dist/transformation/utils/safe-names.js +13 -7
- package/dist/transformation/utils/scope.d.ts +9 -1
- package/dist/transformation/utils/scope.js +78 -40
- package/dist/transformation/utils/symbols.js +6 -6
- package/dist/transformation/utils/typescript/index.d.ts +1 -0
- package/dist/transformation/utils/typescript/index.js +16 -1
- package/dist/transformation/utils/typescript/nodes.d.ts +2 -0
- package/dist/transformation/utils/typescript/nodes.js +21 -1
- package/dist/transformation/utils/typescript/types.d.ts +3 -1
- package/dist/transformation/utils/typescript/types.js +40 -13
- package/dist/transformation/visitors/access.d.ts +3 -0
- package/dist/transformation/visitors/access.js +74 -47
- package/dist/transformation/visitors/async-await.js +5 -4
- package/dist/transformation/visitors/binary-expression/assignments.d.ts +3 -2
- package/dist/transformation/visitors/binary-expression/assignments.js +86 -77
- package/dist/transformation/visitors/binary-expression/bit.js +4 -4
- package/dist/transformation/visitors/binary-expression/compound.d.ts +5 -4
- package/dist/transformation/visitors/binary-expression/compound.js +69 -71
- package/dist/transformation/visitors/binary-expression/destructuring-assignments.d.ts +2 -2
- package/dist/transformation/visitors/binary-expression/destructuring-assignments.js +65 -36
- package/dist/transformation/visitors/binary-expression/index.d.ts +3 -1
- package/dist/transformation/visitors/binary-expression/index.js +84 -42
- package/dist/transformation/visitors/block.js +6 -6
- package/dist/transformation/visitors/break-continue.js +2 -2
- package/dist/transformation/visitors/call.d.ts +3 -2
- package/dist/transformation/visitors/call.js +130 -143
- package/dist/transformation/visitors/class/decorators.js +3 -3
- package/dist/transformation/visitors/class/index.js +43 -39
- package/dist/transformation/visitors/class/members/accessors.js +6 -6
- package/dist/transformation/visitors/class/members/constructor.js +7 -7
- package/dist/transformation/visitors/class/members/fields.js +6 -6
- package/dist/transformation/visitors/class/members/method.js +6 -6
- package/dist/transformation/visitors/class/new.js +14 -16
- package/dist/transformation/visitors/class/setup.js +11 -11
- package/dist/transformation/visitors/class/utils.js +2 -2
- package/dist/transformation/visitors/conditional.js +36 -43
- package/dist/transformation/visitors/delete.js +8 -4
- package/dist/transformation/visitors/enum.js +8 -8
- package/dist/transformation/visitors/errors.js +35 -33
- package/dist/transformation/visitors/expression-list.d.ts +7 -0
- package/dist/transformation/visitors/expression-list.js +120 -0
- package/dist/transformation/visitors/expression-statement.js +10 -6
- package/dist/transformation/visitors/function.d.ts +2 -0
- package/dist/transformation/visitors/function.js +80 -33
- package/dist/transformation/visitors/identifier.js +26 -22
- package/dist/transformation/visitors/index.js +2 -2
- package/dist/transformation/visitors/language-extensions/iterable.js +7 -7
- package/dist/transformation/visitors/language-extensions/multi.d.ts +1 -1
- package/dist/transformation/visitors/language-extensions/multi.js +3 -3
- package/dist/transformation/visitors/language-extensions/operators.js +6 -6
- package/dist/transformation/visitors/language-extensions/pairsIterable.d.ts +5 -0
- package/dist/transformation/visitors/language-extensions/pairsIterable.js +53 -0
- package/dist/transformation/visitors/language-extensions/range.js +6 -6
- package/dist/transformation/visitors/language-extensions/table.js +5 -5
- package/dist/transformation/visitors/literal.d.ts +1 -2
- package/dist/transformation/visitors/literal.js +87 -57
- package/dist/transformation/visitors/loops/do-while.js +35 -9
- package/dist/transformation/visitors/loops/for-in.js +4 -4
- package/dist/transformation/visitors/loops/for-of.js +17 -13
- package/dist/transformation/visitors/loops/for.js +28 -8
- package/dist/transformation/visitors/loops/utils.d.ts +1 -0
- package/dist/transformation/visitors/loops/utils.js +26 -10
- package/dist/transformation/visitors/modules/export.js +14 -15
- package/dist/transformation/visitors/modules/import.js +10 -10
- package/dist/transformation/visitors/namespace.js +13 -13
- package/dist/transformation/visitors/optional-chaining.d.ts +16 -0
- package/dist/transformation/visitors/optional-chaining.js +172 -0
- package/dist/transformation/visitors/return.d.ts +1 -0
- package/dist/transformation/visitors/return.js +40 -26
- package/dist/transformation/visitors/sourceFile.js +12 -9
- package/dist/transformation/visitors/spread.js +23 -16
- package/dist/transformation/visitors/switch.js +63 -20
- package/dist/transformation/visitors/template.js +10 -7
- package/dist/transformation/visitors/typeof.js +4 -2
- package/dist/transformation/visitors/typescript.js +1 -1
- package/dist/transformation/visitors/unary-expression.js +9 -9
- package/dist/transformation/visitors/variable-declaration.js +55 -32
- package/dist/transformation/visitors/void.d.ts +6 -0
- package/dist/transformation/visitors/void.js +20 -0
- package/dist/transpilation/bundle.d.ts +3 -0
- package/dist/transpilation/bundle.js +52 -10
- package/dist/transpilation/diagnostics.js +3 -3
- package/dist/transpilation/index.js +2 -2
- package/dist/transpilation/output-collector.js +2 -2
- package/dist/transpilation/plugins.js +1 -1
- package/dist/transpilation/resolve.js +20 -13
- package/dist/transpilation/transformers.js +45 -25
- package/dist/transpilation/transpile.js +6 -6
- package/dist/transpilation/transpiler.js +8 -8
- package/dist/transpilation/utils.js +5 -3
- package/dist/tstl.js +8 -8
- package/dist/utils.js +2 -2
- package/language-extensions/index.d.ts +11 -1
- package/package.json +15 -12
- package/dist/lualib/OptionalChainAccess.lua +0 -6
- package/dist/lualib/OptionalFunctionCall.lua +0 -6
- package/dist/lualib/OptionalMethodCall.lua +0 -11
- package/dist/transformation/utils/transform.d.ts +0 -8
- package/dist/transformation/utils/transform.js +0 -14
- package/dist/transformation/visitors/jsx/jsx.d.ts +0 -9
- package/dist/transformation/visitors/jsx/jsx.js +0 -237
- package/dist/transformation/visitors/jsx/xhtml.d.ts +0 -3
- package/dist/transformation/visitors/jsx/xhtml.js +0 -260
|
@@ -48,7 +48,7 @@ exports.noImplicitSelfTransformer = noImplicitSelfTransformer;
|
|
|
48
48
|
const stripParenthesisExpressionsTransformer = context => sourceFile => {
|
|
49
49
|
// Remove parenthesis expressions before transforming to Lua, so transpiler is not hindered by extra ParenthesizedExpression nodes
|
|
50
50
|
function unwrapParentheses(node) {
|
|
51
|
-
while (ts.isParenthesizedExpression(node)) {
|
|
51
|
+
while (ts.isParenthesizedExpression(node) && !ts.isOptionalChain(node.expression)) {
|
|
52
52
|
node = node.expression;
|
|
53
53
|
}
|
|
54
54
|
return node;
|
|
@@ -58,6 +58,12 @@ const stripParenthesisExpressionsTransformer = context => sourceFile => {
|
|
|
58
58
|
if (ts.isCallExpression(node)) {
|
|
59
59
|
return ts.factory.updateCallExpression(node, unwrapParentheses(node.expression), node.typeArguments, node.arguments);
|
|
60
60
|
}
|
|
61
|
+
else if (ts.isVoidExpression(node)) {
|
|
62
|
+
return ts.factory.updateVoidExpression(node, unwrapParentheses(node.expression));
|
|
63
|
+
}
|
|
64
|
+
else if (ts.isDeleteExpression(node)) {
|
|
65
|
+
return ts.factory.updateDeleteExpression(node, unwrapParentheses(node.expression));
|
|
66
|
+
}
|
|
61
67
|
return ts.visitEachChild(node, visit, context);
|
|
62
68
|
}
|
|
63
69
|
return ts.visitNode(sourceFile, visit);
|
|
@@ -70,32 +76,46 @@ function loadTransformersFromOptions(program, diagnostics) {
|
|
|
70
76
|
afterDeclarations: [],
|
|
71
77
|
};
|
|
72
78
|
const options = program.getCompilerOptions();
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
79
|
+
if (options.plugins) {
|
|
80
|
+
for (const [index, transformerImport] of options.plugins.entries()) {
|
|
81
|
+
if (!("transform" in transformerImport))
|
|
82
|
+
continue;
|
|
83
|
+
const optionName = `compilerOptions.plugins[${index}]`;
|
|
84
|
+
const { error: resolveError, result: factory } = (0, utils_1.resolvePlugin)("transformer", `${optionName}.transform`, (0, utils_1.getConfigDirectory)(options), transformerImport.transform, transformerImport.import);
|
|
85
|
+
if (resolveError)
|
|
86
|
+
diagnostics.push(resolveError);
|
|
87
|
+
if (factory === undefined)
|
|
88
|
+
continue;
|
|
89
|
+
const { error: loadError, transformer } = loadTransformer(optionName, program, factory, transformerImport);
|
|
90
|
+
if (loadError)
|
|
91
|
+
diagnostics.push(loadError);
|
|
92
|
+
if (transformer === undefined)
|
|
93
|
+
continue;
|
|
94
|
+
if (transformer.before) {
|
|
95
|
+
customTransformers.before.push(transformer.before);
|
|
96
|
+
}
|
|
97
|
+
if (transformer.after) {
|
|
98
|
+
customTransformers.after.push(transformer.after);
|
|
99
|
+
}
|
|
100
|
+
if (transformer.afterDeclarations) {
|
|
101
|
+
customTransformers.afterDeclarations.push(transformer.afterDeclarations);
|
|
102
|
+
}
|
|
97
103
|
}
|
|
98
104
|
}
|
|
105
|
+
if (options.jsx === ts.JsxEmit.React) {
|
|
106
|
+
customTransformers.before.push(context => {
|
|
107
|
+
// if target < ES2017, typescript generates some unnecessary additional transformations in transformJSX.
|
|
108
|
+
// We can't control the target compiler option, so we override here.
|
|
109
|
+
const patchedContext = {
|
|
110
|
+
...context,
|
|
111
|
+
getCompilerOptions: () => ({
|
|
112
|
+
...context.getCompilerOptions(),
|
|
113
|
+
target: ts.ScriptTarget.ESNext,
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
return ts.transformJsx(patchedContext);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
99
119
|
return customTransformers;
|
|
100
120
|
}
|
|
101
121
|
function loadTransformer(optionPath, program, factory, { transform, after = false, afterDeclarations = false, type = "program", ...extraOptions }) {
|
|
@@ -14,7 +14,7 @@ function getProgramTranspileResult(emitHost, writeFileResult, { program, sourceF
|
|
|
14
14
|
if (options.tstlVerbose) {
|
|
15
15
|
console.log("Parsing project settings");
|
|
16
16
|
}
|
|
17
|
-
const diagnostics = CompilerOptions_1.validateOptions(options);
|
|
17
|
+
const diagnostics = (0, CompilerOptions_1.validateOptions)(options);
|
|
18
18
|
let transpiledFiles = [];
|
|
19
19
|
if (options.noEmitOnError) {
|
|
20
20
|
const preEmitDiagnostics = [
|
|
@@ -39,17 +39,17 @@ function getProgramTranspileResult(emitHost, writeFileResult, { program, sourceF
|
|
|
39
39
|
return { diagnostics: preEmitDiagnostics, transpiledFiles };
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
const plugins = plugins_1.getPlugins(program, diagnostics, customPlugins);
|
|
42
|
+
const plugins = (0, plugins_1.getPlugins)(program, diagnostics, customPlugins);
|
|
43
43
|
if (options.tstlVerbose) {
|
|
44
44
|
console.log(`Successfully loaded ${plugins.length} plugins`);
|
|
45
45
|
}
|
|
46
|
-
const visitorMap = transformation_1.createVisitorMap(plugins.map(p => p.visitors).filter(utils_1.isNonNull));
|
|
47
|
-
const printer = LuaPrinter_1.createPrinter(plugins.map(p => p.printer).filter(utils_1.isNonNull));
|
|
46
|
+
const visitorMap = (0, transformation_1.createVisitorMap)(plugins.map(p => p.visitors).filter(utils_1.isNonNull));
|
|
47
|
+
const printer = (0, LuaPrinter_1.createPrinter)(plugins.map(p => p.printer).filter(utils_1.isNonNull));
|
|
48
48
|
const processSourceFile = (sourceFile) => {
|
|
49
49
|
if (options.tstlVerbose) {
|
|
50
50
|
console.log(`Transforming ${sourceFile.fileName}`);
|
|
51
51
|
}
|
|
52
|
-
const { file, diagnostics: transformDiagnostics } = transformation_1.transformSourceFile(program, sourceFile, visitorMap);
|
|
52
|
+
const { file, diagnostics: transformDiagnostics } = (0, transformation_1.transformSourceFile)(program, sourceFile, visitorMap);
|
|
53
53
|
diagnostics.push(...transformDiagnostics);
|
|
54
54
|
if (!options.noEmit && !options.emitDeclarationOnly) {
|
|
55
55
|
if (options.tstlVerbose) {
|
|
@@ -64,7 +64,7 @@ function getProgramTranspileResult(emitHost, writeFileResult, { program, sourceF
|
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
|
-
const transformers = transformers_1.getTransformers(program, diagnostics, customTransformers, processSourceFile);
|
|
67
|
+
const transformers = (0, transformers_1.getTransformers)(program, diagnostics, customTransformers, processSourceFile);
|
|
68
68
|
const isEmittableJsonFile = (sourceFile) => sourceFile.flags & ts.NodeFlags.JsonFile &&
|
|
69
69
|
!options.emitDeclarationOnly &&
|
|
70
70
|
!program.isSourceFileFromExternalLibrary(sourceFile);
|
|
@@ -17,7 +17,7 @@ class Transpiler {
|
|
|
17
17
|
var _a;
|
|
18
18
|
const { program, writeFile = this.emitHost.writeFile } = emitOptions;
|
|
19
19
|
const verbose = program.getCompilerOptions().tstlVerbose;
|
|
20
|
-
const { diagnostics, transpiledFiles: freshFiles } = transpile_1.getProgramTranspileResult(this.emitHost, writeFile, emitOptions);
|
|
20
|
+
const { diagnostics, transpiledFiles: freshFiles } = (0, transpile_1.getProgramTranspileResult)(this.emitHost, writeFile, emitOptions);
|
|
21
21
|
const { emitPlan } = this.getEmitPlan(program, diagnostics, freshFiles);
|
|
22
22
|
if (verbose) {
|
|
23
23
|
console.log("Emitting output");
|
|
@@ -26,7 +26,7 @@ class Transpiler {
|
|
|
26
26
|
const emitBOM = (_a = options.emitBOM) !== null && _a !== void 0 ? _a : false;
|
|
27
27
|
for (const { outputPath, code, sourceMap, sourceFiles } of emitPlan) {
|
|
28
28
|
if (verbose) {
|
|
29
|
-
console.log(`Emitting ${utils_1.normalizeSlashes(outputPath)}`);
|
|
29
|
+
console.log(`Emitting ${(0, utils_1.normalizeSlashes)(outputPath)}`);
|
|
30
30
|
}
|
|
31
31
|
writeFile(outputPath, code, emitBOM, undefined, sourceFiles);
|
|
32
32
|
if (options.sourceMap && sourceMap !== undefined) {
|
|
@@ -44,7 +44,7 @@ class Transpiler {
|
|
|
44
44
|
console.log("Constructing emit plan");
|
|
45
45
|
}
|
|
46
46
|
// Resolve imported modules and modify output Lua requires
|
|
47
|
-
const resolutionResult = resolve_1.resolveDependencies(program, files, this.emitHost);
|
|
47
|
+
const resolutionResult = (0, resolve_1.resolveDependencies)(program, files, this.emitHost);
|
|
48
48
|
diagnostics.push(...resolutionResult.diagnostics);
|
|
49
49
|
const lualibRequired = resolutionResult.resolvedFiles.some(f => f.fileName === "lualib_bundle");
|
|
50
50
|
if (lualibRequired) {
|
|
@@ -54,12 +54,12 @@ class Transpiler {
|
|
|
54
54
|
console.log("Including lualib bundle");
|
|
55
55
|
}
|
|
56
56
|
// Add lualib bundle to source dir 'virtually', will be moved to correct output dir in emitPlan
|
|
57
|
-
const fileName = utils_1.normalizeSlashes(path.resolve(getSourceDir(program), "lualib_bundle.lua"));
|
|
58
|
-
resolutionResult.resolvedFiles.unshift({ fileName, code: LuaLib_1.getLuaLibBundle(this.emitHost) });
|
|
57
|
+
const fileName = (0, utils_1.normalizeSlashes)(path.resolve(getSourceDir(program), "lualib_bundle.lua"));
|
|
58
|
+
resolutionResult.resolvedFiles.unshift({ fileName, code: (0, LuaLib_1.getLuaLibBundle)(this.emitHost) });
|
|
59
59
|
}
|
|
60
60
|
let emitPlan;
|
|
61
|
-
if (CompilerOptions_1.isBundleEnabled(options)) {
|
|
62
|
-
const [bundleDiagnostics, bundleFile] = bundle_1.getBundleResult(program, resolutionResult.resolvedFiles);
|
|
61
|
+
if ((0, CompilerOptions_1.isBundleEnabled)(options)) {
|
|
62
|
+
const [bundleDiagnostics, bundleFile] = (0, bundle_1.getBundleResult)(program, resolutionResult.resolvedFiles);
|
|
63
63
|
diagnostics.push(...bundleDiagnostics);
|
|
64
64
|
emitPlan = [bundleFile];
|
|
65
65
|
}
|
|
@@ -90,7 +90,7 @@ function getEmitPathRelativeToOutDir(fileName, program) {
|
|
|
90
90
|
emitPathSplits[0] = "lua_modules";
|
|
91
91
|
}
|
|
92
92
|
// Make extension lua
|
|
93
|
-
emitPathSplits[emitPathSplits.length - 1] = utils_1.trimExtension(emitPathSplits[emitPathSplits.length - 1]) + ".lua";
|
|
93
|
+
emitPathSplits[emitPathSplits.length - 1] = (0, utils_1.trimExtension)(emitPathSplits[emitPathSplits.length - 1]) + ".lua";
|
|
94
94
|
return path.join(...emitPathSplits);
|
|
95
95
|
}
|
|
96
96
|
exports.getEmitPathRelativeToOutDir = getEmitPathRelativeToOutDir;
|
|
@@ -8,28 +8,30 @@ const cliDiagnostics = require("../cli/diagnostics");
|
|
|
8
8
|
const diagnosticFactories = require("./diagnostics");
|
|
9
9
|
const getConfigDirectory = (options) => options.configFilePath ? path.dirname(options.configFilePath) : process.cwd();
|
|
10
10
|
exports.getConfigDirectory = getConfigDirectory;
|
|
11
|
+
const getTstlDirectory = () => path.dirname(__dirname);
|
|
11
12
|
function resolvePlugin(kind, optionName, basedir, query, importName = "default") {
|
|
12
13
|
if (typeof query !== "string") {
|
|
13
14
|
return { error: cliDiagnostics.compilerOptionRequiresAValueOfType(optionName, "string") };
|
|
14
15
|
}
|
|
16
|
+
const isModuleNotFoundError = (error) => error.code === "MODULE_NOT_FOUND";
|
|
15
17
|
let resolved;
|
|
16
18
|
try {
|
|
17
19
|
resolved = resolve.sync(query, { basedir, extensions: [".js", ".ts", ".tsx"] });
|
|
18
20
|
}
|
|
19
21
|
catch (err) {
|
|
20
|
-
if (err
|
|
22
|
+
if (!isModuleNotFoundError(err))
|
|
21
23
|
throw err;
|
|
22
24
|
return { error: diagnosticFactories.couldNotResolveFrom(kind, query, basedir) };
|
|
23
25
|
}
|
|
24
26
|
const hasNoRequireHook = require.extensions[".ts"] === undefined;
|
|
25
27
|
if (hasNoRequireHook && (resolved.endsWith(".ts") || resolved.endsWith(".tsx"))) {
|
|
26
28
|
try {
|
|
27
|
-
const tsNodePath = resolve.sync("ts-node", { basedir });
|
|
29
|
+
const tsNodePath = resolve.sync("ts-node", { basedir: getTstlDirectory() });
|
|
28
30
|
const tsNode = require(tsNodePath);
|
|
29
31
|
tsNode.register({ transpileOnly: true });
|
|
30
32
|
}
|
|
31
33
|
catch (err) {
|
|
32
|
-
if (err
|
|
34
|
+
if (!isModuleNotFoundError(err))
|
|
33
35
|
throw err;
|
|
34
36
|
return { error: diagnosticFactories.toLoadItShouldBeTranspiled(kind, query) };
|
|
35
37
|
}
|
package/dist/tstl.js
CHANGED
|
@@ -10,9 +10,9 @@ const report_1 = require("./cli/report");
|
|
|
10
10
|
const tsconfig_1 = require("./cli/tsconfig");
|
|
11
11
|
const CompilerOptions_1 = require("./CompilerOptions");
|
|
12
12
|
const shouldBePretty = ({ pretty } = {}) => { var _a, _b, _c; return pretty !== undefined ? pretty : (_c = (_b = (_a = ts.sys).writeOutputIsTTY) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false; };
|
|
13
|
-
let reportDiagnostic = report_1.createDiagnosticReporter(false);
|
|
13
|
+
let reportDiagnostic = (0, report_1.createDiagnosticReporter)(false);
|
|
14
14
|
function updateReportDiagnostic(options) {
|
|
15
|
-
reportDiagnostic = report_1.createDiagnosticReporter(shouldBePretty(options));
|
|
15
|
+
reportDiagnostic = (0, report_1.createDiagnosticReporter)(shouldBePretty(options));
|
|
16
16
|
}
|
|
17
17
|
function createWatchStatusReporter(options) {
|
|
18
18
|
return ts.createWatchStatusReporter(ts.sys, shouldBePretty(options));
|
|
@@ -24,7 +24,7 @@ function executeCommandLine(args) {
|
|
|
24
24
|
return performBuild(args.slice(1));
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
const commandLine = parse_1.parseCommandLine(args);
|
|
27
|
+
const commandLine = (0, parse_1.parseCommandLine)(args);
|
|
28
28
|
if (commandLine.options.build) {
|
|
29
29
|
reportDiagnostic(cliDiagnostics.optionBuildMustBeFirstCommandLineArgument());
|
|
30
30
|
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
@@ -41,17 +41,17 @@ function executeCommandLine(args) {
|
|
|
41
41
|
}
|
|
42
42
|
if (commandLine.options.help) {
|
|
43
43
|
console.log(information_1.versionString);
|
|
44
|
-
console.log(information_1.getHelpString());
|
|
44
|
+
console.log((0, information_1.getHelpString)());
|
|
45
45
|
return ts.sys.exit(ts.ExitStatus.Success);
|
|
46
46
|
}
|
|
47
|
-
const configFileName = tsconfig_1.locateConfigFile(commandLine);
|
|
47
|
+
const configFileName = (0, tsconfig_1.locateConfigFile)(commandLine);
|
|
48
48
|
if (typeof configFileName === "object") {
|
|
49
49
|
reportDiagnostic(configFileName);
|
|
50
50
|
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
51
51
|
}
|
|
52
52
|
const commandLineOptions = commandLine.options;
|
|
53
53
|
if (configFileName) {
|
|
54
|
-
const configParseResult = tsconfig_1.parseConfigFileWithSystem(configFileName, commandLineOptions);
|
|
54
|
+
const configParseResult = (0, tsconfig_1.parseConfigFileWithSystem)(configFileName, commandLineOptions);
|
|
55
55
|
updateReportDiagnostic(configParseResult.options);
|
|
56
56
|
if (configParseResult.options.watch) {
|
|
57
57
|
createWatchOfConfigFile(configFileName, commandLineOptions);
|
|
@@ -106,14 +106,14 @@ function createWatchOfFilesAndCompilerOptions(rootFiles, options) {
|
|
|
106
106
|
}
|
|
107
107
|
function updateWatchCompilationHost(host, optionsToExtend) {
|
|
108
108
|
let hadErrorLastTime = true;
|
|
109
|
-
const updateConfigFile = tsconfig_1.createConfigFileUpdater(optionsToExtend);
|
|
109
|
+
const updateConfigFile = (0, tsconfig_1.createConfigFileUpdater)(optionsToExtend);
|
|
110
110
|
const transpiler = new tstl.Transpiler();
|
|
111
111
|
host.afterProgramCreate = builderProgram => {
|
|
112
112
|
const program = builderProgram.getProgram();
|
|
113
113
|
const options = builderProgram.getCompilerOptions();
|
|
114
114
|
const configFileParsingDiagnostics = updateConfigFile(options);
|
|
115
115
|
let sourceFiles;
|
|
116
|
-
if (!CompilerOptions_1.isBundleEnabled(options) && !hadErrorLastTime) {
|
|
116
|
+
if (!(0, CompilerOptions_1.isBundleEnabled)(options) && !hadErrorLastTime) {
|
|
117
117
|
sourceFiles = [];
|
|
118
118
|
while (true) {
|
|
119
119
|
const currentFile = builderProgram.getSemanticDiagnosticsOfNextAffectedFile();
|
package/dist/utils.js
CHANGED
|
@@ -12,7 +12,7 @@ const intersperse = (values, separator) => values.flatMap((value, index) => (ind
|
|
|
12
12
|
exports.intersperse = intersperse;
|
|
13
13
|
const union = (...values) => [...new Set(...values)];
|
|
14
14
|
exports.union = union;
|
|
15
|
-
const intersection = (first, ...rest) => exports.union(first).filter(x => rest.every(r => r.includes(x)));
|
|
15
|
+
const intersection = (first, ...rest) => (0, exports.union)(first).filter(x => rest.every(r => r.includes(x)));
|
|
16
16
|
exports.intersection = intersection;
|
|
17
17
|
const createDiagnosticFactoryWithCode = (code, create) => Object.assign((...args) => ({
|
|
18
18
|
file: undefined,
|
|
@@ -25,7 +25,7 @@ const createDiagnosticFactoryWithCode = (code, create) => Object.assign((...args
|
|
|
25
25
|
}), { code });
|
|
26
26
|
exports.createDiagnosticFactoryWithCode = createDiagnosticFactoryWithCode;
|
|
27
27
|
let serialDiagnosticCodeCounter = 100000;
|
|
28
|
-
const createSerialDiagnosticFactory = (create) => exports.createDiagnosticFactoryWithCode(serialDiagnosticCodeCounter++, create);
|
|
28
|
+
const createSerialDiagnosticFactory = (create) => (0, exports.createDiagnosticFactoryWithCode)(serialDiagnosticCodeCounter++, create);
|
|
29
29
|
exports.createSerialDiagnosticFactory = createSerialDiagnosticFactory;
|
|
30
30
|
const normalizeSlashes = (filePath) => filePath.replace(/\\/g, "/");
|
|
31
31
|
exports.normalizeSlashes = normalizeSlashes;
|
|
@@ -78,6 +78,16 @@ declare type LuaIterable<TValue, TState = undefined> = Iterable<TValue> &
|
|
|
78
78
|
LuaIterator<TValue, TState> &
|
|
79
79
|
LuaExtension<"__luaIterableBrand">;
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Represents an object that can be iterated with pairs()
|
|
83
|
+
* For more information see: https://typescripttolua.github.io/docs/advanced/language-extensions
|
|
84
|
+
*
|
|
85
|
+
* @param TKey The type of the key returned each iteration.
|
|
86
|
+
* @param TValue The type of the value returned each iteration.
|
|
87
|
+
*/
|
|
88
|
+
declare type LuaPairsIterable<TKey extends AnyNotNil, TValue> = Iterable<[TKey, TValue]> &
|
|
89
|
+
LuaExtension<"__luaPairsIterableBrand">;
|
|
90
|
+
|
|
81
91
|
/**
|
|
82
92
|
* Calls to functions with this type are translated to `left + right`.
|
|
83
93
|
* For more information see: https://typescripttolua.github.io/docs/advanced/language-extensions
|
|
@@ -535,7 +545,7 @@ declare type LuaTableDeleteMethod<TKey extends AnyNotNil> = ((key: TKey) => bool
|
|
|
535
545
|
* @param TKey The type of the keys used to access the table.
|
|
536
546
|
* @param TValue The type of the values stored in the table.
|
|
537
547
|
*/
|
|
538
|
-
declare interface LuaTable<TKey extends AnyNotNil = AnyNotNil, TValue = any> {
|
|
548
|
+
declare interface LuaTable<TKey extends AnyNotNil = AnyNotNil, TValue = any> extends LuaPairsIterable<TKey, TValue> {
|
|
539
549
|
length: LuaLengthMethod<number>;
|
|
540
550
|
get: LuaTableGetMethod<TKey, TValue>;
|
|
541
551
|
set: LuaTableSetMethod<TKey, TValue>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-to-lua",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.3.0",
|
|
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/",
|
|
@@ -41,11 +41,13 @@
|
|
|
41
41
|
"engines": {
|
|
42
42
|
"node": ">=12.13.0"
|
|
43
43
|
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"typescript": "~4.5.2"
|
|
46
|
+
},
|
|
44
47
|
"dependencies": {
|
|
45
48
|
"enhanced-resolve": "^5.8.2",
|
|
46
49
|
"resolve": "^1.15.1",
|
|
47
|
-
"source-map": "^0.7.3"
|
|
48
|
-
"typescript": "~4.3.5"
|
|
50
|
+
"source-map": "^0.7.3"
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"@types/fs-extra": "^8.1.0",
|
|
@@ -53,19 +55,20 @@
|
|
|
53
55
|
"@types/jest": "^25.1.3",
|
|
54
56
|
"@types/node": "^13.7.7",
|
|
55
57
|
"@types/resolve": "1.14.0",
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "^4.
|
|
57
|
-
"@typescript-eslint/parser": "^4.
|
|
58
|
-
"eslint": "^7.
|
|
59
|
-
"eslint-plugin-import": "^2.
|
|
60
|
-
"eslint-plugin-jest": "^
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^5.4.0",
|
|
59
|
+
"@typescript-eslint/parser": "^5.4.0",
|
|
60
|
+
"eslint": "^7.32.0",
|
|
61
|
+
"eslint-plugin-import": "^2.24.2",
|
|
62
|
+
"eslint-plugin-jest": "^24.4.0",
|
|
61
63
|
"fs-extra": "^8.1.0",
|
|
62
64
|
"javascript-stringify": "^2.0.1",
|
|
63
|
-
"jest": "^
|
|
64
|
-
"jest-circus": "^
|
|
65
|
+
"jest": "^27.3.0",
|
|
66
|
+
"jest-circus": "^27.3.0",
|
|
65
67
|
"lua-types": "2.10.1",
|
|
66
68
|
"lua-wasm-bindings": "^0.2.2",
|
|
67
69
|
"prettier": "^2.3.2",
|
|
68
|
-
"ts-jest": "^
|
|
69
|
-
"ts-node": "^
|
|
70
|
+
"ts-jest": "^27.0.7",
|
|
71
|
+
"ts-node": "^10.3.0",
|
|
72
|
+
"typescript": "~4.5.2"
|
|
70
73
|
}
|
|
71
74
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
function __TS__OptionalMethodCall(____table, methodName, isMethodOptional, ...)
|
|
2
|
-
if ____table then
|
|
3
|
-
local method = ____table[methodName]
|
|
4
|
-
if method then
|
|
5
|
-
return method(____table, ...)
|
|
6
|
-
elseif not isMethodOptional then
|
|
7
|
-
error(methodName .. " is not a function", 0)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
return nil
|
|
11
|
-
end
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
import * as lua from "../../LuaAST";
|
|
3
|
-
import { TransformationContext } from "../context";
|
|
4
|
-
export interface ImmediatelyInvokedFunctionParameters {
|
|
5
|
-
statements: lua.Statement | lua.Statement[];
|
|
6
|
-
result: lua.Expression | lua.Expression[];
|
|
7
|
-
}
|
|
8
|
-
export declare function transformToImmediatelyInvokedFunctionExpression(context: TransformationContext, transformFunction: () => ImmediatelyInvokedFunctionParameters, tsOriginal?: ts.Node): lua.CallExpression;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transformToImmediatelyInvokedFunctionExpression = void 0;
|
|
4
|
-
const utils_1 = require("../../utils");
|
|
5
|
-
const lua_ast_1 = require("./lua-ast");
|
|
6
|
-
const scope_1 = require("./scope");
|
|
7
|
-
function transformToImmediatelyInvokedFunctionExpression(context, transformFunction, tsOriginal) {
|
|
8
|
-
scope_1.pushScope(context, scope_1.ScopeType.Function);
|
|
9
|
-
const { statements, result } = transformFunction();
|
|
10
|
-
scope_1.popScope(context);
|
|
11
|
-
return lua_ast_1.createImmediatelyInvokedFunctionExpression(utils_1.castArray(statements), result, tsOriginal);
|
|
12
|
-
}
|
|
13
|
-
exports.transformToImmediatelyInvokedFunctionExpression = transformToImmediatelyInvokedFunctionExpression;
|
|
14
|
-
//# sourceMappingURL=transform.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Visitors } from "../../context";
|
|
2
|
-
/**
|
|
3
|
-
* Format a string in the value position of a JSX prop.
|
|
4
|
-
*
|
|
5
|
-
* Use the same implementation as convertAttribute from
|
|
6
|
-
* babel-helper-builder-react-jsx.
|
|
7
|
-
*/
|
|
8
|
-
export declare function formatJSXStringValueLiteral(text: string): string;
|
|
9
|
-
export declare const jsxVisitors: Visitors;
|