typescript-to-lua 1.0.0 → 1.2.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.
Files changed (185) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/CompilerOptions.d.ts +4 -3
  3. package/dist/LuaAST.d.ts +1 -0
  4. package/dist/LuaAST.js +14 -6
  5. package/dist/LuaLib.d.ts +4 -3
  6. package/dist/LuaLib.js +5 -4
  7. package/dist/LuaPrinter.d.ts +15 -4
  8. package/dist/LuaPrinter.js +79 -27
  9. package/dist/cli/diagnostics.js +2 -2
  10. package/dist/cli/parse.d.ts +1 -1
  11. package/dist/cli/parse.js +14 -0
  12. package/dist/cli/report.js +1 -1
  13. package/dist/cli/tsconfig.js +4 -4
  14. package/dist/lualib/ArrayFlat.lua +1 -1
  15. package/dist/lualib/ArrayFlatMap.lua +1 -1
  16. package/dist/lualib/ArrayIsArray.lua +1 -1
  17. package/dist/lualib/ArrayReduce.lua +7 -1
  18. package/dist/lualib/ArrayReduceRight.lua +7 -1
  19. package/dist/lualib/ArraySetLength.lua +1 -1
  20. package/dist/lualib/ArraySplice.lua +5 -5
  21. package/dist/lualib/Await.lua +39 -19
  22. package/dist/lualib/CloneDescriptor.lua +8 -8
  23. package/dist/lualib/Decorate.lua +1 -1
  24. package/dist/lualib/DelegatedYield.lua +1 -3
  25. package/dist/lualib/Delete.lua +6 -6
  26. package/dist/lualib/Error.lua +47 -44
  27. package/dist/lualib/Generator.lua +1 -5
  28. package/dist/lualib/InstanceOf.lua +1 -1
  29. package/dist/lualib/InstanceOfObject.lua +1 -1
  30. package/dist/lualib/Map.lua +130 -134
  31. package/dist/lualib/Number.lua +1 -1
  32. package/dist/lualib/NumberIsFinite.lua +1 -1
  33. package/dist/lualib/NumberToString.lua +3 -5
  34. package/dist/lualib/ObjectDefineProperty.lua +40 -8
  35. package/dist/lualib/ParseFloat.lua +9 -5
  36. package/dist/lualib/ParseInt.lua +15 -3
  37. package/dist/lualib/Promise.lua +36 -26
  38. package/dist/lualib/Set.lua +119 -123
  39. package/dist/lualib/SetDescriptor.lua +7 -1
  40. package/dist/lualib/SourceMapTraceBack.lua +19 -9
  41. package/dist/lualib/SparseArrayNew.lua +5 -0
  42. package/dist/lualib/SparseArrayPush.lua +9 -0
  43. package/dist/lualib/SparseArraySpread.lua +4 -0
  44. package/dist/lualib/StringAccess.lua +1 -1
  45. package/dist/lualib/StringCharCodeAt.lua +1 -1
  46. package/dist/lualib/StringEndsWith.lua +2 -2
  47. package/dist/lualib/StringPadEnd.lua +2 -2
  48. package/dist/lualib/StringPadStart.lua +2 -2
  49. package/dist/lualib/StringReplace.lua +12 -11
  50. package/dist/lualib/StringReplaceAll.lua +35 -0
  51. package/dist/lualib/StringSlice.lua +2 -2
  52. package/dist/lualib/StringSplit.lua +3 -3
  53. package/dist/lualib/StringStartsWith.lua +1 -1
  54. package/dist/lualib/StringSubstr.lua +1 -1
  55. package/dist/lualib/StringSubstring.lua +2 -2
  56. package/dist/lualib/Symbol.lua +3 -5
  57. package/dist/lualib/WeakMap.lua +40 -42
  58. package/dist/lualib/WeakSet.lua +36 -38
  59. package/dist/lualib/lualib_bundle.lua +705 -586
  60. package/dist/transformation/builtins/array.js +29 -30
  61. package/dist/transformation/builtins/console.js +2 -2
  62. package/dist/transformation/builtins/function.js +9 -10
  63. package/dist/transformation/builtins/global.js +8 -8
  64. package/dist/transformation/builtins/index.d.ts +1 -1
  65. package/dist/transformation/builtins/index.js +69 -36
  66. package/dist/transformation/builtins/math.js +4 -4
  67. package/dist/transformation/builtins/number.js +7 -7
  68. package/dist/transformation/builtins/object.d.ts +2 -1
  69. package/dist/transformation/builtins/object.js +12 -13
  70. package/dist/transformation/builtins/promise.js +9 -9
  71. package/dist/transformation/builtins/string.js +32 -31
  72. package/dist/transformation/builtins/symbol.js +3 -3
  73. package/dist/transformation/context/context.d.ts +12 -0
  74. package/dist/transformation/context/context.js +105 -6
  75. package/dist/transformation/index.js +1 -1
  76. package/dist/transformation/utils/annotations.d.ts +1 -3
  77. package/dist/transformation/utils/annotations.js +0 -2
  78. package/dist/transformation/utils/assignment-validation.js +8 -7
  79. package/dist/transformation/utils/diagnostics.d.ts +6 -0
  80. package/dist/transformation/utils/diagnostics.js +7 -5
  81. package/dist/transformation/utils/export.d.ts +3 -2
  82. package/dist/transformation/utils/export.js +14 -7
  83. package/dist/transformation/utils/function-context.js +8 -8
  84. package/dist/transformation/utils/lua-ast.d.ts +0 -1
  85. package/dist/transformation/utils/lua-ast.js +25 -35
  86. package/dist/transformation/utils/lualib.js +1 -1
  87. package/dist/transformation/utils/preceding-statements.d.ts +3 -0
  88. package/dist/transformation/utils/preceding-statements.js +11 -0
  89. package/dist/transformation/utils/safe-names.js +5 -5
  90. package/dist/transformation/utils/scope.d.ts +7 -0
  91. package/dist/transformation/utils/scope.js +77 -40
  92. package/dist/transformation/utils/symbols.js +6 -6
  93. package/dist/transformation/utils/typescript/index.d.ts +1 -0
  94. package/dist/transformation/utils/typescript/index.js +16 -1
  95. package/dist/transformation/utils/typescript/nodes.d.ts +2 -0
  96. package/dist/transformation/utils/typescript/nodes.js +21 -1
  97. package/dist/transformation/visitors/access.d.ts +3 -0
  98. package/dist/transformation/visitors/access.js +74 -47
  99. package/dist/transformation/visitors/async-await.js +5 -4
  100. package/dist/transformation/visitors/binary-expression/assignments.d.ts +3 -2
  101. package/dist/transformation/visitors/binary-expression/assignments.js +86 -77
  102. package/dist/transformation/visitors/binary-expression/bit.js +4 -4
  103. package/dist/transformation/visitors/binary-expression/compound.d.ts +5 -4
  104. package/dist/transformation/visitors/binary-expression/compound.js +69 -71
  105. package/dist/transformation/visitors/binary-expression/destructuring-assignments.d.ts +2 -2
  106. package/dist/transformation/visitors/binary-expression/destructuring-assignments.js +65 -36
  107. package/dist/transformation/visitors/binary-expression/index.d.ts +3 -1
  108. package/dist/transformation/visitors/binary-expression/index.js +84 -40
  109. package/dist/transformation/visitors/block.js +6 -6
  110. package/dist/transformation/visitors/break-continue.js +4 -9
  111. package/dist/transformation/visitors/call.d.ts +3 -2
  112. package/dist/transformation/visitors/call.js +130 -143
  113. package/dist/transformation/visitors/class/decorators.js +3 -3
  114. package/dist/transformation/visitors/class/index.js +43 -39
  115. package/dist/transformation/visitors/class/members/accessors.js +6 -6
  116. package/dist/transformation/visitors/class/members/constructor.js +7 -7
  117. package/dist/transformation/visitors/class/members/fields.js +6 -6
  118. package/dist/transformation/visitors/class/members/method.js +6 -6
  119. package/dist/transformation/visitors/class/new.js +14 -16
  120. package/dist/transformation/visitors/class/setup.js +11 -11
  121. package/dist/transformation/visitors/class/utils.js +2 -2
  122. package/dist/transformation/visitors/conditional.js +34 -20
  123. package/dist/transformation/visitors/delete.js +8 -4
  124. package/dist/transformation/visitors/enum.js +8 -8
  125. package/dist/transformation/visitors/errors.js +30 -30
  126. package/dist/transformation/visitors/expression-list.d.ts +7 -0
  127. package/dist/transformation/visitors/expression-list.js +120 -0
  128. package/dist/transformation/visitors/expression-statement.js +10 -6
  129. package/dist/transformation/visitors/function.js +30 -32
  130. package/dist/transformation/visitors/identifier.js +26 -22
  131. package/dist/transformation/visitors/index.js +2 -2
  132. package/dist/transformation/visitors/language-extensions/iterable.js +7 -7
  133. package/dist/transformation/visitors/language-extensions/multi.d.ts +1 -1
  134. package/dist/transformation/visitors/language-extensions/multi.js +3 -3
  135. package/dist/transformation/visitors/language-extensions/operators.js +6 -6
  136. package/dist/transformation/visitors/language-extensions/range.js +6 -6
  137. package/dist/transformation/visitors/language-extensions/table.js +5 -5
  138. package/dist/transformation/visitors/literal.d.ts +1 -2
  139. package/dist/transformation/visitors/literal.js +87 -57
  140. package/dist/transformation/visitors/loops/do-while.js +35 -9
  141. package/dist/transformation/visitors/loops/for-in.js +4 -4
  142. package/dist/transformation/visitors/loops/for-of.js +13 -13
  143. package/dist/transformation/visitors/loops/for.js +28 -8
  144. package/dist/transformation/visitors/loops/utils.d.ts +1 -0
  145. package/dist/transformation/visitors/loops/utils.js +21 -10
  146. package/dist/transformation/visitors/modules/export.js +14 -15
  147. package/dist/transformation/visitors/modules/import.js +10 -10
  148. package/dist/transformation/visitors/namespace.js +13 -13
  149. package/dist/transformation/visitors/optional-chaining.d.ts +16 -0
  150. package/dist/transformation/visitors/optional-chaining.js +172 -0
  151. package/dist/transformation/visitors/return.d.ts +1 -0
  152. package/dist/transformation/visitors/return.js +40 -26
  153. package/dist/transformation/visitors/sourceFile.js +12 -9
  154. package/dist/transformation/visitors/spread.js +11 -11
  155. package/dist/transformation/visitors/switch.js +152 -30
  156. package/dist/transformation/visitors/template.js +10 -7
  157. package/dist/transformation/visitors/typeof.js +4 -2
  158. package/dist/transformation/visitors/typescript.js +1 -1
  159. package/dist/transformation/visitors/unary-expression.js +9 -9
  160. package/dist/transformation/visitors/variable-declaration.js +46 -32
  161. package/dist/transformation/visitors/void.d.ts +6 -0
  162. package/dist/transformation/visitors/void.js +20 -0
  163. package/dist/transpilation/bundle.d.ts +3 -0
  164. package/dist/transpilation/bundle.js +56 -13
  165. package/dist/transpilation/diagnostics.js +3 -3
  166. package/dist/transpilation/index.js +2 -2
  167. package/dist/transpilation/output-collector.js +2 -2
  168. package/dist/transpilation/plugins.js +1 -1
  169. package/dist/transpilation/resolve.js +26 -14
  170. package/dist/transpilation/transformers.js +45 -25
  171. package/dist/transpilation/transpile.js +6 -6
  172. package/dist/transpilation/transpiler.js +8 -8
  173. package/dist/transpilation/utils.js +5 -3
  174. package/dist/tstl.js +8 -8
  175. package/dist/utils.js +2 -2
  176. package/package.json +15 -12
  177. package/dist/lualib/OptionalChainAccess.lua +0 -6
  178. package/dist/lualib/OptionalFunctionCall.lua +0 -6
  179. package/dist/lualib/OptionalMethodCall.lua +0 -11
  180. package/dist/transformation/utils/transform.d.ts +0 -8
  181. package/dist/transformation/utils/transform.js +0 -14
  182. package/dist/transformation/visitors/jsx/jsx.d.ts +0 -9
  183. package/dist/transformation/visitors/jsx/jsx.js +0 -237
  184. package/dist/transformation/visitors/jsx/xhtml.d.ts +0 -3
  185. package/dist/transformation/visitors/jsx/xhtml.js +0 -260
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformCallExpression = exports.transformContextualCallExpression = exports.transformArguments = exports.flattenSpreadExpressions = void 0;
3
+ exports.transformCallExpression = exports.transformContextualCallExpression = exports.transformCallAndArguments = exports.transformArguments = exports.validateArguments = void 0;
4
4
  const ts = require("typescript");
5
5
  const lua = require("../../LuaAST");
6
6
  const builtins_1 = require("../builtins");
@@ -8,7 +8,6 @@ const annotations_1 = require("../utils/annotations");
8
8
  const assignment_validation_1 = require("../utils/assignment-validation");
9
9
  const function_context_1 = require("../utils/function-context");
10
10
  const lua_ast_1 = require("../utils/lua-ast");
11
- const lualib_1 = require("../utils/lualib");
12
11
  const safe_names_1 = require("../utils/safe-names");
13
12
  const typescript_1 = require("../utils/typescript");
14
13
  const access_1 = require("./access");
@@ -16,116 +15,97 @@ const multi_1 = require("./language-extensions/multi");
16
15
  const operators_1 = require("./language-extensions/operators");
17
16
  const table_1 = require("./language-extensions/table");
18
17
  const diagnostics_1 = require("../utils/diagnostics");
19
- const transform_1 = require("../utils/transform");
20
- function getExpressionsBeforeAndAfterFirstSpread(expressions) {
21
- // [a, b, ...c, d, ...e] --> [a, b] and [...c, d, ...e]
22
- const index = expressions.findIndex(ts.isSpreadElement);
23
- const hasSpreadElement = index !== -1;
24
- const before = hasSpreadElement ? expressions.slice(0, index) : expressions;
25
- const after = hasSpreadElement ? expressions.slice(index) : [];
26
- return [before, after];
27
- }
28
- function transformSpreadableExpressionsIntoArrayConcatArguments(context, expressions) {
29
- // [...array, a, b, ...tuple()] --> [ [...array], [a, b], [...tuple()] ]
30
- // chunk non-spread arguments together so they don't concat
31
- const chunks = [];
32
- for (const [index, expression] of expressions.entries()) {
33
- if (ts.isSpreadElement(expression)) {
34
- chunks.push([expression]);
35
- const next = expressions[index + 1];
36
- if (next && !ts.isSpreadElement(next)) {
37
- chunks.push([]);
38
- }
39
- }
40
- else {
41
- let lastChunk = chunks[chunks.length - 1];
42
- if (!lastChunk) {
43
- lastChunk = [];
44
- chunks.push(lastChunk);
45
- }
46
- lastChunk.push(expression);
18
+ const expression_list_1 = require("./expression-list");
19
+ const preceding_statements_1 = require("../utils/preceding-statements");
20
+ const optional_chaining_1 = require("./optional-chaining");
21
+ function validateArguments(context, params, signature) {
22
+ if (!signature || signature.parameters.length < params.length) {
23
+ return;
24
+ }
25
+ for (const [index, param] of params.entries()) {
26
+ const signatureParameter = signature.parameters[index];
27
+ const paramType = context.checker.getTypeAtLocation(param);
28
+ if (signatureParameter.valueDeclaration !== undefined) {
29
+ const signatureType = context.checker.getTypeAtLocation(signatureParameter.valueDeclaration);
30
+ (0, assignment_validation_1.validateAssignment)(context, param, paramType, signatureType, signatureParameter.name);
47
31
  }
48
32
  }
49
- return chunks.map(chunk => lua_ast_1.wrapInTable(...chunk.map(expression => context.transformExpression(expression))));
50
33
  }
51
- function flattenSpreadExpressions(context, expressions) {
52
- const [preSpreadExpressions, postSpreadExpressions] = getExpressionsBeforeAndAfterFirstSpread(expressions);
53
- const transformedPreSpreadExpressions = preSpreadExpressions.map(a => context.transformExpression(a));
54
- // Nothing special required
55
- if (postSpreadExpressions.length === 0) {
56
- return transformedPreSpreadExpressions;
57
- }
58
- // Only one spread element at the end? Will work as expected
59
- if (postSpreadExpressions.length === 1) {
60
- return [...transformedPreSpreadExpressions, context.transformExpression(postSpreadExpressions[0])];
61
- }
62
- // Use Array.concat and unpack the result of that as the last Expression
63
- const concatArguments = transformSpreadableExpressionsIntoArrayConcatArguments(context, postSpreadExpressions);
64
- const lastExpression = lua_ast_1.createUnpackCall(context, lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.ArrayConcat, undefined, ...concatArguments));
65
- return [...transformedPreSpreadExpressions, lastExpression];
66
- }
67
- exports.flattenSpreadExpressions = flattenSpreadExpressions;
34
+ exports.validateArguments = validateArguments;
68
35
  function transformArguments(context, params, signature, callContext) {
69
- const parameters = flattenSpreadExpressions(context, params);
70
- // Add context as first param if present
36
+ validateArguments(context, params, signature);
37
+ return (0, expression_list_1.transformExpressionList)(context, callContext ? [callContext, ...params] : params);
38
+ }
39
+ exports.transformArguments = transformArguments;
40
+ function transformCallWithArguments(context, callExpression, transformedArguments, argPrecedingStatements, callContext) {
41
+ let call = context.transformExpression(callExpression);
42
+ let transformedContext;
71
43
  if (callContext) {
72
- parameters.unshift(context.transformExpression(callContext));
73
- }
74
- if (signature && signature.parameters.length >= params.length) {
75
- for (const [index, param] of params.entries()) {
76
- const signatureParameter = signature.parameters[index];
77
- const paramType = context.checker.getTypeAtLocation(param);
78
- if (signatureParameter.valueDeclaration !== undefined) {
79
- const signatureType = context.checker.getTypeAtLocation(signatureParameter.valueDeclaration);
80
- assignment_validation_1.validateAssignment(context, param, paramType, signatureType, signatureParameter.name);
81
- }
44
+ transformedContext = context.transformExpression(callContext);
45
+ }
46
+ if (argPrecedingStatements.length > 0) {
47
+ if (transformedContext) {
48
+ transformedContext = (0, expression_list_1.moveToPrecedingTemp)(context, transformedContext, callContext);
82
49
  }
50
+ call = (0, expression_list_1.moveToPrecedingTemp)(context, call, callExpression);
51
+ context.addPrecedingStatements(argPrecedingStatements);
83
52
  }
84
- return parameters;
53
+ if (transformedContext) {
54
+ transformedArguments.unshift(transformedContext);
55
+ }
56
+ return [call, transformedArguments];
85
57
  }
86
- exports.transformArguments = transformArguments;
87
- function transformElementAccessCall(context, left, args, signature) {
88
- const transformedArguments = transformArguments(context, args, signature, ts.factory.createIdentifier("____self"));
58
+ function transformCallAndArguments(context, callExpression, params, signature, callContext) {
59
+ const [argPrecedingStatements, transformedArguments] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => transformArguments(context, params, signature, callContext));
60
+ return transformCallWithArguments(context, callExpression, transformedArguments, argPrecedingStatements);
61
+ }
62
+ exports.transformCallAndArguments = transformCallAndArguments;
63
+ function transformElementAccessCall(context, left, transformedArguments, argPrecedingStatements) {
89
64
  // Cache left-side if it has effects
90
- // (function() local ____self = context; return ____self[argument](parameters); end)()
91
- const argument = ts.isElementAccessExpression(left)
92
- ? access_1.transformElementAccessArgument(context, left)
93
- : lua.createStringLiteral(left.name.text);
94
- const selfIdentifier = lua.createIdentifier("____self");
65
+ // local ____self = context; return ____self[argument](parameters);
66
+ const selfIdentifier = lua.createIdentifier(context.createTempName("self"));
95
67
  const callContext = context.transformExpression(left.expression);
96
68
  const selfAssignment = lua.createVariableDeclarationStatement(selfIdentifier, callContext);
97
- const index = lua.createTableIndexExpression(selfIdentifier, argument);
98
- const callExpression = lua.createCallExpression(index, transformedArguments);
99
- return { statements: selfAssignment, result: callExpression };
69
+ context.addPrecedingStatements(selfAssignment);
70
+ const argument = ts.isElementAccessExpression(left)
71
+ ? (0, access_1.transformElementAccessArgument)(context, left)
72
+ : lua.createStringLiteral(left.name.text);
73
+ let index = lua.createTableIndexExpression(selfIdentifier, argument);
74
+ if (argPrecedingStatements.length > 0) {
75
+ // Cache index in temp if args had preceding statements
76
+ index = (0, expression_list_1.moveToPrecedingTemp)(context, index);
77
+ context.addPrecedingStatements(argPrecedingStatements);
78
+ }
79
+ return lua.createCallExpression(index, [selfIdentifier, ...transformedArguments]);
100
80
  }
101
81
  function transformContextualCallExpression(context, node, args, signature) {
82
+ if (ts.isOptionalChain(node)) {
83
+ return (0, optional_chaining_1.transformOptionalChain)(context, node);
84
+ }
102
85
  const left = ts.isCallExpression(node) ? node.expression : node.tag;
103
- if (ts.isPropertyAccessExpression(left) && ts.isIdentifier(left.name) && safe_names_1.isValidLuaIdentifier(left.name.text)) {
86
+ let [argPrecedingStatements, transformedArguments] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => transformArguments(context, args, signature));
87
+ if (ts.isPropertyAccessExpression(left) &&
88
+ ts.isIdentifier(left.name) &&
89
+ (0, safe_names_1.isValidLuaIdentifier)(left.name.text) &&
90
+ argPrecedingStatements.length === 0) {
104
91
  // table:name()
105
92
  const table = context.transformExpression(left.expression);
106
- if (ts.isOptionalChain(node)) {
107
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.OptionalMethodCall, node, table, lua.createStringLiteral(left.name.text, left.name), lua.createBooleanLiteral(node.questionDotToken !== undefined), // Require method is present if no ?.() call
108
- ...transformArguments(context, args, signature));
109
- }
110
- else {
111
- return lua.createMethodCallExpression(table, lua.createIdentifier(left.name.text, left.name), transformArguments(context, args, signature), node);
112
- }
93
+ return lua.createMethodCallExpression(table, lua.createIdentifier(left.name.text, left.name), transformedArguments, node);
113
94
  }
114
95
  else if (ts.isElementAccessExpression(left) || ts.isPropertyAccessExpression(left)) {
115
- if (typescript_1.isExpressionWithEvaluationEffect(left.expression)) {
116
- return transform_1.transformToImmediatelyInvokedFunctionExpression(context, () => transformElementAccessCall(context, left, args, signature), node);
96
+ if ((0, typescript_1.isExpressionWithEvaluationEffect)(left.expression)) {
97
+ return transformElementAccessCall(context, left, transformedArguments, argPrecedingStatements);
117
98
  }
118
99
  else {
119
- const callContext = context.transformExpression(left.expression);
120
- const expression = context.transformExpression(left);
121
- const transformedArguments = transformArguments(context, args, signature);
122
- return lua.createCallExpression(expression, [callContext, ...transformedArguments]);
100
+ let expression;
101
+ [expression, transformedArguments] = transformCallWithArguments(context, left, transformedArguments, argPrecedingStatements, left.expression);
102
+ return lua.createCallExpression(expression, transformedArguments, node);
123
103
  }
124
104
  }
125
105
  else if (ts.isIdentifier(left)) {
126
106
  const callContext = context.isStrict ? ts.factory.createNull() : ts.factory.createIdentifier("_G");
127
- const transformedArguments = transformArguments(context, args, signature, callContext);
128
- const expression = context.transformExpression(left);
107
+ let expression;
108
+ [expression, transformedArguments] = transformCallWithArguments(context, left, transformedArguments, argPrecedingStatements, callContext);
129
109
  return lua.createCallExpression(expression, transformedArguments, node);
130
110
  }
131
111
  else {
@@ -141,76 +121,90 @@ function transformPropertyCall(context, node) {
141
121
  return lua.createCallExpression(context.transformExpression(node.expression), parameters);
142
122
  }
143
123
  const signatureDeclaration = signature === null || signature === void 0 ? void 0 : signature.getDeclaration();
144
- if (!signatureDeclaration || function_context_1.getDeclarationContextType(context, signatureDeclaration) !== function_context_1.ContextType.Void) {
124
+ if (!signatureDeclaration || (0, function_context_1.getDeclarationContextType)(context, signatureDeclaration) !== function_context_1.ContextType.Void) {
145
125
  // table:name()
146
126
  return transformContextualCallExpression(context, node, node.arguments, signature);
147
127
  }
148
128
  else {
149
129
  // table.name()
150
- const callPath = context.transformExpression(node.expression);
151
- const parameters = transformArguments(context, node.arguments, signature);
152
- if (ts.isOptionalChain(node)) {
153
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.OptionalFunctionCall, node, callPath, ...parameters);
154
- }
155
- else {
156
- return lua.createCallExpression(callPath, parameters, node);
157
- }
130
+ const [callPath, parameters] = transformCallAndArguments(context, node.expression, node.arguments, signature);
131
+ return lua.createCallExpression(callPath, parameters, node);
158
132
  }
159
133
  }
160
134
  function transformElementCall(context, node) {
161
135
  const signature = context.checker.getResolvedSignature(node);
162
136
  const signatureDeclaration = signature === null || signature === void 0 ? void 0 : signature.getDeclaration();
163
- if (!signatureDeclaration || function_context_1.getDeclarationContextType(context, signatureDeclaration) !== function_context_1.ContextType.Void) {
137
+ if (!signatureDeclaration || (0, function_context_1.getDeclarationContextType)(context, signatureDeclaration) !== function_context_1.ContextType.Void) {
164
138
  // A contextual parameter must be given to this call expression
165
139
  return transformContextualCallExpression(context, node, node.arguments, signature);
166
140
  }
167
141
  else {
168
142
  // No context
169
- const expression = context.transformExpression(node.expression);
170
- const parameters = transformArguments(context, node.arguments, signature);
143
+ const [expression, parameters] = transformCallAndArguments(context, node.expression, node.arguments, signature);
171
144
  return lua.createCallExpression(expression, parameters);
172
145
  }
173
146
  }
174
147
  const transformCallExpression = (node, context) => {
175
- const wrapResultInTable = multi_1.isMultiReturnCall(context, node) && multi_1.shouldMultiReturnCallBeWrapped(context, node);
176
- const wrapResultInOptional = ts.isOptionalChain(node);
177
- const builtinResult = builtins_1.transformBuiltinCallExpression(context, node);
148
+ if (ts.isOptionalChain(node)) {
149
+ return (0, optional_chaining_1.transformOptionalChain)(context, node);
150
+ }
151
+ const optionalContinuation = ts.isIdentifier(node.expression)
152
+ ? (0, optional_chaining_1.getOptionalContinuationData)(node.expression)
153
+ : undefined;
154
+ const wrapResultInTable = (0, multi_1.isMultiReturnCall)(context, node) && (0, multi_1.shouldMultiReturnCallBeWrapped)(context, node);
155
+ const builtinResult = (0, builtins_1.transformBuiltinCallExpression)(context, node, optionalContinuation !== undefined);
178
156
  if (builtinResult) {
179
- return wrapResultInTable ? lua_ast_1.wrapInTable(builtinResult) : builtinResult;
157
+ if (optionalContinuation) {
158
+ context.diagnostics.push((0, diagnostics_1.unsupportedBuiltinOptionalCall)(node));
159
+ }
160
+ return wrapResultInTable ? (0, lua_ast_1.wrapInTable)(builtinResult) : builtinResult;
180
161
  }
181
- if (annotations_1.isTupleReturnCall(context, node)) {
182
- context.diagnostics.push(diagnostics_1.annotationRemoved(node, annotations_1.AnnotationKind.TupleReturn));
162
+ if ((0, annotations_1.isTupleReturnCall)(context, node)) {
163
+ context.diagnostics.push((0, diagnostics_1.annotationRemoved)(node, annotations_1.AnnotationKind.TupleReturn));
183
164
  }
184
- if (operators_1.isOperatorMapping(context, node)) {
185
- return operators_1.transformOperatorMappingExpression(context, node);
165
+ if ((0, operators_1.isOperatorMapping)(context, node)) {
166
+ if (optionalContinuation) {
167
+ context.diagnostics.push((0, diagnostics_1.unsupportedBuiltinOptionalCall)(node));
168
+ return lua.createNilLiteral();
169
+ }
170
+ return (0, operators_1.transformOperatorMappingExpression)(context, node);
186
171
  }
187
- if (table_1.isTableDeleteCall(context, node)) {
188
- context.diagnostics.push(diagnostics_1.invalidTableDeleteExpression(node));
189
- return transform_1.transformToImmediatelyInvokedFunctionExpression(context, () => ({ statements: table_1.transformTableDeleteExpression(context, node), result: lua.createNilLiteral() }), node);
172
+ if ((0, table_1.isTableDeleteCall)(context, node)) {
173
+ context.diagnostics.push((0, diagnostics_1.invalidTableDeleteExpression)(node));
174
+ context.addPrecedingStatements((0, table_1.transformTableDeleteExpression)(context, node));
175
+ return lua.createNilLiteral();
190
176
  }
191
- if (table_1.isTableGetCall(context, node)) {
192
- return table_1.transformTableGetExpression(context, node);
177
+ if ((0, table_1.isTableGetCall)(context, node)) {
178
+ if (optionalContinuation) {
179
+ context.diagnostics.push((0, diagnostics_1.unsupportedBuiltinOptionalCall)(node));
180
+ return lua.createNilLiteral();
181
+ }
182
+ return (0, table_1.transformTableGetExpression)(context, node);
193
183
  }
194
- if (table_1.isTableHasCall(context, node)) {
195
- return table_1.transformTableHasExpression(context, node);
184
+ if ((0, table_1.isTableHasCall)(context, node)) {
185
+ if (optionalContinuation) {
186
+ context.diagnostics.push((0, diagnostics_1.unsupportedBuiltinOptionalCall)(node));
187
+ return lua.createNilLiteral();
188
+ }
189
+ return (0, table_1.transformTableHasExpression)(context, node);
196
190
  }
197
- if (table_1.isTableSetCall(context, node)) {
198
- context.diagnostics.push(diagnostics_1.invalidTableSetExpression(node));
199
- return transform_1.transformToImmediatelyInvokedFunctionExpression(context, () => ({ statements: table_1.transformTableSetExpression(context, node), result: lua.createNilLiteral() }), node);
191
+ if ((0, table_1.isTableSetCall)(context, node)) {
192
+ context.diagnostics.push((0, diagnostics_1.invalidTableSetExpression)(node));
193
+ context.addPrecedingStatements((0, table_1.transformTableSetExpression)(context, node));
194
+ return lua.createNilLiteral();
200
195
  }
201
196
  if (ts.isPropertyAccessExpression(node.expression)) {
202
197
  const ownerType = context.checker.getTypeAtLocation(node.expression.expression);
203
- const annotations = annotations_1.getTypeAnnotations(ownerType);
198
+ const annotations = (0, annotations_1.getTypeAnnotations)(ownerType);
204
199
  if (annotations.has(annotations_1.AnnotationKind.LuaTable)) {
205
- context.diagnostics.push(diagnostics_1.annotationRemoved(node, annotations_1.AnnotationKind.LuaTable));
200
+ context.diagnostics.push((0, diagnostics_1.annotationRemoved)(node, annotations_1.AnnotationKind.LuaTable));
206
201
  }
207
202
  const result = transformPropertyCall(context, node);
208
- // transformPropertyCall already wraps optional so no need to do so here
209
- return wrapResultInTable ? lua_ast_1.wrapInTable(result) : result;
203
+ return wrapResultInTable ? (0, lua_ast_1.wrapInTable)(result) : result;
210
204
  }
211
205
  if (ts.isElementAccessExpression(node.expression)) {
212
206
  const result = transformElementCall(context, node);
213
- return wrapIfRequired(context, wrapResultInTable, wrapResultInOptional, result, node);
207
+ return wrapResultInTable ? (0, lua_ast_1.wrapInTable)(result) : result;
214
208
  }
215
209
  const signature = context.checker.getResolvedSignature(node);
216
210
  // Handle super calls properly
@@ -218,31 +212,24 @@ const transformCallExpression = (node, context) => {
218
212
  const parameters = transformArguments(context, node.arguments, signature, ts.factory.createThis());
219
213
  return lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), parameters);
220
214
  }
221
- const callPath = context.transformExpression(node.expression);
222
215
  const signatureDeclaration = signature === null || signature === void 0 ? void 0 : signature.getDeclaration();
223
- let parameters = [];
224
- if (signatureDeclaration && function_context_1.getDeclarationContextType(context, signatureDeclaration) === function_context_1.ContextType.Void) {
225
- parameters = transformArguments(context, node.arguments, signature);
216
+ let callPath;
217
+ let parameters;
218
+ const isContextualCall = !signatureDeclaration || (0, function_context_1.getDeclarationContextType)(context, signatureDeclaration) !== function_context_1.ContextType.Void;
219
+ if (!isContextualCall) {
220
+ [callPath, parameters] = transformCallAndArguments(context, node.expression, node.arguments, signature);
226
221
  }
227
222
  else {
228
- const callContext = context.isStrict ? ts.factory.createNull() : ts.factory.createIdentifier("_G");
229
- parameters = transformArguments(context, node.arguments, signature, callContext);
223
+ // if is optionalContinuation, context will be handled by transformOptionalChain.
224
+ const useGlobalContext = !context.isStrict && optionalContinuation === undefined;
225
+ const callContext = useGlobalContext ? ts.factory.createIdentifier("_G") : ts.factory.createNull();
226
+ [callPath, parameters] = transformCallAndArguments(context, node.expression, node.arguments, signature, callContext);
230
227
  }
231
228
  const callExpression = lua.createCallExpression(callPath, parameters, node);
232
- return wrapIfRequired(context, wrapResultInTable, wrapResultInOptional, callExpression, node);
229
+ if (optionalContinuation && isContextualCall) {
230
+ optionalContinuation.contextualCall = callExpression;
231
+ }
232
+ return wrapResultInTable ? (0, lua_ast_1.wrapInTable)(callExpression) : callExpression;
233
233
  };
234
234
  exports.transformCallExpression = transformCallExpression;
235
- function wrapIfRequired(context, shouldWrapInTable, shouldWrapOptional, call, node) {
236
- const wrappedOptional = shouldWrapOptional ? wrapOptionalCall(context, call, node) : call;
237
- return shouldWrapInTable ? lua_ast_1.wrapInTable(wrappedOptional) : wrappedOptional;
238
- }
239
- function wrapOptionalCall(context, call, node) {
240
- if (lua.isMethodCallExpression(call)) {
241
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.OptionalMethodCall, node, call.prefixExpression, lua.createStringLiteral(call.name.text), lua.createBooleanLiteral(node.questionDotToken !== undefined), // Require method is present if no ?.() call
242
- ...call.params);
243
- }
244
- else {
245
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.OptionalFunctionCall, node, call.expression, ...call.params);
246
- }
247
- }
248
235
  //# sourceMappingURL=call.js.map
@@ -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 = export_1.createExportedIdentifier(context, export_1.createDefaultExportIdentifier(declaration));
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
- return transform_1.transformToImmediatelyInvokedFunctionExpression(context, () => {
37
- const { statements, name } = transformClassLikeDeclaration(expression, context);
38
- return { statements: lua_ast_1.unwrapVisitorResult(statements), result: name };
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
- // TypeScript error
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)) {
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;