typescript-to-lua 1.4.2 → 1.5.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/dist/CompilerOptions.d.ts +5 -1
- package/dist/LuaAST.d.ts +9 -7
- package/dist/LuaAST.js +19 -13
- package/dist/LuaLib.d.ts +1 -2
- package/dist/LuaLib.js +1 -2
- package/dist/LuaPrinter.js +1 -2
- package/dist/cli/parse.js +10 -0
- package/dist/lualib/ArrayConcat.lua +16 -12
- package/dist/lualib/ArrayEvery.lua +4 -8
- package/dist/lualib/ArrayFilter.lua +6 -8
- package/dist/lualib/ArrayFind.lua +4 -7
- package/dist/lualib/ArrayFindIndex.lua +4 -9
- package/dist/lualib/ArrayFlat.lua +17 -7
- package/dist/lualib/ArrayFlatMap.lua +11 -10
- package/dist/lualib/ArrayForEach.lua +3 -7
- package/dist/lualib/ArrayFrom.lua +2 -5
- package/dist/lualib/ArrayIncludes.lua +2 -2
- package/dist/lualib/ArrayIndexOf.lua +13 -21
- package/dist/lualib/ArrayIsArray.lua +1 -1
- package/dist/lualib/ArrayJoin.lua +4 -7
- package/dist/lualib/ArrayMap.lua +5 -9
- package/dist/lualib/ArrayPush.lua +6 -4
- package/dist/lualib/ArrayPushArray.lua +8 -0
- package/dist/lualib/ArrayReduce.lua +8 -8
- package/dist/lualib/ArrayReduceRight.lua +8 -8
- package/dist/lualib/ArrayReverse.lua +7 -7
- package/dist/lualib/ArraySetLength.lua +3 -7
- package/dist/lualib/ArraySlice.lua +26 -19
- package/dist/lualib/ArraySome.lua +4 -8
- package/dist/lualib/ArraySort.lua +4 -4
- package/dist/lualib/ArraySplice.lua +47 -58
- package/dist/lualib/ArrayToObject.lua +3 -7
- package/dist/lualib/ArrayUnshift.lua +11 -8
- package/dist/lualib/Await.lua +21 -34
- package/dist/lualib/FunctionBind.lua +5 -11
- package/dist/lualib/ObjectAssign.lua +5 -7
- package/dist/lualib/ObjectEntries.lua +3 -1
- package/dist/lualib/ObjectKeys.lua +3 -1
- package/dist/lualib/ObjectValues.lua +3 -1
- package/dist/lualib/Promise.lua +8 -7
- package/dist/lualib/PromiseAny.lua +3 -3
- package/dist/lualib/PromiseRace.lua +1 -1
- package/dist/lualib/SourceMapTraceBack.lua +14 -1
- package/dist/lualib/Spread.lua +5 -7
- package/dist/lualib/StringReplace.lua +17 -14
- package/dist/lualib/StringReplaceAll.lua +36 -29
- package/dist/lualib/StringSplit.lua +32 -32
- package/dist/lualib/lualib_bundle.lua +393 -423
- package/dist/lualib/lualib_module_info.json +13 -23
- package/dist/transformation/builtins/array.d.ts +2 -3
- package/dist/transformation/builtins/array.js +43 -12
- package/dist/transformation/builtins/console.d.ts +2 -2
- package/dist/transformation/builtins/console.js +8 -9
- package/dist/transformation/builtins/function.d.ts +1 -2
- package/dist/transformation/builtins/function.js +5 -6
- package/dist/transformation/builtins/index.js +22 -23
- package/dist/transformation/builtins/math.d.ts +1 -2
- package/dist/transformation/builtins/math.js +3 -4
- package/dist/transformation/builtins/number.d.ts +3 -3
- package/dist/transformation/builtins/number.js +10 -12
- package/dist/transformation/builtins/object.d.ts +2 -3
- package/dist/transformation/builtins/object.js +16 -17
- package/dist/transformation/builtins/promise.d.ts +2 -2
- package/dist/transformation/builtins/promise.js +7 -7
- package/dist/transformation/builtins/string.d.ts +2 -3
- package/dist/transformation/builtins/string.js +8 -10
- package/dist/transformation/builtins/symbol.d.ts +2 -2
- package/dist/transformation/builtins/symbol.js +6 -7
- package/dist/transformation/utils/diagnostics.d.ts +7 -2
- package/dist/transformation/utils/diagnostics.js +4 -1
- package/dist/transformation/utils/lua-ast.d.ts +1 -0
- package/dist/transformation/utils/lua-ast.js +89 -3
- package/dist/transformation/utils/typescript/index.d.ts +1 -0
- package/dist/transformation/utils/typescript/index.js +9 -1
- package/dist/transformation/visitors/async-await.d.ts +1 -1
- package/dist/transformation/visitors/async-await.js +7 -14
- package/dist/transformation/visitors/call.d.ts +1 -3
- package/dist/transformation/visitors/call.js +26 -13
- package/dist/transformation/visitors/class/index.js +1 -1
- package/dist/transformation/visitors/class/members/accessors.js +1 -1
- package/dist/transformation/visitors/class/members/constructor.js +1 -1
- package/dist/transformation/visitors/errors.js +52 -9
- package/dist/transformation/visitors/function.js +5 -5
- package/dist/transformation/visitors/modules/import.d.ts +1 -0
- package/dist/transformation/visitors/modules/import.js +9 -1
- package/dist/transformation/visitors/return.js +5 -4
- package/dist/transformation/visitors/spread.js +1 -7
- package/package.json +1 -1
- package/dist/lualib/ArrayShift.lua +0 -3
- package/dist/lualib/StringConcat.lua +0 -8
|
@@ -5,19 +5,58 @@ const __1 = require("../..");
|
|
|
5
5
|
const lua = require("../../LuaAST");
|
|
6
6
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
7
7
|
const lua_ast_1 = require("../utils/lua-ast");
|
|
8
|
+
const lualib_1 = require("../utils/lualib");
|
|
8
9
|
const scope_1 = require("../utils/scope");
|
|
9
10
|
const typescript_1 = require("../utils/typescript");
|
|
11
|
+
const async_await_1 = require("./async-await");
|
|
10
12
|
const block_1 = require("./block");
|
|
11
13
|
const identifier_1 = require("./identifier");
|
|
12
14
|
const multi_1 = require("./language-extensions/multi");
|
|
13
15
|
const return_1 = require("./return");
|
|
16
|
+
const transformAsyncTry = (statement, context) => {
|
|
17
|
+
const [tryBlock] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
|
|
18
|
+
if (context.options.luaTarget === __1.LuaTarget.Lua51 && !context.options.lua51AllowTryCatchInAsyncAwait) {
|
|
19
|
+
context.diagnostics.push((0, diagnostics_1.unsupportedForTargetButOverrideAvailable)(statement, "try/catch inside async functions", __1.LuaTarget.Lua51, "lua51AllowTryCatchInAsyncAwait"));
|
|
20
|
+
return tryBlock.statements;
|
|
21
|
+
}
|
|
22
|
+
// __TS__AsyncAwaiter(<catch block>)
|
|
23
|
+
const awaiter = (0, async_await_1.wrapInAsyncAwaiter)(context, tryBlock.statements, false);
|
|
24
|
+
const awaiterIdentifier = lua.createIdentifier("____try");
|
|
25
|
+
const awaiterDefinition = lua.createVariableDeclarationStatement(awaiterIdentifier, awaiter);
|
|
26
|
+
// local ____try = __TS__AsyncAwaiter(<catch block>)
|
|
27
|
+
const result = [awaiterDefinition];
|
|
28
|
+
if (statement.finallyBlock) {
|
|
29
|
+
const awaiterFinally = lua.createTableIndexExpression(awaiterIdentifier, lua.createStringLiteral("finally"));
|
|
30
|
+
const finallyFunction = lua.createFunctionExpression(lua.createBlock(context.transformStatements(statement.finallyBlock.statements)));
|
|
31
|
+
const finallyCall = lua.createCallExpression(awaiterFinally, [awaiterIdentifier, finallyFunction], statement.finallyBlock);
|
|
32
|
+
// ____try.finally(<finally function>)
|
|
33
|
+
result.push(lua.createExpressionStatement(finallyCall));
|
|
34
|
+
}
|
|
35
|
+
if (statement.catchClause) {
|
|
36
|
+
// ____try.catch(<catch function>)
|
|
37
|
+
const [catchFunction] = transformCatchClause(context, statement.catchClause);
|
|
38
|
+
if (catchFunction.params) {
|
|
39
|
+
catchFunction.params.unshift(lua.createAnonymousIdentifier());
|
|
40
|
+
}
|
|
41
|
+
const awaiterCatch = lua.createTableIndexExpression(awaiterIdentifier, lua.createStringLiteral("catch"));
|
|
42
|
+
const catchCall = lua.createCallExpression(awaiterCatch, [awaiterIdentifier, catchFunction]);
|
|
43
|
+
// await ____try.catch(<catch function>)
|
|
44
|
+
const promiseAwait = (0, lualib_1.transformLuaLibFunction)(context, __1.LuaLibFeature.Await, statement, catchCall);
|
|
45
|
+
result.push(lua.createExpressionStatement(promiseAwait, statement));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// await ____try
|
|
49
|
+
const promiseAwait = (0, lualib_1.transformLuaLibFunction)(context, __1.LuaLibFeature.Await, statement, awaiterIdentifier);
|
|
50
|
+
result.push(lua.createExpressionStatement(promiseAwait, statement));
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
14
54
|
const transformTryStatement = (statement, context) => {
|
|
15
55
|
var _a;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "try/catch inside async functions", __1.LuaTarget.Lua51));
|
|
19
|
-
return tryBlock.statements;
|
|
56
|
+
if ((0, typescript_1.isInAsyncFunction)(statement)) {
|
|
57
|
+
return transformAsyncTry(statement, context);
|
|
20
58
|
}
|
|
59
|
+
const [tryBlock, tryScope] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
|
|
21
60
|
if (context.options.luaTarget === __1.LuaTarget.Lua51 && (0, typescript_1.isInGeneratorFunction)(statement)) {
|
|
22
61
|
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "try/catch inside generator functions", __1.LuaTarget.Lua51));
|
|
23
62
|
return tryBlock.statements;
|
|
@@ -31,11 +70,7 @@ const transformTryStatement = (statement, context) => {
|
|
|
31
70
|
const tryCall = lua.createCallExpression(pCall, [lua.createFunctionExpression(tryBlock)]);
|
|
32
71
|
if (statement.catchClause && statement.catchClause.block.statements.length > 0) {
|
|
33
72
|
// try with catch
|
|
34
|
-
const [
|
|
35
|
-
const catchParameter = statement.catchClause.variableDeclaration
|
|
36
|
-
? (0, identifier_1.transformIdentifier)(context, statement.catchClause.variableDeclaration.name)
|
|
37
|
-
: undefined;
|
|
38
|
-
const catchFunction = lua.createFunctionExpression(catchBlock, catchParameter ? [lua.cloneIdentifier(catchParameter)] : []);
|
|
73
|
+
const [catchFunction, catchScope] = transformCatchClause(context, statement.catchClause);
|
|
39
74
|
const catchIdentifier = lua.createIdentifier("____catch");
|
|
40
75
|
result.push(lua.createVariableDeclarationStatement(catchIdentifier, catchFunction));
|
|
41
76
|
const hasReturn = (_a = tryScope.functionReturned) !== null && _a !== void 0 ? _a : catchScope.functionReturned;
|
|
@@ -94,4 +129,12 @@ const transformThrowStatement = (statement, context) => {
|
|
|
94
129
|
return lua.createExpressionStatement(lua.createCallExpression(lua.createIdentifier("error"), parameters), statement);
|
|
95
130
|
};
|
|
96
131
|
exports.transformThrowStatement = transformThrowStatement;
|
|
132
|
+
function transformCatchClause(context, catchClause) {
|
|
133
|
+
const [catchBlock, catchScope] = (0, block_1.transformScopeBlock)(context, catchClause.block, scope_1.ScopeType.Catch);
|
|
134
|
+
const catchParameter = catchClause.variableDeclaration
|
|
135
|
+
? (0, identifier_1.transformIdentifier)(context, catchClause.variableDeclaration.name)
|
|
136
|
+
: undefined;
|
|
137
|
+
const catchFunction = lua.createFunctionExpression(catchBlock, catchParameter ? [lua.cloneIdentifier(catchParameter)] : []);
|
|
138
|
+
return [catchFunction, catchScope];
|
|
139
|
+
}
|
|
97
140
|
//# sourceMappingURL=errors.js.map
|
|
@@ -46,7 +46,7 @@ function createCallableTable(functionExpression) {
|
|
|
46
46
|
// so we create a forwarding function to eat the extra argument
|
|
47
47
|
functionExpression = lua.createFunctionExpression(lua.createBlock([
|
|
48
48
|
lua.createReturnStatement([lua.createCallExpression(functionExpression, [lua.createDotsLiteral()])]),
|
|
49
|
-
]), [lua.createAnonymousIdentifier()], lua.createDotsLiteral(), lua.
|
|
49
|
+
]), [lua.createAnonymousIdentifier()], lua.createDotsLiteral(), lua.NodeFlags.Inline);
|
|
50
50
|
}
|
|
51
51
|
return lua.createCallExpression(lua.createIdentifier("setmetatable"), [
|
|
52
52
|
lua.createTableExpression(),
|
|
@@ -114,7 +114,7 @@ function transformFunctionBody(context, parameters, body, spreadIdentifier, node
|
|
|
114
114
|
scope.node = node;
|
|
115
115
|
let bodyStatements = transformFunctionBodyContent(context, body);
|
|
116
116
|
if (node && (0, async_await_1.isAsyncFunction)(node)) {
|
|
117
|
-
bodyStatements = (0, async_await_1.wrapInAsyncAwaiter)(context, bodyStatements);
|
|
117
|
+
bodyStatements = [lua.createReturnStatement([(0, async_await_1.wrapInAsyncAwaiter)(context, bodyStatements)])];
|
|
118
118
|
}
|
|
119
119
|
const headerStatements = transformFunctionBodyHeader(context, scope, parameters, spreadIdentifier);
|
|
120
120
|
(0, scope_1.popScope)(context);
|
|
@@ -169,11 +169,11 @@ function transformFunctionToExpression(context, node) {
|
|
|
169
169
|
functionContext = (0, lua_ast_1.createSelfIdentifier)();
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
let flags = lua.
|
|
172
|
+
let flags = lua.NodeFlags.None;
|
|
173
173
|
if (!ts.isBlock(node.body))
|
|
174
|
-
flags |= lua.
|
|
174
|
+
flags |= lua.NodeFlags.Inline;
|
|
175
175
|
if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {
|
|
176
|
-
flags |= lua.
|
|
176
|
+
flags |= lua.NodeFlags.Declaration;
|
|
177
177
|
}
|
|
178
178
|
const [paramNames, dotsLiteral, spreadIdentifier] = transformParameters(context, node.parameters, functionContext);
|
|
179
179
|
const [transformedBody, functionScope] = transformFunctionBody(context, node.parameters, node.body, spreadIdentifier, node);
|
|
@@ -5,3 +5,4 @@ export declare function createModuleRequire(context: TransformationContext, modu
|
|
|
5
5
|
export declare const transformImportDeclaration: FunctionVisitor<ts.ImportDeclaration>;
|
|
6
6
|
export declare const transformExternalModuleReference: FunctionVisitor<ts.ExternalModuleReference>;
|
|
7
7
|
export declare const transformImportEqualsDeclaration: FunctionVisitor<ts.ImportEqualsDeclaration>;
|
|
8
|
+
export declare const transformImportExpression: FunctionVisitor<ts.CallExpression>;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transformImportEqualsDeclaration = exports.transformExternalModuleReference = exports.transformImportDeclaration = exports.createModuleRequire = void 0;
|
|
3
|
+
exports.transformImportExpression = exports.transformImportEqualsDeclaration = exports.transformExternalModuleReference = exports.transformImportDeclaration = exports.createModuleRequire = void 0;
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const ts = require("typescript");
|
|
6
6
|
const lua = require("../../../LuaAST");
|
|
7
|
+
const promise_1 = require("../../builtins/promise");
|
|
7
8
|
const annotations_1 = require("../../utils/annotations");
|
|
8
9
|
const export_1 = require("../../utils/export");
|
|
9
10
|
const lua_ast_1 = require("../../utils/lua-ast");
|
|
11
|
+
const lualib_1 = require("../../utils/lualib");
|
|
10
12
|
const safe_names_1 = require("../../utils/safe-names");
|
|
11
13
|
const scope_1 = require("../../utils/scope");
|
|
12
14
|
const identifier_1 = require("../identifier");
|
|
@@ -113,4 +115,10 @@ const transformImportEqualsDeclaration = (node, context) => {
|
|
|
113
115
|
return (0, lua_ast_1.createHoistableVariableDeclarationStatement)(context, name, expression, node);
|
|
114
116
|
};
|
|
115
117
|
exports.transformImportEqualsDeclaration = transformImportEqualsDeclaration;
|
|
118
|
+
const transformImportExpression = (node, context) => {
|
|
119
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Promise);
|
|
120
|
+
const importPath = node.arguments.map(a => context.transformExpression(a));
|
|
121
|
+
return lua.createCallExpression((0, promise_1.createStaticPromiseFunctionAccessor)("resolve", node), importPath, node);
|
|
122
|
+
};
|
|
123
|
+
exports.transformImportExpression = transformImportExpression;
|
|
116
124
|
//# sourceMappingURL=import.js.map
|
|
@@ -61,14 +61,15 @@ const transformReturnStatement = (statement, context) => {
|
|
|
61
61
|
exports.transformReturnStatement = transformReturnStatement;
|
|
62
62
|
function createReturnStatement(context, values, node) {
|
|
63
63
|
const results = [...values];
|
|
64
|
+
if ((0, typescript_1.isInAsyncFunction)(node)) {
|
|
65
|
+
return lua.createReturnStatement([
|
|
66
|
+
lua.createCallExpression(lua.createIdentifier("____awaiter_resolve"), [lua.createNilLiteral(), ...values]),
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
64
69
|
if (isInTryCatch(context)) {
|
|
65
70
|
// Bubble up explicit return flag and check if we're inside a try/catch block
|
|
66
71
|
results.unshift(lua.createBooleanLiteral(true));
|
|
67
72
|
}
|
|
68
|
-
else if ((0, typescript_1.isInAsyncFunction)(node)) {
|
|
69
|
-
// Add nil error handler in async function and not in try
|
|
70
|
-
results.unshift(lua.createNilLiteral());
|
|
71
|
-
}
|
|
72
73
|
return lua.createReturnStatement(results, node);
|
|
73
74
|
}
|
|
74
75
|
exports.createReturnStatement = createReturnStatement;
|
|
@@ -11,15 +11,9 @@ const typescript_1 = require("../utils/typescript");
|
|
|
11
11
|
const multi_1 = require("./language-extensions/multi");
|
|
12
12
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
13
13
|
const vararg_1 = require("./language-extensions/vararg");
|
|
14
|
-
function skipOuterExpressionParents(node) {
|
|
15
|
-
while (ts.isOuterExpression(node)) {
|
|
16
|
-
node = node.parent;
|
|
17
|
-
}
|
|
18
|
-
return node;
|
|
19
|
-
}
|
|
20
14
|
function isOptimizedVarArgSpread(context, symbol, identifier) {
|
|
21
15
|
var _a;
|
|
22
|
-
if (!ts.isSpreadElement(
|
|
16
|
+
if (!ts.isSpreadElement((0, typescript_1.findFirstNonOuterParent)(identifier))) {
|
|
23
17
|
return false;
|
|
24
18
|
}
|
|
25
19
|
// Walk up, stopping at any scope types which could stop optimization
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-to-lua",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.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/",
|