typescript-to-lua 1.0.1 → 1.3.0

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