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
|
@@ -9,9 +9,9 @@ const lualib_1 = require("../../utils/lualib");
|
|
|
9
9
|
function transformDecoratorExpression(context, decorator) {
|
|
10
10
|
const expression = decorator.expression;
|
|
11
11
|
const type = context.checker.getTypeAtLocation(expression);
|
|
12
|
-
const callContext = function_context_1.getFunctionContextType(context, type);
|
|
12
|
+
const callContext = (0, function_context_1.getFunctionContextType)(context, type);
|
|
13
13
|
if (callContext === function_context_1.ContextType.Void) {
|
|
14
|
-
context.diagnostics.push(diagnostics_1.decoratorInvalidContext(decorator));
|
|
14
|
+
context.diagnostics.push((0, diagnostics_1.decoratorInvalidContext)(decorator));
|
|
15
15
|
}
|
|
16
16
|
return context.transformExpression(expression);
|
|
17
17
|
}
|
|
@@ -26,7 +26,7 @@ function createDecoratingExpression(context, kind, decorators, targetTableName,
|
|
|
26
26
|
kind === ts.SyntaxKind.SetAccessor;
|
|
27
27
|
trailingExpressions.push(isMethodOrAccessor ? lua.createBooleanLiteral(true) : lua.createNilLiteral());
|
|
28
28
|
}
|
|
29
|
-
return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.Decorate, undefined, ...trailingExpressions);
|
|
29
|
+
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Decorate, undefined, ...trailingExpressions);
|
|
30
30
|
}
|
|
31
31
|
exports.createDecoratingExpression = createDecoratingExpression;
|
|
32
32
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -9,7 +9,6 @@ const diagnostics_1 = require("../../utils/diagnostics");
|
|
|
9
9
|
const export_1 = require("../../utils/export");
|
|
10
10
|
const lua_ast_1 = require("../../utils/lua-ast");
|
|
11
11
|
const safe_names_1 = require("../../utils/safe-names");
|
|
12
|
-
const transform_1 = require("../../utils/transform");
|
|
13
12
|
const identifier_1 = require("../identifier");
|
|
14
13
|
const decorators_1 = require("./decorators");
|
|
15
14
|
const accessors_1 = require("./members/accessors");
|
|
@@ -21,8 +20,8 @@ const setup_1 = require("./setup");
|
|
|
21
20
|
const utils_2 = require("./utils");
|
|
22
21
|
const transformClassDeclaration = (declaration, context) => {
|
|
23
22
|
// If declaration is a default export, transform to export variable assignment instead
|
|
24
|
-
if (export_1.hasDefaultExportModifier(declaration)) {
|
|
25
|
-
const left =
|
|
23
|
+
if ((0, export_1.hasDefaultExportModifier)(declaration)) {
|
|
24
|
+
const left = (0, export_1.createDefaultExportExpression)(declaration);
|
|
26
25
|
const right = transformClassAsExpression(declaration, context);
|
|
27
26
|
return [lua.createAssignmentStatement(left, right, declaration)];
|
|
28
27
|
}
|
|
@@ -30,13 +29,12 @@ const transformClassDeclaration = (declaration, context) => {
|
|
|
30
29
|
return statements;
|
|
31
30
|
};
|
|
32
31
|
exports.transformClassDeclaration = transformClassDeclaration;
|
|
33
|
-
const transformThisExpression = node => lua_ast_1.createSelfIdentifier(node);
|
|
32
|
+
const transformThisExpression = node => (0, lua_ast_1.createSelfIdentifier)(node);
|
|
34
33
|
exports.transformThisExpression = transformThisExpression;
|
|
35
34
|
function transformClassAsExpression(expression, context) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}, expression);
|
|
35
|
+
const { statements, name } = transformClassLikeDeclaration(expression, context);
|
|
36
|
+
context.addPrecedingStatements(statements);
|
|
37
|
+
return name;
|
|
40
38
|
}
|
|
41
39
|
exports.transformClassAsExpression = transformClassAsExpression;
|
|
42
40
|
const classSuperInfos = new WeakMap();
|
|
@@ -46,52 +44,51 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
46
44
|
className = nameOverride;
|
|
47
45
|
}
|
|
48
46
|
else if (classDeclaration.name !== undefined) {
|
|
49
|
-
className = identifier_1.transformIdentifier(context, classDeclaration.name);
|
|
47
|
+
className = (0, identifier_1.transformIdentifier)(context, classDeclaration.name);
|
|
50
48
|
}
|
|
51
49
|
else {
|
|
52
|
-
|
|
53
|
-
className = lua.createAnonymousIdentifier();
|
|
50
|
+
className = lua.createIdentifier(context.createTempName("class"), classDeclaration);
|
|
54
51
|
}
|
|
55
|
-
const annotations = annotations_1.getTypeAnnotations(context.checker.getTypeAtLocation(classDeclaration));
|
|
52
|
+
const annotations = (0, annotations_1.getTypeAnnotations)(context.checker.getTypeAtLocation(classDeclaration));
|
|
56
53
|
if (annotations.has(annotations_1.AnnotationKind.Extension)) {
|
|
57
|
-
context.diagnostics.push(diagnostics_1.annotationRemoved(classDeclaration, annotations_1.AnnotationKind.Extension));
|
|
54
|
+
context.diagnostics.push((0, diagnostics_1.annotationRemoved)(classDeclaration, annotations_1.AnnotationKind.Extension));
|
|
58
55
|
}
|
|
59
56
|
if (annotations.has(annotations_1.AnnotationKind.MetaExtension)) {
|
|
60
|
-
context.diagnostics.push(diagnostics_1.annotationRemoved(classDeclaration, annotations_1.AnnotationKind.MetaExtension));
|
|
57
|
+
context.diagnostics.push((0, diagnostics_1.annotationRemoved)(classDeclaration, annotations_1.AnnotationKind.MetaExtension));
|
|
61
58
|
}
|
|
62
59
|
// Get type that is extended
|
|
63
|
-
const extendedTypeNode = utils_2.getExtendedNode(context, classDeclaration);
|
|
64
|
-
const extendedType = utils_2.getExtendedType(context, classDeclaration);
|
|
65
|
-
const superInfo = utils_1.getOrUpdate(classSuperInfos, context, () => []);
|
|
60
|
+
const extendedTypeNode = (0, utils_2.getExtendedNode)(context, classDeclaration);
|
|
61
|
+
const extendedType = (0, utils_2.getExtendedType)(context, classDeclaration);
|
|
62
|
+
const superInfo = (0, utils_1.getOrUpdate)(classSuperInfos, context, () => []);
|
|
66
63
|
superInfo.push({ className, extendedTypeNode });
|
|
67
64
|
if (extendedType) {
|
|
68
|
-
new_1.checkForLuaLibType(context, extendedType);
|
|
65
|
+
(0, new_1.checkForLuaLibType)(context, extendedType);
|
|
69
66
|
}
|
|
70
67
|
// Get all properties with value
|
|
71
68
|
const properties = classDeclaration.members.filter(ts.isPropertyDeclaration).filter(member => member.initializer);
|
|
72
69
|
// Divide properties into static and non-static
|
|
73
|
-
const instanceFields = properties.filter(prop => !utils_2.isStaticNode(prop));
|
|
70
|
+
const instanceFields = properties.filter(prop => !(0, utils_2.isStaticNode)(prop));
|
|
74
71
|
const result = [];
|
|
75
72
|
let localClassName;
|
|
76
|
-
if (safe_names_1.isUnsafeName(className.text)) {
|
|
77
|
-
localClassName = lua.createIdentifier(safe_names_1.createSafeName(className.text), undefined, className.symbolId, className.text);
|
|
73
|
+
if ((0, safe_names_1.isUnsafeName)(className.text, context.options)) {
|
|
74
|
+
localClassName = lua.createIdentifier((0, safe_names_1.createSafeName)(className.text), undefined, className.symbolId, className.text);
|
|
78
75
|
lua.setNodePosition(localClassName, className);
|
|
79
76
|
}
|
|
80
77
|
else {
|
|
81
78
|
localClassName = className;
|
|
82
79
|
}
|
|
83
|
-
result.push(...setup_1.createClassSetup(context, classDeclaration, className, localClassName, extendedType));
|
|
80
|
+
result.push(...(0, setup_1.createClassSetup)(context, classDeclaration, className, localClassName, extendedType));
|
|
84
81
|
// Find first constructor with body
|
|
85
82
|
const constructor = classDeclaration.members.find((n) => ts.isConstructorDeclaration(n) && n.body !== undefined);
|
|
86
83
|
if (constructor) {
|
|
87
84
|
// Add constructor plus initialization of instance fields
|
|
88
|
-
const constructorResult = constructor_1.transformConstructorDeclaration(context, constructor, localClassName, instanceFields, classDeclaration);
|
|
85
|
+
const constructorResult = (0, constructor_1.transformConstructorDeclaration)(context, constructor, localClassName, instanceFields, classDeclaration);
|
|
89
86
|
if (constructorResult)
|
|
90
87
|
result.push(constructorResult);
|
|
91
88
|
}
|
|
92
89
|
else if (!extendedType) {
|
|
93
90
|
// Generate a constructor if none was defined in a base class
|
|
94
|
-
const constructorResult = constructor_1.transformConstructorDeclaration(context, ts.factory.createConstructorDeclaration([], [], [], ts.factory.createBlock([], true)), localClassName, instanceFields, classDeclaration);
|
|
91
|
+
const constructorResult = (0, constructor_1.transformConstructorDeclaration)(context, ts.factory.createConstructorDeclaration([], [], [], ts.factory.createBlock([], true)), localClassName, instanceFields, classDeclaration);
|
|
95
92
|
if (constructorResult)
|
|
96
93
|
result.push(constructorResult);
|
|
97
94
|
}
|
|
@@ -100,11 +97,11 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
100
97
|
// localClassName.prototype.____constructor = function(self, ...)
|
|
101
98
|
// baseClassName.prototype.____constructor(self, ...)
|
|
102
99
|
// ...
|
|
103
|
-
const constructorBody = fields_1.transformClassInstanceFields(context, instanceFields);
|
|
104
|
-
const superCall = lua.createExpressionStatement(lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), [lua_ast_1.createSelfIdentifier(), lua.createDotsLiteral()]));
|
|
100
|
+
const constructorBody = (0, fields_1.transformClassInstanceFields)(context, instanceFields);
|
|
101
|
+
const superCall = lua.createExpressionStatement(lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), [(0, lua_ast_1.createSelfIdentifier)(), lua.createDotsLiteral()]));
|
|
105
102
|
constructorBody.unshift(superCall);
|
|
106
|
-
const constructorFunction = lua.createFunctionExpression(lua.createBlock(constructorBody), [lua_ast_1.createSelfIdentifier()], lua.createDotsLiteral(), lua.FunctionExpressionFlags.Declaration);
|
|
107
|
-
result.push(lua.createAssignmentStatement(constructor_1.createConstructorName(localClassName), constructorFunction, classDeclaration));
|
|
103
|
+
const constructorFunction = lua.createFunctionExpression(lua.createBlock(constructorBody), [(0, lua_ast_1.createSelfIdentifier)()], lua.createDotsLiteral(), lua.FunctionExpressionFlags.Declaration);
|
|
104
|
+
result.push(lua.createAssignmentStatement((0, constructor_1.createConstructorName)(localClassName), constructorFunction, classDeclaration));
|
|
108
105
|
}
|
|
109
106
|
// Transform accessors
|
|
110
107
|
for (const member of classDeclaration.members) {
|
|
@@ -113,7 +110,7 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
113
110
|
const accessors = context.resolver.getAllAccessorDeclarations(member);
|
|
114
111
|
if (accessors.firstAccessor !== member)
|
|
115
112
|
continue;
|
|
116
|
-
const accessorsResult = accessors_1.transformAccessorDeclarations(context, accessors, localClassName);
|
|
113
|
+
const accessorsResult = (0, accessors_1.transformAccessorDeclarations)(context, accessors, localClassName);
|
|
117
114
|
if (accessorsResult) {
|
|
118
115
|
result.push(accessorsResult);
|
|
119
116
|
}
|
|
@@ -121,27 +118,27 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
121
118
|
const decorationStatements = [];
|
|
122
119
|
for (const member of classDeclaration.members) {
|
|
123
120
|
if (ts.isAccessor(member)) {
|
|
124
|
-
const expression = fields_1.createPropertyDecoratingExpression(context, member, localClassName);
|
|
121
|
+
const expression = (0, fields_1.createPropertyDecoratingExpression)(context, member, localClassName);
|
|
125
122
|
if (expression)
|
|
126
123
|
decorationStatements.push(lua.createExpressionStatement(expression));
|
|
127
124
|
}
|
|
128
125
|
else if (ts.isMethodDeclaration(member)) {
|
|
129
|
-
const statement = method_1.transformMethodDeclaration(context, member, localClassName);
|
|
126
|
+
const statement = (0, method_1.transformMethodDeclaration)(context, member, localClassName);
|
|
130
127
|
if (statement)
|
|
131
128
|
result.push(statement);
|
|
132
129
|
if (member.body) {
|
|
133
|
-
const statement = method_1.createMethodDecoratingExpression(context, member, localClassName);
|
|
130
|
+
const statement = (0, method_1.createMethodDecoratingExpression)(context, member, localClassName);
|
|
134
131
|
if (statement)
|
|
135
132
|
decorationStatements.push(statement);
|
|
136
133
|
}
|
|
137
134
|
}
|
|
138
135
|
else if (ts.isPropertyDeclaration(member)) {
|
|
139
|
-
if (utils_2.isStaticNode(member)) {
|
|
140
|
-
const statement = fields_1.transformStaticPropertyDeclaration(context, member, localClassName);
|
|
136
|
+
if ((0, utils_2.isStaticNode)(member)) {
|
|
137
|
+
const statement = (0, fields_1.transformStaticPropertyDeclaration)(context, member, localClassName);
|
|
141
138
|
if (statement)
|
|
142
139
|
decorationStatements.push(statement);
|
|
143
140
|
}
|
|
144
|
-
const expression = fields_1.createPropertyDecoratingExpression(context, member, localClassName);
|
|
141
|
+
const expression = (0, fields_1.createPropertyDecoratingExpression)(context, member, localClassName);
|
|
145
142
|
if (expression)
|
|
146
143
|
decorationStatements.push(lua.createExpressionStatement(expression));
|
|
147
144
|
}
|
|
@@ -149,15 +146,22 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
149
146
|
result.push(...decorationStatements);
|
|
150
147
|
// Decorate the class
|
|
151
148
|
if (classDeclaration.decorators) {
|
|
152
|
-
const decoratingExpression = decorators_1.createDecoratingExpression(context, classDeclaration.kind, classDeclaration.decorators.map(d => decorators_1.transformDecoratorExpression(context, d)), localClassName);
|
|
149
|
+
const decoratingExpression = (0, decorators_1.createDecoratingExpression)(context, classDeclaration.kind, classDeclaration.decorators.map(d => (0, decorators_1.transformDecoratorExpression)(context, d)), localClassName);
|
|
153
150
|
const decoratingStatement = lua.createAssignmentStatement(localClassName, decoratingExpression);
|
|
154
151
|
result.push(decoratingStatement);
|
|
152
|
+
if ((0, export_1.hasExportModifier)(classDeclaration)) {
|
|
153
|
+
const exportExpression = (0, export_1.hasDefaultExportModifier)(classDeclaration)
|
|
154
|
+
? (0, export_1.createDefaultExportExpression)(classDeclaration)
|
|
155
|
+
: (0, export_1.createExportedIdentifier)(context, className);
|
|
156
|
+
const classAssignment = lua.createAssignmentStatement(exportExpression, localClassName);
|
|
157
|
+
result.push(classAssignment);
|
|
158
|
+
}
|
|
155
159
|
}
|
|
156
160
|
superInfo.pop();
|
|
157
161
|
return { statements: result, name: className };
|
|
158
162
|
}
|
|
159
163
|
const transformSuperExpression = (expression, context) => {
|
|
160
|
-
const superInfos = utils_1.getOrUpdate(classSuperInfos, context, () => []);
|
|
164
|
+
const superInfos = (0, utils_1.getOrUpdate)(classSuperInfos, context, () => []);
|
|
161
165
|
const superInfo = superInfos[superInfos.length - 1];
|
|
162
166
|
if (!superInfo)
|
|
163
167
|
return lua.createAnonymousIdentifier(expression);
|
|
@@ -167,9 +171,9 @@ const transformSuperExpression = (expression, context) => {
|
|
|
167
171
|
let baseClassName;
|
|
168
172
|
if (extendsExpression && ts.isIdentifier(extendsExpression)) {
|
|
169
173
|
const symbol = context.checker.getSymbolAtLocation(extendsExpression);
|
|
170
|
-
if (symbol && !export_1.isSymbolExported(context, symbol)) {
|
|
174
|
+
if (symbol && !(0, export_1.isSymbolExported)(context, symbol)) {
|
|
171
175
|
// Use "baseClassName" if base is a simple identifier
|
|
172
|
-
baseClassName = identifier_1.transformIdentifier(context, extendsExpression);
|
|
176
|
+
baseClassName = (0, identifier_1.transformIdentifier)(context, extendsExpression);
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
if (!baseClassName) {
|
|
@@ -9,12 +9,12 @@ const literal_1 = require("../../literal");
|
|
|
9
9
|
const utils_1 = require("../utils");
|
|
10
10
|
const constructor_1 = require("./constructor");
|
|
11
11
|
function transformAccessor(context, node) {
|
|
12
|
-
const [params, dot, restParam] = function_1.transformParameters(context, node.parameters, lua_ast_1.createSelfIdentifier());
|
|
13
|
-
const body = node.body ? function_1.transformFunctionBody(context, node.parameters, node.body, restParam)[0] : [];
|
|
12
|
+
const [params, dot, restParam] = (0, function_1.transformParameters)(context, node.parameters, (0, lua_ast_1.createSelfIdentifier)());
|
|
13
|
+
const body = node.body ? (0, function_1.transformFunctionBody)(context, node.parameters, node.body, restParam)[0] : [];
|
|
14
14
|
return lua.createFunctionExpression(lua.createBlock(body), params, dot, lua.FunctionExpressionFlags.Declaration);
|
|
15
15
|
}
|
|
16
16
|
function transformAccessorDeclarations(context, { firstAccessor, getAccessor, setAccessor }, className) {
|
|
17
|
-
const propertyName = literal_1.transformPropertyName(context, firstAccessor.name);
|
|
17
|
+
const propertyName = (0, literal_1.transformPropertyName)(context, firstAccessor.name);
|
|
18
18
|
const descriptor = lua.createTableExpression([]);
|
|
19
19
|
if (getAccessor) {
|
|
20
20
|
const getterFunction = transformAccessor(context, getAccessor);
|
|
@@ -24,13 +24,13 @@ function transformAccessorDeclarations(context, { firstAccessor, getAccessor, se
|
|
|
24
24
|
const setterFunction = transformAccessor(context, setAccessor);
|
|
25
25
|
descriptor.fields.push(lua.createTableFieldExpression(setterFunction, lua.createStringLiteral("set")));
|
|
26
26
|
}
|
|
27
|
-
const isStatic = utils_1.isStaticNode(firstAccessor);
|
|
28
|
-
const target = isStatic ? lua.cloneIdentifier(className) : constructor_1.createPrototypeName(className);
|
|
27
|
+
const isStatic = (0, utils_1.isStaticNode)(firstAccessor);
|
|
28
|
+
const target = isStatic ? lua.cloneIdentifier(className) : (0, constructor_1.createPrototypeName)(className);
|
|
29
29
|
const feature = isStatic ? lualib_1.LuaLibFeature.ObjectDefineProperty : lualib_1.LuaLibFeature.SetDescriptor;
|
|
30
30
|
const parameters = [target, propertyName, descriptor];
|
|
31
31
|
if (!isStatic)
|
|
32
32
|
parameters.push(lua.createBooleanLiteral(true));
|
|
33
|
-
const call = lualib_1.transformLuaLibFunction(context, feature, undefined, ...parameters);
|
|
33
|
+
const call = (0, lualib_1.transformLuaLibFunction)(context, feature, undefined, ...parameters);
|
|
34
34
|
return lua.createExpressionStatement(call);
|
|
35
35
|
}
|
|
36
36
|
exports.transformAccessorDeclarations = transformAccessorDeclarations;
|
|
@@ -22,14 +22,14 @@ function transformConstructorDeclaration(context, statement, className, instance
|
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
24
|
// Transform body
|
|
25
|
-
const scope = scope_1.pushScope(context, scope_1.ScopeType.Function);
|
|
26
|
-
const body = function_1.transformFunctionBodyContent(context, statement.body);
|
|
27
|
-
const [params, dotsLiteral, restParamName] = function_1.transformParameters(context, statement.parameters, lua_ast_1.createSelfIdentifier());
|
|
25
|
+
const scope = (0, scope_1.pushScope)(context, scope_1.ScopeType.Function);
|
|
26
|
+
const body = (0, function_1.transformFunctionBodyContent)(context, statement.body);
|
|
27
|
+
const [params, dotsLiteral, restParamName] = (0, function_1.transformParameters)(context, statement.parameters, (0, lua_ast_1.createSelfIdentifier)());
|
|
28
28
|
// Make sure default parameters are assigned before fields are initialized
|
|
29
|
-
const bodyWithFieldInitializers = function_1.transformFunctionBodyHeader(context, scope, statement.parameters, restParamName);
|
|
29
|
+
const bodyWithFieldInitializers = (0, function_1.transformFunctionBodyHeader)(context, scope, statement.parameters, restParamName);
|
|
30
30
|
// Check for field declarations in constructor
|
|
31
31
|
const constructorFieldsDeclarations = statement.parameters.filter(p => p.modifiers !== undefined);
|
|
32
|
-
const classInstanceFields = fields_1.transformClassInstanceFields(context, instanceFields);
|
|
32
|
+
const classInstanceFields = (0, fields_1.transformClassInstanceFields)(context, instanceFields);
|
|
33
33
|
// If there are field initializers and the first statement is a super call,
|
|
34
34
|
// move super call between default assignments and initializers
|
|
35
35
|
if ((constructorFieldsDeclarations.length > 0 || classInstanceFields.length > 0) &&
|
|
@@ -49,7 +49,7 @@ function transformConstructorDeclaration(context, statement, className, instance
|
|
|
49
49
|
for (const declaration of constructorFieldsDeclarations) {
|
|
50
50
|
if (ts.isIdentifier(declaration.name)) {
|
|
51
51
|
// self.declarationName = declarationName
|
|
52
|
-
const assignment = lua.createAssignmentStatement(lua.createTableIndexExpression(lua_ast_1.createSelfIdentifier(), lua.createStringLiteral(declaration.name.text)), identifier_1.transformIdentifier(context, declaration.name));
|
|
52
|
+
const assignment = lua.createAssignmentStatement(lua.createTableIndexExpression((0, lua_ast_1.createSelfIdentifier)(), lua.createStringLiteral(declaration.name.text)), (0, identifier_1.transformIdentifier)(context, declaration.name));
|
|
53
53
|
bodyWithFieldInitializers.push(assignment);
|
|
54
54
|
}
|
|
55
55
|
// else { TypeScript error: A parameter property may not be declared using a binding pattern }
|
|
@@ -58,7 +58,7 @@ function transformConstructorDeclaration(context, statement, className, instance
|
|
|
58
58
|
bodyWithFieldInitializers.push(...body);
|
|
59
59
|
const block = lua.createBlock(bodyWithFieldInitializers);
|
|
60
60
|
const constructorWasGenerated = statement.pos === -1;
|
|
61
|
-
scope_1.popScope(context);
|
|
61
|
+
(0, scope_1.popScope)(context);
|
|
62
62
|
return lua.createAssignmentStatement(createConstructorName(className), lua.createFunctionExpression(block, params, dotsLiteral, lua.FunctionExpressionFlags.Declaration), constructorWasGenerated ? classDeclaration : statement);
|
|
63
63
|
}
|
|
64
64
|
exports.transformConstructorDeclaration = transformConstructorDeclaration;
|
|
@@ -9,19 +9,19 @@ const method_1 = require("./method");
|
|
|
9
9
|
function createPropertyDecoratingExpression(context, node, className) {
|
|
10
10
|
if (!node.decorators)
|
|
11
11
|
return;
|
|
12
|
-
const propertyName = literal_1.transformPropertyName(context, node.name);
|
|
13
|
-
const propertyOwnerTable = method_1.transformMemberExpressionOwnerName(node, className);
|
|
14
|
-
return decorators_1.createDecoratingExpression(context, node.kind, node.decorators.map(d => decorators_1.transformDecoratorExpression(context, d)), propertyOwnerTable, propertyName);
|
|
12
|
+
const propertyName = (0, literal_1.transformPropertyName)(context, node.name);
|
|
13
|
+
const propertyOwnerTable = (0, method_1.transformMemberExpressionOwnerName)(node, className);
|
|
14
|
+
return (0, decorators_1.createDecoratingExpression)(context, node.kind, node.decorators.map(d => (0, decorators_1.transformDecoratorExpression)(context, d)), propertyOwnerTable, propertyName);
|
|
15
15
|
}
|
|
16
16
|
exports.createPropertyDecoratingExpression = createPropertyDecoratingExpression;
|
|
17
17
|
function transformClassInstanceFields(context, instanceFields) {
|
|
18
18
|
const statements = [];
|
|
19
19
|
for (const f of instanceFields) {
|
|
20
20
|
// Get identifier
|
|
21
|
-
const fieldName = literal_1.transformPropertyName(context, f.name);
|
|
21
|
+
const fieldName = (0, literal_1.transformPropertyName)(context, f.name);
|
|
22
22
|
const value = f.initializer ? context.transformExpression(f.initializer) : undefined;
|
|
23
23
|
// self[fieldName]
|
|
24
|
-
const selfIndex = lua.createTableIndexExpression(lua_ast_1.createSelfIdentifier(), fieldName);
|
|
24
|
+
const selfIndex = lua.createTableIndexExpression((0, lua_ast_1.createSelfIdentifier)(), fieldName);
|
|
25
25
|
// self[fieldName] = value
|
|
26
26
|
const assignClassField = lua.createAssignmentStatement(selfIndex, value, f);
|
|
27
27
|
statements.push(assignClassField);
|
|
@@ -32,7 +32,7 @@ exports.transformClassInstanceFields = transformClassInstanceFields;
|
|
|
32
32
|
function transformStaticPropertyDeclaration(context, field, className) {
|
|
33
33
|
if (!field.initializer)
|
|
34
34
|
return;
|
|
35
|
-
const fieldName = literal_1.transformPropertyName(context, field.name);
|
|
35
|
+
const fieldName = (0, literal_1.transformPropertyName)(context, field.name);
|
|
36
36
|
const value = context.transformExpression(field.initializer);
|
|
37
37
|
const classField = lua.createTableIndexExpression(lua.cloneIdentifier(className), fieldName);
|
|
38
38
|
return lua.createAssignmentStatement(classField, value);
|
|
@@ -10,11 +10,11 @@ const constructor_1 = require("./constructor");
|
|
|
10
10
|
const lualib_1 = require("../../../utils/lualib");
|
|
11
11
|
const utils_2 = require("../../../../utils");
|
|
12
12
|
function transformMemberExpressionOwnerName(node, className) {
|
|
13
|
-
return utils_1.isStaticNode(node) ? lua.cloneIdentifier(className) : constructor_1.createPrototypeName(className);
|
|
13
|
+
return (0, utils_1.isStaticNode)(node) ? lua.cloneIdentifier(className) : (0, constructor_1.createPrototypeName)(className);
|
|
14
14
|
}
|
|
15
15
|
exports.transformMemberExpressionOwnerName = transformMemberExpressionOwnerName;
|
|
16
16
|
function transformMethodName(context, node) {
|
|
17
|
-
const methodName = literal_1.transformPropertyName(context, node.name);
|
|
17
|
+
const methodName = (0, literal_1.transformPropertyName)(context, node.name);
|
|
18
18
|
if (lua.isStringLiteral(methodName) && methodName.value === "toString") {
|
|
19
19
|
return lua.createStringLiteral("__tostring", node.name);
|
|
20
20
|
}
|
|
@@ -27,7 +27,7 @@ function transformMethodDeclaration(context, node, className) {
|
|
|
27
27
|
return;
|
|
28
28
|
const methodTable = transformMemberExpressionOwnerName(node, className);
|
|
29
29
|
const methodName = transformMethodName(context, node);
|
|
30
|
-
const [functionExpression] = function_1.transformFunctionToExpression(context, node);
|
|
30
|
+
const [functionExpression] = (0, function_1.transformFunctionToExpression)(context, node);
|
|
31
31
|
return lua.createAssignmentStatement(lua.createTableIndexExpression(methodTable, methodName), functionExpression, node);
|
|
32
32
|
}
|
|
33
33
|
exports.transformMethodDeclaration = transformMethodDeclaration;
|
|
@@ -38,12 +38,12 @@ function createMethodDecoratingExpression(context, node, className) {
|
|
|
38
38
|
const parameterDecorators = node.parameters
|
|
39
39
|
.flatMap((parameter, index) => {
|
|
40
40
|
var _a;
|
|
41
|
-
return (_a = parameter.decorators) === null || _a === void 0 ? void 0 : _a.map(decorator => lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.DecorateParam, node, lua.createNumericLiteral(index), decorators_1.transformDecoratorExpression(context, decorator)));
|
|
41
|
+
return (_a = parameter.decorators) === null || _a === void 0 ? void 0 : _a.map(decorator => (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.DecorateParam, node, lua.createNumericLiteral(index), (0, decorators_1.transformDecoratorExpression)(context, decorator)));
|
|
42
42
|
})
|
|
43
43
|
.filter(utils_2.isNonNull);
|
|
44
|
-
const methodDecorators = (_b = (_a = node.decorators) === null || _a === void 0 ? void 0 : _a.map(d => decorators_1.transformDecoratorExpression(context, d))) !== null && _b !== void 0 ? _b : [];
|
|
44
|
+
const methodDecorators = (_b = (_a = node.decorators) === null || _a === void 0 ? void 0 : _a.map(d => (0, decorators_1.transformDecoratorExpression)(context, d))) !== null && _b !== void 0 ? _b : [];
|
|
45
45
|
if (methodDecorators.length > 0 || parameterDecorators.length > 0) {
|
|
46
|
-
const decorateMethod = decorators_1.createDecoratingExpression(context, node.kind, [...methodDecorators, ...parameterDecorators], methodTable, methodName);
|
|
46
|
+
const decorateMethod = (0, decorators_1.createDecoratingExpression)(context, node.kind, [...methodDecorators, ...parameterDecorators], methodTable, methodName);
|
|
47
47
|
return lua.createExpressionStatement(decorateMethod);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformNewExpression = exports.checkForLuaLibType = void 0;
|
|
4
|
+
const ts = require("typescript");
|
|
4
5
|
const lua = require("../../../LuaAST");
|
|
5
6
|
const annotations_1 = require("../../utils/annotations");
|
|
6
7
|
const diagnostics_1 = require("../../utils/diagnostics");
|
|
@@ -28,49 +29,46 @@ function checkForLuaLibType(context, type) {
|
|
|
28
29
|
const name = context.checker.getFullyQualifiedName(type.symbol);
|
|
29
30
|
switch (name) {
|
|
30
31
|
case "Map":
|
|
31
|
-
lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.Map);
|
|
32
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Map);
|
|
32
33
|
return;
|
|
33
34
|
case "Set":
|
|
34
|
-
lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.Set);
|
|
35
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Set);
|
|
35
36
|
return;
|
|
36
37
|
case "WeakMap":
|
|
37
|
-
lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.WeakMap);
|
|
38
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.WeakMap);
|
|
38
39
|
return;
|
|
39
40
|
case "WeakSet":
|
|
40
|
-
lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.WeakSet);
|
|
41
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.WeakSet);
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
43
44
|
if (builtinErrorTypeNames.has(name)) {
|
|
44
|
-
lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.Error);
|
|
45
|
+
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Error);
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
exports.checkForLuaLibType = checkForLuaLibType;
|
|
48
49
|
const transformNewExpression = (node, context) => {
|
|
49
|
-
var _a;
|
|
50
|
+
var _a, _b;
|
|
50
51
|
const type = context.checker.getTypeAtLocation(node);
|
|
51
|
-
const annotations = annotations_1.getTypeAnnotations(type);
|
|
52
|
+
const annotations = (0, annotations_1.getTypeAnnotations)(type);
|
|
52
53
|
if (annotations.has(annotations_1.AnnotationKind.LuaTable)) {
|
|
53
|
-
context.diagnostics.push(diagnostics_1.annotationRemoved(node, annotations_1.AnnotationKind.LuaTable));
|
|
54
|
+
context.diagnostics.push((0, diagnostics_1.annotationRemoved)(node, annotations_1.AnnotationKind.LuaTable));
|
|
54
55
|
}
|
|
55
|
-
if (table_1.isTableNewCall(context, node)) {
|
|
56
|
+
if ((0, table_1.isTableNewCall)(context, node)) {
|
|
56
57
|
return lua.createTableExpression(undefined, node);
|
|
57
58
|
}
|
|
58
59
|
const signature = context.checker.getResolvedSignature(node);
|
|
59
|
-
const params = node.arguments
|
|
60
|
-
? call_1.transformArguments(context, node.arguments, signature)
|
|
61
|
-
: [lua.createBooleanLiteral(true)];
|
|
60
|
+
const [name, params] = (0, call_1.transformCallAndArguments)(context, node.expression, (_a = node.arguments) !== null && _a !== void 0 ? _a : [ts.factory.createTrue()], signature);
|
|
62
61
|
checkForLuaLibType(context, type);
|
|
63
|
-
const name = context.transformExpression(node.expression);
|
|
64
62
|
const customConstructorAnnotation = annotations.get(annotations_1.AnnotationKind.CustomConstructor);
|
|
65
63
|
if (customConstructorAnnotation) {
|
|
66
64
|
if (customConstructorAnnotation.args.length === 1) {
|
|
67
|
-
return lua.createCallExpression(lua.createIdentifier(customConstructorAnnotation.args[0]), call_1.transformArguments(context, (
|
|
65
|
+
return lua.createCallExpression(lua.createIdentifier(customConstructorAnnotation.args[0]), (0, call_1.transformArguments)(context, (_b = node.arguments) !== null && _b !== void 0 ? _b : []), node);
|
|
68
66
|
}
|
|
69
67
|
else {
|
|
70
|
-
context.diagnostics.push(diagnostics_1.annotationInvalidArgumentCount(node, annotations_1.AnnotationKind.CustomConstructor, customConstructorAnnotation.args.length, 1));
|
|
68
|
+
context.diagnostics.push((0, diagnostics_1.annotationInvalidArgumentCount)(node, annotations_1.AnnotationKind.CustomConstructor, customConstructorAnnotation.args.length, 1));
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
|
-
return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.New, node, name, ...params);
|
|
71
|
+
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.New, node, name, ...params);
|
|
74
72
|
};
|
|
75
73
|
exports.transformNewExpression = transformNewExpression;
|
|
76
74
|
//# sourceMappingURL=new.js.map
|
|
@@ -11,34 +11,34 @@ const utils_2 = require("./utils");
|
|
|
11
11
|
function createClassSetup(context, statement, className, localClassName, extendsType) {
|
|
12
12
|
const result = [];
|
|
13
13
|
// __TS__Class()
|
|
14
|
-
const classInitializer = lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.Class, statement);
|
|
15
|
-
const defaultExportLeftHandSide = export_1.hasDefaultExportModifier(statement)
|
|
16
|
-
? lua.createTableIndexExpression(lua_ast_1.createExportsIdentifier(), export_1.createDefaultExportStringLiteral(statement))
|
|
14
|
+
const classInitializer = (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Class, statement);
|
|
15
|
+
const defaultExportLeftHandSide = (0, export_1.hasDefaultExportModifier)(statement)
|
|
16
|
+
? lua.createTableIndexExpression((0, lua_ast_1.createExportsIdentifier)(), (0, export_1.createDefaultExportStringLiteral)(statement))
|
|
17
17
|
: undefined;
|
|
18
18
|
// [____exports.]className = __TS__Class()
|
|
19
19
|
if (defaultExportLeftHandSide) {
|
|
20
20
|
result.push(lua.createAssignmentStatement(defaultExportLeftHandSide, classInitializer, statement));
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
result.push(...lua_ast_1.createLocalOrExportedOrGlobalDeclaration(context, className, classInitializer, statement));
|
|
23
|
+
result.push(...(0, lua_ast_1.createLocalOrExportedOrGlobalDeclaration)(context, className, classInitializer, statement));
|
|
24
24
|
}
|
|
25
25
|
if (defaultExportLeftHandSide) {
|
|
26
26
|
// local localClassName = ____exports.default
|
|
27
27
|
result.push(lua.createVariableDeclarationStatement(localClassName, defaultExportLeftHandSide));
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
|
-
const exportScope = export_1.getIdentifierExportScope(context, className);
|
|
30
|
+
const exportScope = (0, export_1.getIdentifierExportScope)(context, className);
|
|
31
31
|
if (exportScope) {
|
|
32
32
|
// local localClassName = ____exports.className
|
|
33
|
-
result.push(lua.createVariableDeclarationStatement(localClassName, export_1.createExportedIdentifier(context, lua.cloneIdentifier(className), exportScope)));
|
|
33
|
+
result.push(lua.createVariableDeclarationStatement(localClassName, (0, export_1.createExportedIdentifier)(context, lua.cloneIdentifier(className), exportScope)));
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
// localClassName.name = className
|
|
37
37
|
result.push(lua.createAssignmentStatement(lua.createTableIndexExpression(lua.cloneIdentifier(localClassName), lua.createStringLiteral("name")), getReflectionClassName(context, statement, className), statement));
|
|
38
38
|
if (extendsType) {
|
|
39
|
-
const extendedNode = utils_2.getExtendedNode(context, statement);
|
|
40
|
-
utils_1.assert(extendedNode);
|
|
41
|
-
result.push(lua.createExpressionStatement(lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.ClassExtends, utils_2.getExtendsClause(statement), lua.cloneIdentifier(localClassName), context.transformExpression(extendedNode.expression))));
|
|
39
|
+
const extendedNode = (0, utils_2.getExtendedNode)(context, statement);
|
|
40
|
+
(0, utils_1.assert)(extendedNode);
|
|
41
|
+
result.push(lua.createExpressionStatement((0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.ClassExtends, (0, utils_2.getExtendsClause)(statement), lua.cloneIdentifier(localClassName), context.transformExpression(extendedNode.expression))));
|
|
42
42
|
}
|
|
43
43
|
return result;
|
|
44
44
|
}
|
|
@@ -50,10 +50,10 @@ function getReflectionClassName(context, declaration, className) {
|
|
|
50
50
|
else if (ts.isVariableDeclaration(declaration.parent) && ts.isIdentifier(declaration.parent.name)) {
|
|
51
51
|
return lua.createStringLiteral(declaration.parent.name.text);
|
|
52
52
|
}
|
|
53
|
-
else if (export_1.hasDefaultExportModifier(declaration)) {
|
|
53
|
+
else if ((0, export_1.hasDefaultExportModifier)(declaration)) {
|
|
54
54
|
return lua.createStringLiteral("default");
|
|
55
55
|
}
|
|
56
|
-
if (utils_2.getExtendedNode(context, declaration)) {
|
|
56
|
+
if ((0, utils_2.getExtendedNode)(context, declaration)) {
|
|
57
57
|
return lua.createTableIndexExpression(className, lua.createStringLiteral("name"));
|
|
58
58
|
}
|
|
59
59
|
return lua.createStringLiteral("");
|
|
@@ -19,9 +19,9 @@ function getExtendedNode(context, node) {
|
|
|
19
19
|
if (!extendsClause)
|
|
20
20
|
return;
|
|
21
21
|
const superType = context.checker.getTypeAtLocation(extendsClause.types[0]);
|
|
22
|
-
const annotations = annotations_1.getTypeAnnotations(superType);
|
|
22
|
+
const annotations = (0, annotations_1.getTypeAnnotations)(superType);
|
|
23
23
|
if (annotations.has(annotations_1.AnnotationKind.PureAbstract)) {
|
|
24
|
-
context.diagnostics.push(diagnostics_1.annotationRemoved(extendsClause, annotations_1.AnnotationKind.PureAbstract));
|
|
24
|
+
context.diagnostics.push((0, diagnostics_1.annotationRemoved)(extendsClause, annotations_1.AnnotationKind.PureAbstract));
|
|
25
25
|
}
|
|
26
26
|
return extendsClause.types[0];
|
|
27
27
|
}
|
|
@@ -3,47 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.transformIfStatement = exports.transformConditionalExpression = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
5
|
const lua = require("../../LuaAST");
|
|
6
|
+
const preceding_statements_1 = require("../utils/preceding-statements");
|
|
6
7
|
const scope_1 = require("../utils/scope");
|
|
7
8
|
const block_1 = require("./block");
|
|
8
|
-
|
|
9
|
-
const strictNullChecks = context.options.strict === true || context.options.strictNullChecks === true;
|
|
10
|
-
const falsyFlags = ts.TypeFlags.Boolean |
|
|
11
|
-
ts.TypeFlags.BooleanLiteral |
|
|
12
|
-
ts.TypeFlags.Undefined |
|
|
13
|
-
ts.TypeFlags.Null |
|
|
14
|
-
ts.TypeFlags.Never |
|
|
15
|
-
ts.TypeFlags.Void |
|
|
16
|
-
ts.TypeFlags.Any;
|
|
17
|
-
if (type.flags & falsyFlags) {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
else if (!strictNullChecks && !type.isLiteral()) {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
else if (type.isUnion()) {
|
|
24
|
-
return type.types.some(subType => canBeFalsy(context, subType));
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function wrapInFunctionCall(expression) {
|
|
31
|
-
const returnStatement = lua.createReturnStatement([expression]);
|
|
32
|
-
return lua.createFunctionExpression(lua.createBlock([returnStatement]), undefined, undefined, lua.FunctionExpressionFlags.Inline);
|
|
33
|
-
}
|
|
9
|
+
const typescript_1 = require("../utils/typescript");
|
|
34
10
|
function transformProtectedConditionalExpression(context, expression) {
|
|
11
|
+
const tempVar = context.createTempNameForNode(expression.condition);
|
|
35
12
|
const condition = context.transformExpression(expression.condition);
|
|
36
|
-
const val1 = context.transformExpression(expression.whenTrue);
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
13
|
+
const [trueStatements, val1] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(expression.whenTrue));
|
|
14
|
+
trueStatements.push(lua.createAssignmentStatement(lua.cloneIdentifier(tempVar), val1, expression.whenTrue));
|
|
15
|
+
const [falseStatements, val2] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(expression.whenFalse));
|
|
16
|
+
falseStatements.push(lua.createAssignmentStatement(lua.cloneIdentifier(tempVar), val2, expression.whenFalse));
|
|
17
|
+
context.addPrecedingStatements([
|
|
18
|
+
lua.createVariableDeclarationStatement(tempVar, undefined, expression.condition),
|
|
19
|
+
lua.createIfStatement(condition, lua.createBlock(trueStatements, expression.whenTrue), lua.createBlock(falseStatements, expression.whenFalse), expression),
|
|
20
|
+
]);
|
|
21
|
+
return lua.cloneIdentifier(tempVar);
|
|
44
22
|
}
|
|
45
23
|
const transformConditionalExpression = (expression, context) => {
|
|
46
|
-
if (canBeFalsy(context, context.checker.getTypeAtLocation(expression.whenTrue))) {
|
|
24
|
+
if ((0, typescript_1.canBeFalsy)(context, context.checker.getTypeAtLocation(expression.whenTrue))) {
|
|
47
25
|
return transformProtectedConditionalExpression(context, expression);
|
|
48
26
|
}
|
|
49
27
|
const condition = context.transformExpression(expression.condition);
|
|
@@ -55,20 +33,35 @@ const transformConditionalExpression = (expression, context) => {
|
|
|
55
33
|
};
|
|
56
34
|
exports.transformConditionalExpression = transformConditionalExpression;
|
|
57
35
|
function transformIfStatement(statement, context) {
|
|
58
|
-
scope_1.pushScope(context, scope_1.ScopeType.Conditional);
|
|
36
|
+
(0, scope_1.pushScope)(context, scope_1.ScopeType.Conditional);
|
|
59
37
|
const condition = context.transformExpression(statement.expression);
|
|
60
|
-
const statements = scope_1.performHoisting(context, block_1.transformBlockOrStatement(context, statement.thenStatement));
|
|
61
|
-
scope_1.popScope(context);
|
|
38
|
+
const statements = (0, scope_1.performHoisting)(context, (0, block_1.transformBlockOrStatement)(context, statement.thenStatement));
|
|
39
|
+
(0, scope_1.popScope)(context);
|
|
62
40
|
const ifBlock = lua.createBlock(statements);
|
|
63
41
|
if (statement.elseStatement) {
|
|
64
42
|
if (ts.isIfStatement(statement.elseStatement)) {
|
|
65
|
-
const
|
|
66
|
-
|
|
43
|
+
const tsElseStatement = statement.elseStatement;
|
|
44
|
+
const [precedingStatements, elseStatement] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => transformIfStatement(tsElseStatement, context));
|
|
45
|
+
// If else-if condition generates preceding statements, we can't use elseif, we have to break it down:
|
|
46
|
+
// if conditionA then
|
|
47
|
+
// ...
|
|
48
|
+
// else
|
|
49
|
+
// conditionB's preceding statements
|
|
50
|
+
// if conditionB then
|
|
51
|
+
// end
|
|
52
|
+
// end
|
|
53
|
+
if (precedingStatements.length > 0) {
|
|
54
|
+
const elseBlock = lua.createBlock([...precedingStatements, elseStatement]);
|
|
55
|
+
return lua.createIfStatement(condition, ifBlock, elseBlock);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return lua.createIfStatement(condition, ifBlock, elseStatement);
|
|
59
|
+
}
|
|
67
60
|
}
|
|
68
61
|
else {
|
|
69
|
-
scope_1.pushScope(context, scope_1.ScopeType.Conditional);
|
|
70
|
-
const elseStatements = scope_1.performHoisting(context, block_1.transformBlockOrStatement(context, statement.elseStatement));
|
|
71
|
-
scope_1.popScope(context);
|
|
62
|
+
(0, scope_1.pushScope)(context, scope_1.ScopeType.Conditional);
|
|
63
|
+
const elseStatements = (0, scope_1.performHoisting)(context, (0, block_1.transformBlockOrStatement)(context, statement.elseStatement));
|
|
64
|
+
(0, scope_1.popScope)(context);
|
|
72
65
|
const elseBlock = lua.createBlock(elseStatements);
|
|
73
66
|
return lua.createIfStatement(condition, ifBlock, elseBlock);
|
|
74
67
|
}
|