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
@@ -13,35 +13,36 @@ function createStringCall(methodName, tsOriginal, ...params) {
13
13
  function transformStringPrototypeCall(context, node) {
14
14
  const expression = node.expression;
15
15
  const signature = context.checker.getResolvedSignature(node);
16
- const params = call_1.transformArguments(context, node.arguments, signature);
17
- const caller = context.transformExpression(expression.expression);
16
+ const [caller, params] = (0, call_1.transformCallAndArguments)(context, expression.expression, node.arguments, signature);
18
17
  const expressionName = expression.name.text;
19
18
  switch (expressionName) {
20
19
  case "replace":
21
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringReplace, node, caller, ...params);
20
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringReplace, node, caller, ...params);
21
+ case "replaceAll":
22
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringReplaceAll, node, caller, ...params);
22
23
  case "concat":
23
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringConcat, node, caller, ...params);
24
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringConcat, node, caller, ...params);
24
25
  case "indexOf": {
25
26
  const stringExpression = createStringCall("find", node, caller, params[0], params[1]
26
27
  ? // string.find handles negative indexes by making it relative to string end, but for indexOf it's the same as 0
27
- lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("math"), lua.createStringLiteral("max")), [lua_ast_1.addToNumericExpression(params[1], 1), lua.createNumericLiteral(1)])
28
+ lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("math"), lua.createStringLiteral("max")), [(0, lua_ast_1.addToNumericExpression)(params[1], 1), lua.createNumericLiteral(1)])
28
29
  : lua.createNilLiteral(), lua.createBooleanLiteral(true));
29
30
  return lua.createBinaryExpression(lua.createBinaryExpression(stringExpression, lua.createNumericLiteral(0), lua.SyntaxKind.OrOperator), lua.createNumericLiteral(1), lua.SyntaxKind.SubtractionOperator, node);
30
31
  }
31
32
  case "substr":
32
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringSubstr, node, caller, ...params);
33
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringSubstr, node, caller, ...params);
33
34
  case "substring":
34
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringSubstring, node, caller, ...params);
35
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringSubstring, node, caller, ...params);
35
36
  case "slice": {
36
- const literalArg1 = lua_ast_1.getNumberLiteralValue(params[0]);
37
+ const literalArg1 = (0, lua_ast_1.getNumberLiteralValue)(params[0]);
37
38
  if (params[0] && literalArg1 !== undefined) {
38
39
  let stringSubArgs = [
39
- lua_ast_1.addToNumericExpression(params[0], literalArg1 < 0 ? 0 : 1),
40
+ (0, lua_ast_1.addToNumericExpression)(params[0], literalArg1 < 0 ? 0 : 1),
40
41
  ];
41
42
  if (params[1]) {
42
- const literalArg2 = lua_ast_1.getNumberLiteralValue(params[1]);
43
+ const literalArg2 = (0, lua_ast_1.getNumberLiteralValue)(params[1]);
43
44
  if (literalArg2 !== undefined) {
44
- stringSubArgs.push(lua_ast_1.addToNumericExpression(params[1], literalArg2 < 0 ? -1 : 0));
45
+ stringSubArgs.push((0, lua_ast_1.addToNumericExpression)(params[1], literalArg2 < 0 ? -1 : 0));
45
46
  }
46
47
  else {
47
48
  stringSubArgs = undefined;
@@ -52,69 +53,69 @@ function transformStringPrototypeCall(context, node) {
52
53
  return createStringCall("sub", node, caller, ...stringSubArgs);
53
54
  }
54
55
  }
55
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringSlice, node, caller, ...params);
56
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringSlice, node, caller, ...params);
56
57
  }
57
58
  case "toLowerCase":
58
59
  return createStringCall("lower", node, caller);
59
60
  case "toUpperCase":
60
61
  return createStringCall("upper", node, caller);
61
62
  case "trim":
62
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringTrim, node, caller);
63
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringTrim, node, caller);
63
64
  case "trimEnd":
64
65
  case "trimRight":
65
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringTrimEnd, node, caller);
66
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringTrimEnd, node, caller);
66
67
  case "trimStart":
67
68
  case "trimLeft":
68
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringTrimStart, node, caller);
69
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringTrimStart, node, caller);
69
70
  case "split":
70
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringSplit, node, caller, ...params);
71
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringSplit, node, caller, ...params);
71
72
  case "charAt": {
72
- const literalValue = lua_ast_1.getNumberLiteralValue(params[0]);
73
+ const literalValue = (0, lua_ast_1.getNumberLiteralValue)(params[0]);
73
74
  // Inline string.sub call if we know that parameter is pure and isn't negative
74
75
  if (literalValue !== undefined && literalValue >= 0) {
75
- const firstParamPlusOne = lua_ast_1.addToNumericExpression(params[0], 1);
76
+ const firstParamPlusOne = (0, lua_ast_1.addToNumericExpression)(params[0], 1);
76
77
  return createStringCall("sub", node, caller, firstParamPlusOne, firstParamPlusOne);
77
78
  }
78
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringCharAt, node, caller, ...params);
79
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringCharAt, node, caller, ...params);
79
80
  }
80
81
  case "charCodeAt": {
81
- const literalValue = lua_ast_1.getNumberLiteralValue(params[0]);
82
+ const literalValue = (0, lua_ast_1.getNumberLiteralValue)(params[0]);
82
83
  // Inline string.sub call if we know that parameter is pure and isn't negative
83
84
  if (literalValue !== undefined && literalValue >= 0) {
84
- return lua.createBinaryExpression(createStringCall("byte", node, caller, lua_ast_1.addToNumericExpression(params[0], 1)), lua_ast_1.createNaN(), lua.SyntaxKind.OrOperator);
85
+ return lua.createBinaryExpression(createStringCall("byte", node, caller, (0, lua_ast_1.addToNumericExpression)(params[0], 1)), (0, lua_ast_1.createNaN)(), lua.SyntaxKind.OrOperator);
85
86
  }
86
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringCharCodeAt, node, caller, ...params);
87
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringCharCodeAt, node, caller, ...params);
87
88
  }
88
89
  case "startsWith":
89
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringStartsWith, node, caller, ...params);
90
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringStartsWith, node, caller, ...params);
90
91
  case "endsWith":
91
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringEndsWith, node, caller, ...params);
92
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringEndsWith, node, caller, ...params);
92
93
  case "includes":
93
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringIncludes, node, caller, ...params);
94
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringIncludes, node, caller, ...params);
94
95
  case "repeat":
95
96
  const math = lua.createIdentifier("math");
96
97
  const floor = lua.createStringLiteral("floor");
97
98
  const parameter = lua.createCallExpression(lua.createTableIndexExpression(math, floor), [params[0]]);
98
99
  return createStringCall("rep", node, caller, parameter);
99
100
  case "padStart":
100
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringPadStart, node, caller, ...params);
101
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringPadStart, node, caller, ...params);
101
102
  case "padEnd":
102
- return lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.StringPadEnd, node, caller, ...params);
103
+ return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.StringPadEnd, node, caller, ...params);
103
104
  default:
104
- context.diagnostics.push(diagnostics_1.unsupportedProperty(expression.name, "string", expressionName));
105
+ context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(expression.name, "string", expressionName));
105
106
  }
106
107
  }
107
108
  exports.transformStringPrototypeCall = transformStringPrototypeCall;
108
109
  function transformStringConstructorCall(context, node) {
109
110
  const expression = node.expression;
110
111
  const signature = context.checker.getResolvedSignature(node);
111
- const params = call_1.transformArguments(context, node.arguments, signature);
112
+ const params = (0, call_1.transformArguments)(context, node.arguments, signature);
112
113
  const expressionName = expression.name.text;
113
114
  switch (expressionName) {
114
115
  case "fromCharCode":
115
116
  return lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("string"), lua.createStringLiteral("char")), params, node);
116
117
  default:
117
- context.diagnostics.push(diagnostics_1.unsupportedProperty(expression.name, "String", expressionName));
118
+ context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(expression.name, "String", expressionName));
118
119
  }
119
120
  }
120
121
  exports.transformStringConstructorCall = transformStringConstructorCall;
@@ -124,7 +125,7 @@ function transformStringProperty(context, node) {
124
125
  const expression = context.transformExpression(node.expression);
125
126
  return lua.createUnaryExpression(expression, lua.SyntaxKind.LengthOperator, node);
126
127
  default:
127
- context.diagnostics.push(diagnostics_1.unsupportedProperty(node.name, "string", node.name.text));
128
+ context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(node.name, "string", node.name.text));
128
129
  }
129
130
  }
130
131
  exports.transformStringProperty = transformStringProperty;
@@ -8,17 +8,17 @@ const call_1 = require("../visitors/call");
8
8
  function transformSymbolConstructorCall(context, expression) {
9
9
  const method = expression.expression;
10
10
  const signature = context.checker.getResolvedSignature(expression);
11
- const parameters = call_1.transformArguments(context, expression.arguments, signature);
11
+ const parameters = (0, call_1.transformArguments)(context, expression.arguments, signature);
12
12
  const methodName = method.name.text;
13
13
  switch (methodName) {
14
14
  case "for":
15
15
  case "keyFor":
16
- lualib_1.importLuaLibFeature(context, lualib_1.LuaLibFeature.SymbolRegistry);
16
+ (0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.SymbolRegistry);
17
17
  const upperMethodName = methodName[0].toUpperCase() + methodName.slice(1);
18
18
  const functionIdentifier = lua.createIdentifier(`__TS__SymbolRegistry${upperMethodName}`);
19
19
  return lua.createCallExpression(functionIdentifier, parameters, expression);
20
20
  default:
21
- context.diagnostics.push(diagnostics_1.unsupportedProperty(method.name, "Symbol", methodName));
21
+ context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(method.name, "Symbol", methodName));
22
22
  }
23
23
  }
24
24
  exports.transformSymbolConstructorCall = transformSymbolConstructorCall;
@@ -2,6 +2,7 @@ import * as ts from "typescript";
2
2
  import { CompilerOptions, LuaTarget } from "../../CompilerOptions";
3
3
  import * as lua from "../../LuaAST";
4
4
  import { ExpressionLikeNode, StatementLikeNode, VisitorMap } from "./visitors";
5
+ export declare const tempSymbolId: lua.SymbolId;
5
6
  export interface AllAccessorDeclarations {
6
7
  firstAccessor: ts.AccessorDeclaration;
7
8
  secondAccessor: ts.AccessorDeclaration | undefined;
@@ -25,16 +26,27 @@ export declare class TransformationContext {
25
26
  readonly diagnostics: ts.Diagnostic[];
26
27
  readonly checker: DiagnosticsProducingTypeChecker;
27
28
  readonly resolver: EmitResolver;
29
+ readonly precedingStatementsStack: lua.Statement[][];
28
30
  readonly options: CompilerOptions;
29
31
  readonly luaTarget: LuaTarget;
30
32
  readonly isModule: boolean;
31
33
  readonly isStrict: boolean;
32
34
  constructor(program: ts.Program, sourceFile: ts.SourceFile, visitorMap: VisitorMap);
33
35
  private currentNodeVisitors;
36
+ private nextTempId;
34
37
  transformNode(node: ts.Node): lua.Node[];
35
38
  superTransformNode(node: ts.Node): lua.Node[];
36
39
  transformExpression(node: ExpressionLikeNode): lua.Expression;
37
40
  superTransformExpression(node: ExpressionLikeNode): lua.Expression;
38
41
  transformStatements(node: StatementLikeNode | readonly StatementLikeNode[]): lua.Statement[];
39
42
  superTransformStatements(node: StatementLikeNode | readonly StatementLikeNode[]): lua.Statement[];
43
+ pushPrecedingStatements(): void;
44
+ popPrecedingStatements(): lua.Statement[];
45
+ addPrecedingStatements(statements: lua.Statement | lua.Statement[]): void;
46
+ prependPrecedingStatements(statements: lua.Statement | lua.Statement[]): void;
47
+ createTempName(prefix?: string): string;
48
+ private getTempNameForLuaExpression;
49
+ createTempNameForLuaExpression(expression: lua.Expression): lua.Identifier;
50
+ private getTempNameForNode;
51
+ createTempNameForNode(node: ts.Node): lua.Identifier;
40
52
  }
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransformationContext = void 0;
3
+ exports.TransformationContext = exports.tempSymbolId = void 0;
4
4
  const ts = require("typescript");
5
5
  const CompilerOptions_1 = require("../../CompilerOptions");
6
6
  const lua = require("../../LuaAST");
7
7
  const utils_1 = require("../../utils");
8
8
  const diagnostics_1 = require("../utils/diagnostics");
9
9
  const lua_ast_1 = require("../utils/lua-ast");
10
+ const safe_names_1 = require("../utils/safe-names");
11
+ exports.tempSymbolId = -1;
10
12
  class TransformationContext {
11
13
  constructor(program, sourceFile, visitorMap) {
12
14
  var _a, _b, _c;
@@ -15,12 +17,14 @@ class TransformationContext {
15
17
  this.visitorMap = visitorMap;
16
18
  this.diagnostics = [];
17
19
  this.checker = this.program.getDiagnosticsProducingTypeChecker();
20
+ this.precedingStatementsStack = [];
18
21
  this.options = this.program.getCompilerOptions();
19
22
  this.luaTarget = (_a = this.options.luaTarget) !== null && _a !== void 0 ? _a : CompilerOptions_1.LuaTarget.Universal;
20
23
  this.isModule = ts.isExternalModule(this.sourceFile);
21
24
  this.isStrict = ((_b = this.options.alwaysStrict) !== null && _b !== void 0 ? _b : this.options.strict) ||
22
25
  (this.isModule && this.options.target !== undefined && this.options.target >= ts.ScriptTarget.ES2015);
23
26
  this.currentNodeVisitors = [];
27
+ this.nextTempId = 0;
24
28
  // Use `getParseTreeNode` to get original SourceFile node, before it was substituted by custom transformers.
25
29
  // It's required because otherwise `getEmitResolver` won't use cached diagnostics, produced in `emitWorker`
26
30
  // and would try to re-analyze the file, which would fail because of replaced nodes.
@@ -35,13 +39,13 @@ class TransformationContext {
35
39
  }
36
40
  const nodeVisitors = this.visitorMap.get(node.kind);
37
41
  if (!nodeVisitors || nodeVisitors.length === 0) {
38
- this.diagnostics.push(diagnostics_1.unsupportedNodeKind(node, node.kind));
42
+ this.diagnostics.push((0, diagnostics_1.unsupportedNodeKind)(node, node.kind));
39
43
  return isExpression ? [lua.createNilLiteral()] : [];
40
44
  }
41
45
  const previousNodeVisitors = this.currentNodeVisitors;
42
46
  this.currentNodeVisitors = [...nodeVisitors];
43
47
  const visitor = this.currentNodeVisitors.pop();
44
- const result = lua_ast_1.unwrapVisitorResult(visitor.transform(node, this));
48
+ const result = (0, lua_ast_1.unwrapVisitorResult)(visitor.transform(node, this));
45
49
  this.currentNodeVisitors = previousNodeVisitors;
46
50
  return result;
47
51
  }
@@ -50,7 +54,7 @@ class TransformationContext {
50
54
  throw new Error(`There is no super transform for ${ts.SyntaxKind[node.kind]} visitor`);
51
55
  }
52
56
  const visitor = this.currentNodeVisitors.pop();
53
- return lua_ast_1.unwrapVisitorResult(visitor.transform(node, this));
57
+ return (0, lua_ast_1.unwrapVisitorResult)(visitor.transform(node, this));
54
58
  }
55
59
  transformExpression(node) {
56
60
  const [result] = this.transformNode(node, true);
@@ -67,10 +71,105 @@ class TransformationContext {
67
71
  return result;
68
72
  }
69
73
  transformStatements(node) {
70
- return utils_1.castArray(node).flatMap(n => this.transformNode(n));
74
+ return (0, utils_1.castArray)(node).flatMap(n => {
75
+ this.pushPrecedingStatements();
76
+ const statements = this.transformNode(n);
77
+ statements.unshift(...this.popPrecedingStatements());
78
+ return statements;
79
+ });
71
80
  }
72
81
  superTransformStatements(node) {
73
- return utils_1.castArray(node).flatMap(n => this.superTransformNode(n));
82
+ return (0, utils_1.castArray)(node).flatMap(n => {
83
+ this.pushPrecedingStatements();
84
+ const statements = this.superTransformNode(n);
85
+ statements.unshift(...this.popPrecedingStatements());
86
+ return statements;
87
+ });
88
+ }
89
+ pushPrecedingStatements() {
90
+ this.precedingStatementsStack.push([]);
91
+ }
92
+ popPrecedingStatements() {
93
+ const precedingStatements = this.precedingStatementsStack.pop();
94
+ (0, utils_1.assert)(precedingStatements);
95
+ return precedingStatements;
96
+ }
97
+ addPrecedingStatements(statements) {
98
+ const precedingStatements = this.precedingStatementsStack[this.precedingStatementsStack.length - 1];
99
+ (0, utils_1.assert)(precedingStatements);
100
+ if (!Array.isArray(statements)) {
101
+ statements = [statements];
102
+ }
103
+ precedingStatements.push(...statements);
104
+ }
105
+ prependPrecedingStatements(statements) {
106
+ const precedingStatements = this.precedingStatementsStack[this.precedingStatementsStack.length - 1];
107
+ (0, utils_1.assert)(precedingStatements);
108
+ if (!Array.isArray(statements)) {
109
+ statements = [statements];
110
+ }
111
+ precedingStatements.unshift(...statements);
112
+ }
113
+ createTempName(prefix = "temp") {
114
+ prefix = prefix.replace(/^_*/, ""); // Strip leading underscores because createSafeName will add them again
115
+ return (0, safe_names_1.createSafeName)(`${prefix}_${this.nextTempId++}`);
116
+ }
117
+ getTempNameForLuaExpression(expression) {
118
+ if (lua.isStringLiteral(expression)) {
119
+ return expression.value;
120
+ }
121
+ else if (lua.isNumericLiteral(expression)) {
122
+ return `_${expression.value.toString()}`;
123
+ }
124
+ else if (lua.isIdentifier(expression)) {
125
+ return expression.text;
126
+ }
127
+ else if (lua.isCallExpression(expression)) {
128
+ const name = this.getTempNameForLuaExpression(expression.expression);
129
+ if (name) {
130
+ return `${name}_result`;
131
+ }
132
+ }
133
+ else if (lua.isTableIndexExpression(expression)) {
134
+ const tableName = this.getTempNameForLuaExpression(expression.table);
135
+ const indexName = this.getTempNameForLuaExpression(expression.index);
136
+ if (tableName || indexName) {
137
+ return `${tableName !== null && tableName !== void 0 ? tableName : "table"}_${indexName !== null && indexName !== void 0 ? indexName : "index"}`;
138
+ }
139
+ }
140
+ }
141
+ createTempNameForLuaExpression(expression) {
142
+ const name = this.getTempNameForLuaExpression(expression);
143
+ const identifier = lua.createIdentifier(this.createTempName(name), undefined, exports.tempSymbolId);
144
+ lua.setNodePosition(identifier, lua.getOriginalPos(expression));
145
+ return identifier;
146
+ }
147
+ getTempNameForNode(node) {
148
+ if (ts.isStringLiteral(node) || ts.isIdentifier(node) || ts.isMemberName(node)) {
149
+ return node.text;
150
+ }
151
+ else if (ts.isNumericLiteral(node)) {
152
+ return `_${node.text}`;
153
+ }
154
+ else if (ts.isCallExpression(node)) {
155
+ const name = this.getTempNameForNode(node.expression);
156
+ if (name) {
157
+ return `${name}_result`;
158
+ }
159
+ }
160
+ else if (ts.isElementAccessExpression(node) || ts.isPropertyAccessExpression(node)) {
161
+ const tableName = this.getTempNameForNode(node.expression);
162
+ const indexName = ts.isElementAccessExpression(node)
163
+ ? this.getTempNameForNode(node.argumentExpression)
164
+ : node.name.text;
165
+ if (tableName || indexName) {
166
+ return `${tableName !== null && tableName !== void 0 ? tableName : "table"}_${indexName !== null && indexName !== void 0 ? indexName : "index"}`;
167
+ }
168
+ }
169
+ }
170
+ createTempNameForNode(node) {
171
+ const name = this.getTempNameForNode(node);
172
+ return lua.createIdentifier(this.createTempName(name), node, exports.tempSymbolId);
74
173
  }
75
174
  }
76
175
  exports.TransformationContext = TransformationContext;
@@ -12,7 +12,7 @@ function createVisitorMap(customVisitors) {
12
12
  if (!visitor)
13
13
  continue;
14
14
  const syntaxKind = Number(syntaxKindKey);
15
- const nodeVisitors = utils_1.getOrUpdate(visitorMap, syntaxKind, () => []);
15
+ const nodeVisitors = (0, utils_1.getOrUpdate)(visitorMap, syntaxKind, () => []);
16
16
  const objectVisitor = typeof visitor === "function" ? { transform: visitor, priority } : visitor;
17
17
  nodeVisitors.push(objectVisitor);
18
18
  }
@@ -14,9 +14,7 @@ export declare enum AnnotationKind {
14
14
  NoSelf = "noSelf",
15
15
  NoSelfInFile = "noSelfInFile",
16
16
  Vararg = "vararg",
17
- ForRange = "forRange",
18
- Jsx = "jsx",
19
- JsxFrag = "jsxFrag"
17
+ ForRange = "forRange"
20
18
  }
21
19
  export interface Annotation {
22
20
  kind: AnnotationKind;
@@ -18,8 +18,6 @@ var AnnotationKind;
18
18
  AnnotationKind["NoSelfInFile"] = "noSelfInFile";
19
19
  AnnotationKind["Vararg"] = "vararg";
20
20
  AnnotationKind["ForRange"] = "forRange";
21
- AnnotationKind["Jsx"] = "jsx";
22
- AnnotationKind["JsxFrag"] = "jsxFrag";
23
21
  })(AnnotationKind = exports.AnnotationKind || (exports.AnnotationKind = {}));
24
22
  function createAnnotation(name, args) {
25
23
  const kind = Object.values(AnnotationKind).find(k => k.toLowerCase() === name.toLowerCase());
@@ -16,7 +16,7 @@ function validateAssignment(context, node, fromType, toType, toName) {
16
16
  return;
17
17
  }
18
18
  // Use cache to avoid repeating check for same types (protects against infinite loop in recursive types)
19
- const fromTypeCache = utils_1.getOrUpdate(typeValidationCache, fromType, () => new Set());
19
+ const fromTypeCache = (0, utils_1.getOrUpdate)(typeValidationCache, fromType, () => new Set());
20
20
  if (fromTypeCache.has(toType))
21
21
  return;
22
22
  fromTypeCache.add(toType);
@@ -40,7 +40,8 @@ function validateAssignment(context, node, fromType, toType, toName) {
40
40
  }
41
41
  }
42
42
  if ((toType.flags & ts.TypeFlags.Object) !== 0 &&
43
- (toType.objectFlags & ts.ObjectFlags.ClassOrInterface) !== 0 &&
43
+ (ts.isTypeLiteralNode(toTypeNode) ||
44
+ (toType.objectFlags & ts.ObjectFlags.ClassOrInterface) !== 0) &&
44
45
  toType.symbol &&
45
46
  toType.symbol.members &&
46
47
  fromType.symbol &&
@@ -61,15 +62,15 @@ function validateAssignment(context, node, fromType, toType, toName) {
61
62
  }
62
63
  exports.validateAssignment = validateAssignment;
63
64
  function validateFunctionAssignment(context, node, fromType, toType, toName) {
64
- const fromContext = function_context_1.getFunctionContextType(context, fromType);
65
- const toContext = function_context_1.getFunctionContextType(context, toType);
65
+ const fromContext = (0, function_context_1.getFunctionContextType)(context, fromType);
66
+ const toContext = (0, function_context_1.getFunctionContextType)(context, toType);
66
67
  if (fromContext === function_context_1.ContextType.Mixed || toContext === function_context_1.ContextType.Mixed) {
67
- context.diagnostics.push(diagnostics_1.unsupportedOverloadAssignment(node, toName));
68
+ context.diagnostics.push((0, diagnostics_1.unsupportedOverloadAssignment)(node, toName));
68
69
  }
69
70
  else if (fromContext !== toContext && fromContext !== function_context_1.ContextType.None && toContext !== function_context_1.ContextType.None) {
70
71
  context.diagnostics.push(toContext === function_context_1.ContextType.Void
71
- ? diagnostics_1.unsupportedNoSelfFunctionConversion(node, toName)
72
- : diagnostics_1.unsupportedSelfFunctionConversion(node, toName));
72
+ ? (0, diagnostics_1.unsupportedNoSelfFunctionConversion)(node, toName)
73
+ : (0, diagnostics_1.unsupportedSelfFunctionConversion)(node, toName));
73
74
  }
74
75
  }
75
76
  //# sourceMappingURL=assignment-validation.js.map
@@ -91,3 +91,9 @@ export declare const notAllowedOptionalAssignment: ((node: ts.Node, ...args: any
91
91
  export declare const awaitMustBeInAsyncFunction: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
92
92
  code: number;
93
93
  };
94
+ export declare const unsupportedBuiltinOptionalCall: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
95
+ code: number;
96
+ };
97
+ export declare const unsupportedOptionalCompileMembersOnly: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
98
+ code: number;
99
+ };
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.awaitMustBeInAsyncFunction = exports.notAllowedOptionalAssignment = exports.annotationDeprecated = exports.annotationRemoved = exports.invalidTableSetExpression = exports.invalidTableDeleteExpression = exports.invalidTableExtensionUse = exports.invalidOperatorMappingUse = exports.invalidMultiReturnAccess = exports.invalidMultiTypeToEmptyPatternOrArrayLiteral = exports.invalidMultiTypeToNonArrayLiteral = exports.invalidMultiFunctionReturnType = exports.invalidMultiFunctionUse = exports.unsupportedVarDeclaration = exports.invalidAmbientIdentifierName = exports.unsupportedProperty = exports.unsupportedForTarget = exports.unsupportedRightShiftOperator = exports.unsupportedAccessorInObjectLiteral = exports.invalidMultiIterableWithoutDestructuring = exports.invalidRangeControlVariable = exports.invalidVarargUse = exports.invalidRangeUse = exports.annotationInvalidArgumentCount = exports.decoratorInvalidContext = exports.unsupportedOverloadAssignment = exports.unsupportedSelfFunctionConversion = exports.unsupportedNoSelfFunctionConversion = exports.forbiddenForIn = exports.unsupportedNodeKind = void 0;
3
+ exports.unsupportedOptionalCompileMembersOnly = exports.unsupportedBuiltinOptionalCall = exports.awaitMustBeInAsyncFunction = exports.notAllowedOptionalAssignment = exports.annotationDeprecated = exports.annotationRemoved = exports.invalidTableSetExpression = exports.invalidTableDeleteExpression = exports.invalidTableExtensionUse = exports.invalidOperatorMappingUse = exports.invalidMultiReturnAccess = exports.invalidMultiTypeToEmptyPatternOrArrayLiteral = exports.invalidMultiTypeToNonArrayLiteral = exports.invalidMultiFunctionReturnType = exports.invalidMultiFunctionUse = exports.unsupportedVarDeclaration = exports.invalidAmbientIdentifierName = exports.unsupportedProperty = exports.unsupportedForTarget = exports.unsupportedRightShiftOperator = exports.unsupportedAccessorInObjectLiteral = exports.invalidMultiIterableWithoutDestructuring = exports.invalidRangeControlVariable = exports.invalidVarargUse = exports.invalidRangeUse = exports.annotationInvalidArgumentCount = exports.decoratorInvalidContext = exports.unsupportedOverloadAssignment = exports.unsupportedSelfFunctionConversion = exports.unsupportedNoSelfFunctionConversion = exports.forbiddenForIn = exports.unsupportedNodeKind = void 0;
4
4
  const ts = require("typescript");
5
5
  const CompilerOptions_1 = require("../../CompilerOptions");
6
6
  const utils_1 = require("../../utils");
7
- const createDiagnosticFactory = (category, message) => utils_1.createSerialDiagnosticFactory((node, ...args) => ({
8
- file: node.getSourceFile(),
9
- start: node.getStart(),
10
- length: node.getWidth(),
7
+ const createDiagnosticFactory = (category, message) => (0, utils_1.createSerialDiagnosticFactory)((node, ...args) => ({
8
+ file: ts.getOriginalNode(node).getSourceFile(),
9
+ start: ts.getOriginalNode(node).getStart(),
10
+ length: ts.getOriginalNode(node).getWidth(),
11
11
  messageText: typeof message === "string" ? message : message(...args),
12
12
  category,
13
13
  }));
@@ -58,4 +58,6 @@ exports.annotationDeprecated = createWarningDiagnosticFactory((kind) => `'@${kin
58
58
  `See https://typescripttolua.github.io/docs/advanced/compiler-annotations#${kind.toLowerCase()} for more information.`);
59
59
  exports.notAllowedOptionalAssignment = createErrorDiagnosticFactory("The left-hand side of an assignment expression may not be an optional property access.");
60
60
  exports.awaitMustBeInAsyncFunction = createErrorDiagnosticFactory("Await can only be used inside async functions.");
61
+ exports.unsupportedBuiltinOptionalCall = createErrorDiagnosticFactory("Optional calls are not supported for builtin or language extension functions.");
62
+ exports.unsupportedOptionalCompileMembersOnly = createErrorDiagnosticFactory("Optional calls are not supported on enums marked with @compileMembersOnly.");
61
63
  //# sourceMappingURL=diagnostics.js.map
@@ -2,8 +2,8 @@ import * as ts from "typescript";
2
2
  import * as lua from "../../LuaAST";
3
3
  import { TransformationContext } from "../context";
4
4
  export declare function hasDefaultExportModifier(node: ts.Node): boolean;
5
- export declare const createDefaultExportIdentifier: (original: ts.Node) => lua.Identifier;
6
- export declare const createDefaultExportStringLiteral: (original: ts.Node) => lua.StringLiteral;
5
+ export declare function hasExportModifier(node: ts.Node): boolean;
6
+ export declare const createDefaultExportStringLiteral: (original?: ts.Node | undefined) => lua.StringLiteral;
7
7
  export declare function getExportedSymbolDeclaration(symbol: ts.Symbol): ts.Declaration | undefined;
8
8
  export declare function getSymbolFromIdentifier(context: TransformationContext, identifier: lua.Identifier): ts.Symbol | undefined;
9
9
  export declare function getIdentifierExportScope(context: TransformationContext, identifier: lua.Identifier): ts.SourceFile | ts.ModuleDeclaration | undefined;
@@ -14,3 +14,4 @@ export declare function isSymbolExported(context: TransformationContext, symbol:
14
14
  export declare function isSymbolExportedFromScope(context: TransformationContext, symbol: ts.Symbol, scope: ts.SourceFile | ts.ModuleDeclaration): boolean;
15
15
  export declare function addExportToIdentifier(context: TransformationContext, identifier: lua.Identifier): lua.AssignmentLeftHandSideExpression;
16
16
  export declare function createExportedIdentifier(context: TransformationContext, identifier: lua.Identifier, exportScope?: ts.SourceFile | ts.ModuleDeclaration): lua.AssignmentLeftHandSideExpression;
17
+ export declare function createDefaultExportExpression(node: ts.Node): lua.AssignmentLeftHandSideExpression;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createExportedIdentifier = exports.addExportToIdentifier = exports.isSymbolExportedFromScope = exports.isSymbolExported = exports.getDependenciesOfSymbol = exports.getExportedSymbolsFromScope = exports.getSymbolExportScope = exports.getIdentifierExportScope = exports.getSymbolFromIdentifier = exports.getExportedSymbolDeclaration = exports.createDefaultExportStringLiteral = exports.createDefaultExportIdentifier = exports.hasDefaultExportModifier = void 0;
3
+ exports.createDefaultExportExpression = exports.createExportedIdentifier = exports.addExportToIdentifier = exports.isSymbolExportedFromScope = exports.isSymbolExported = exports.getDependenciesOfSymbol = exports.getExportedSymbolsFromScope = exports.getSymbolExportScope = exports.getIdentifierExportScope = exports.getSymbolFromIdentifier = exports.getExportedSymbolDeclaration = exports.createDefaultExportStringLiteral = exports.hasExportModifier = exports.hasDefaultExportModifier = void 0;
4
4
  const ts = require("typescript");
5
5
  const lua = require("../../LuaAST");
6
6
  const namespace_1 = require("../visitors/namespace");
@@ -12,8 +12,11 @@ function hasDefaultExportModifier(node) {
12
12
  return ((_a = node.modifiers) !== null && _a !== void 0 ? _a : []).some(modifier => modifier.kind === ts.SyntaxKind.DefaultKeyword);
13
13
  }
14
14
  exports.hasDefaultExportModifier = hasDefaultExportModifier;
15
- const createDefaultExportIdentifier = (original) => lua.createIdentifier("default", original);
16
- exports.createDefaultExportIdentifier = createDefaultExportIdentifier;
15
+ function hasExportModifier(node) {
16
+ var _a;
17
+ return ((_a = node.modifiers) !== null && _a !== void 0 ? _a : []).some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword);
18
+ }
19
+ exports.hasExportModifier = hasExportModifier;
17
20
  const createDefaultExportStringLiteral = (original) => lua.createStringLiteral("default", original);
18
21
  exports.createDefaultExportStringLiteral = createDefaultExportStringLiteral;
19
22
  function getExportedSymbolDeclaration(symbol) {
@@ -25,7 +28,7 @@ function getExportedSymbolDeclaration(symbol) {
25
28
  exports.getExportedSymbolDeclaration = getExportedSymbolDeclaration;
26
29
  function getSymbolFromIdentifier(context, identifier) {
27
30
  if (identifier.symbolId !== undefined) {
28
- const symbolInfo = symbols_1.getSymbolInfo(context, identifier.symbolId);
31
+ const symbolInfo = (0, symbols_1.getSymbolInfo)(context, identifier.symbolId);
29
32
  if (symbolInfo !== undefined) {
30
33
  return symbolInfo.symbol;
31
34
  }
@@ -48,7 +51,7 @@ function getSymbolExportScope(context, symbol) {
48
51
  if (!exportedDeclaration) {
49
52
  return undefined;
50
53
  }
51
- const scope = typescript_1.findFirstNodeAbove(exportedDeclaration, (n) => ts.isSourceFile(n) || ts.isModuleDeclaration(n));
54
+ const scope = (0, typescript_1.findFirstNodeAbove)(exportedDeclaration, (n) => ts.isSourceFile(n) || ts.isModuleDeclaration(n));
52
55
  if (!scope) {
53
56
  return undefined;
54
57
  }
@@ -98,9 +101,13 @@ function createExportedIdentifier(context, identifier, exportScope) {
98
101
  return identifier;
99
102
  }
100
103
  const exportTable = exportScope && ts.isModuleDeclaration(exportScope)
101
- ? namespace_1.createModuleLocalNameIdentifier(context, exportScope)
102
- : lua_ast_1.createExportsIdentifier();
104
+ ? (0, namespace_1.createModuleLocalNameIdentifier)(context, exportScope)
105
+ : (0, lua_ast_1.createExportsIdentifier)();
103
106
  return lua.createTableIndexExpression(exportTable, lua.createStringLiteral(identifier.text));
104
107
  }
105
108
  exports.createExportedIdentifier = createExportedIdentifier;
109
+ function createDefaultExportExpression(node) {
110
+ return lua.createTableIndexExpression((0, lua_ast_1.createExportsIdentifier)(), (0, exports.createDefaultExportStringLiteral)(node), node);
111
+ }
112
+ exports.createDefaultExportExpression = createDefaultExportExpression;
106
113
  //# sourceMappingURL=export.js.map
@@ -12,14 +12,14 @@ var ContextType;
12
12
  ContextType[ContextType["Mixed"] = 3] = "Mixed";
13
13
  })(ContextType = exports.ContextType || (exports.ContextType = {}));
14
14
  function hasNoSelfAncestor(declaration) {
15
- const scopeDeclaration = typescript_1.findFirstNodeAbove(declaration, (node) => ts.isSourceFile(node) || ts.isModuleDeclaration(node));
15
+ const scopeDeclaration = (0, typescript_1.findFirstNodeAbove)(declaration, (node) => ts.isSourceFile(node) || ts.isModuleDeclaration(node));
16
16
  if (!scopeDeclaration) {
17
17
  return false;
18
18
  }
19
19
  else if (ts.isSourceFile(scopeDeclaration)) {
20
- return annotations_1.getFileAnnotations(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelfInFile);
20
+ return (0, annotations_1.getFileAnnotations)(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelfInFile);
21
21
  }
22
- else if (annotations_1.getNodeAnnotations(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
22
+ else if ((0, annotations_1.getNodeAnnotations)(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
23
23
  return true;
24
24
  }
25
25
  else {
@@ -38,7 +38,7 @@ function getDeclarationContextType({ program }, signatureDeclaration) {
38
38
  : ContextType.NonVoid;
39
39
  }
40
40
  // noSelf declaration on function signature
41
- if (annotations_1.getNodeAnnotations(signatureDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
41
+ if ((0, annotations_1.getNodeAnnotations)(signatureDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
42
42
  return ContextType.Void;
43
43
  }
44
44
  if (ts.isMethodSignature(signatureDeclaration) ||
@@ -48,11 +48,11 @@ function getDeclarationContextType({ program }, signatureDeclaration) {
48
48
  (signatureDeclaration.parent && ts.isPropertyDeclaration(signatureDeclaration.parent)) ||
49
49
  (signatureDeclaration.parent && ts.isPropertySignature(signatureDeclaration.parent))) {
50
50
  // Class/interface methods only respect @noSelf on their parent
51
- const scopeDeclaration = typescript_1.findFirstNodeAbove(signatureDeclaration, (n) => ts.isClassDeclaration(n) || ts.isClassExpression(n) || ts.isInterfaceDeclaration(n));
51
+ const scopeDeclaration = (0, typescript_1.findFirstNodeAbove)(signatureDeclaration, (n) => ts.isClassDeclaration(n) || ts.isClassExpression(n) || ts.isInterfaceDeclaration(n));
52
52
  if (scopeDeclaration === undefined) {
53
53
  return ContextType.NonVoid;
54
54
  }
55
- if (annotations_1.getNodeAnnotations(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
55
+ if ((0, annotations_1.getNodeAnnotations)(scopeDeclaration).has(annotations_1.AnnotationKind.NoSelf)) {
56
56
  return ContextType.Void;
57
57
  }
58
58
  return ContextType.NonVoid;
@@ -98,10 +98,10 @@ function getSignatureDeclarations(context, signatures) {
98
98
  else if ((ts.isFunctionExpression(signatureDeclaration) || ts.isArrowFunction(signatureDeclaration)) &&
99
99
  !getExplicitThisParameter(signatureDeclaration)) {
100
100
  // Infer type of function expressions/arrow functions
101
- inferredType = typescript_1.inferAssignedType(context, signatureDeclaration);
101
+ inferredType = (0, typescript_1.inferAssignedType)(context, signatureDeclaration);
102
102
  }
103
103
  if (inferredType) {
104
- const inferredSignatures = typescript_1.getAllCallSignatures(inferredType);
104
+ const inferredSignatures = (0, typescript_1.getAllCallSignatures)(inferredType);
105
105
  if (inferredSignatures.length > 0) {
106
106
  return inferredSignatures.map(s => s.getDeclaration());
107
107
  }
@@ -7,7 +7,6 @@ export declare function createSelfIdentifier(tsOriginal?: ts.Node): lua.Identifi
7
7
  export declare function createExportsIdentifier(): lua.Identifier;
8
8
  export declare function addToNumericExpression(expression: lua.Expression, change: number): lua.Expression;
9
9
  export declare function getNumberLiteralValue(expression?: lua.Expression): number | undefined;
10
- export declare function createImmediatelyInvokedFunctionExpression(statements: lua.Statement[], result: lua.Expression | lua.Expression[], tsOriginal?: ts.Node): lua.CallExpression;
11
10
  export declare function createUnpackCall(context: TransformationContext, expression: lua.Expression, tsOriginal?: ts.Node): lua.Expression;
12
11
  export declare function wrapInTable(...expressions: lua.Expression[]): lua.TableExpression;
13
12
  export declare function wrapInToStringForConcat(expression: lua.Expression): lua.Expression;