ticbuild 1.0.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 (290) hide show
  1. package/.attachments/support_me_on_kofi_beige.png +0 -0
  2. package/.env.example +3 -0
  3. package/.prettierignore +10 -0
  4. package/LICENSE +15 -0
  5. package/README.md +429 -0
  6. package/debug/obj/resolvedManifest.ticbuild.jsonc +108 -0
  7. package/dist/backend/ImportedResource.d.ts +11 -0
  8. package/dist/backend/ImportedResource.d.ts.map +1 -0
  9. package/dist/backend/ImportedResource.js +53 -0
  10. package/dist/backend/ImportedResource.js.map +1 -0
  11. package/dist/backend/ImportedResourceTypes.d.ts +24 -0
  12. package/dist/backend/ImportedResourceTypes.d.ts.map +1 -0
  13. package/dist/backend/ImportedResourceTypes.js +35 -0
  14. package/dist/backend/ImportedResourceTypes.js.map +1 -0
  15. package/dist/backend/codeBanking.test.d.ts +2 -0
  16. package/dist/backend/codeBanking.test.d.ts.map +1 -0
  17. package/dist/backend/codeBanking.test.js.map +1 -0
  18. package/dist/backend/importResources.d.ts +4 -0
  19. package/dist/backend/importResources.d.ts.map +1 -0
  20. package/dist/backend/importResources.js +58 -0
  21. package/dist/backend/importResources.js.map +1 -0
  22. package/dist/backend/importUtils.d.ts +14 -0
  23. package/dist/backend/importUtils.d.ts.map +1 -0
  24. package/dist/backend/importUtils.js +77 -0
  25. package/dist/backend/importUtils.js.map +1 -0
  26. package/dist/backend/importers/LuaCodeImporter.d.ts +47 -0
  27. package/dist/backend/importers/LuaCodeImporter.d.ts.map +1 -0
  28. package/dist/backend/importers/LuaCodeImporter.js +196 -0
  29. package/dist/backend/importers/LuaCodeImporter.js.map +1 -0
  30. package/dist/backend/importers/LuaCodeImporter.test.d.ts +2 -0
  31. package/dist/backend/importers/LuaCodeImporter.test.d.ts.map +1 -0
  32. package/dist/backend/importers/LuaCodeImporter.test.js.map +1 -0
  33. package/dist/backend/importers/binaryResourceImporter.d.ts +22 -0
  34. package/dist/backend/importers/binaryResourceImporter.d.ts.map +1 -0
  35. package/dist/backend/importers/binaryResourceImporter.js +53 -0
  36. package/dist/backend/importers/binaryResourceImporter.js.map +1 -0
  37. package/dist/backend/importers/luaImporter.d.ts +1 -0
  38. package/dist/backend/importers/luaImporter.d.ts.map +1 -0
  39. package/dist/backend/importers/luaImporter.js +3 -0
  40. package/dist/backend/importers/luaImporter.js.map +1 -0
  41. package/dist/backend/importers/textResourceImporter.d.ts +23 -0
  42. package/dist/backend/importers/textResourceImporter.d.ts.map +1 -0
  43. package/dist/backend/importers/textResourceImporter.js +55 -0
  44. package/dist/backend/importers/textResourceImporter.js.map +1 -0
  45. package/dist/backend/importers/tic80CartImporter.d.ts +21 -0
  46. package/dist/backend/importers/tic80CartImporter.d.ts.map +1 -0
  47. package/dist/backend/importers/tic80CartImporter.js +96 -0
  48. package/dist/backend/importers/tic80CartImporter.js.map +1 -0
  49. package/dist/backend/loadAllImports.d.ts +1 -0
  50. package/dist/backend/loadAllImports.d.ts.map +1 -0
  51. package/dist/backend/loadAllImports.js +3 -0
  52. package/dist/backend/loadAllImports.js.map +1 -0
  53. package/dist/backend/luaBinaryEncoding.d.ts +6 -0
  54. package/dist/backend/luaBinaryEncoding.d.ts.map +1 -0
  55. package/dist/backend/luaBinaryEncoding.js +94 -0
  56. package/dist/backend/luaBinaryEncoding.js.map +1 -0
  57. package/dist/backend/luaPreprocessor.d.ts +8 -0
  58. package/dist/backend/luaPreprocessor.d.ts.map +1 -0
  59. package/dist/backend/luaPreprocessor.js +862 -0
  60. package/dist/backend/luaPreprocessor.js.map +1 -0
  61. package/dist/backend/luaPreprocessor.test.d.ts +2 -0
  62. package/dist/backend/luaPreprocessor.test.d.ts.map +1 -0
  63. package/dist/backend/luaPreprocessor.test.js.map +1 -0
  64. package/dist/backend/manifestLoader.d.ts +19 -0
  65. package/dist/backend/manifestLoader.d.ts.map +1 -0
  66. package/dist/backend/manifestLoader.js +142 -0
  67. package/dist/backend/manifestLoader.js.map +1 -0
  68. package/dist/backend/manifestLoader.test.d.ts +2 -0
  69. package/dist/backend/manifestLoader.test.d.ts.map +1 -0
  70. package/dist/backend/manifestLoader.test.js.map +1 -0
  71. package/dist/backend/manifestTypes.d.ts +454 -0
  72. package/dist/backend/manifestTypes.d.ts.map +1 -0
  73. package/dist/backend/manifestTypes.js +28 -0
  74. package/dist/backend/manifestTypes.js.map +1 -0
  75. package/dist/backend/project.d.ts +24 -0
  76. package/dist/backend/project.d.ts.map +1 -0
  77. package/dist/backend/project.js +159 -0
  78. package/dist/backend/project.js.map +1 -0
  79. package/dist/backend/projectCore.d.ts +34 -0
  80. package/dist/backend/projectCore.d.ts.map +1 -0
  81. package/dist/backend/projectCore.js +226 -0
  82. package/dist/backend/projectCore.js.map +1 -0
  83. package/dist/backend/tic80Resolver.d.ts +6 -0
  84. package/dist/backend/tic80Resolver.d.ts.map +1 -0
  85. package/dist/backend/tic80Resolver.js +66 -0
  86. package/dist/backend/tic80Resolver.js.map +1 -0
  87. package/dist/buildInfo.d.ts +9 -0
  88. package/dist/buildInfo.d.ts.map +1 -0
  89. package/dist/buildInfo.js +13 -0
  90. package/dist/buildInfo.js.map +1 -0
  91. package/dist/frontend/build.d.ts +3 -0
  92. package/dist/frontend/build.d.ts.map +1 -0
  93. package/dist/frontend/build.js +8 -0
  94. package/dist/frontend/build.js.map +1 -0
  95. package/dist/frontend/codeBankWarnings.test.d.ts +2 -0
  96. package/dist/frontend/codeBankWarnings.test.d.ts.map +1 -0
  97. package/dist/frontend/codeBankWarnings.test.js.map +1 -0
  98. package/dist/frontend/core.d.ts +3 -0
  99. package/dist/frontend/core.d.ts.map +1 -0
  100. package/dist/frontend/core.js +259 -0
  101. package/dist/frontend/core.js.map +1 -0
  102. package/dist/frontend/init.d.ts +7 -0
  103. package/dist/frontend/init.d.ts.map +1 -0
  104. package/dist/frontend/init.js +95 -0
  105. package/dist/frontend/init.js.map +1 -0
  106. package/dist/frontend/parseOptions.d.ts +7 -0
  107. package/dist/frontend/parseOptions.d.ts.map +1 -0
  108. package/dist/frontend/parseOptions.js +68 -0
  109. package/dist/frontend/parseOptions.js.map +1 -0
  110. package/dist/frontend/run.d.ts +3 -0
  111. package/dist/frontend/run.d.ts.map +1 -0
  112. package/dist/frontend/run.js +63 -0
  113. package/dist/frontend/run.js.map +1 -0
  114. package/dist/frontend/watch.d.ts +3 -0
  115. package/dist/frontend/watch.d.ts.map +1 -0
  116. package/dist/frontend/watch.js +208 -0
  117. package/dist/frontend/watch.js.map +1 -0
  118. package/dist/index.d.ts +3 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +191 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/obj/resolvedManifest.ticbuild.jsonc +110 -0
  123. package/dist/obj/variables.json +19 -0
  124. package/dist/utils/algorithms.d.ts +4 -0
  125. package/dist/utils/algorithms.d.ts.map +1 -0
  126. package/dist/utils/algorithms.js +15 -0
  127. package/dist/utils/algorithms.js.map +1 -0
  128. package/dist/utils/algorithms.test.d.ts +2 -0
  129. package/dist/utils/algorithms.test.d.ts.map +1 -0
  130. package/dist/utils/algorithms.test.js.map +1 -0
  131. package/dist/utils/bin.d.ts +4 -0
  132. package/dist/utils/bin.d.ts.map +1 -0
  133. package/dist/utils/bin.js +16 -0
  134. package/dist/utils/bin.js.map +1 -0
  135. package/dist/utils/charMap.d.ts +28 -0
  136. package/dist/utils/charMap.d.ts.map +1 -0
  137. package/dist/utils/charMap.js +31 -0
  138. package/dist/utils/charMap.js.map +1 -0
  139. package/dist/utils/console.d.ts +10 -0
  140. package/dist/utils/console.d.ts.map +1 -0
  141. package/dist/utils/console.js +66 -0
  142. package/dist/utils/console.js.map +1 -0
  143. package/dist/utils/encoding/b85.d.ts +5 -0
  144. package/dist/utils/encoding/b85.d.ts.map +1 -0
  145. package/dist/utils/encoding/b85.js +136 -0
  146. package/dist/utils/encoding/b85.js.map +1 -0
  147. package/dist/utils/encoding/codecRegistry.d.ts +333 -0
  148. package/dist/utils/encoding/codecRegistry.d.ts.map +1 -0
  149. package/dist/utils/encoding/codecRegistry.js +81 -0
  150. package/dist/utils/encoding/codecRegistry.js.map +1 -0
  151. package/dist/utils/encoding/hex.d.ts +3 -0
  152. package/dist/utils/encoding/hex.d.ts.map +1 -0
  153. package/dist/utils/encoding/hex.js +30 -0
  154. package/dist/utils/encoding/hex.js.map +1 -0
  155. package/dist/utils/encoding/lz.d.ts +12 -0
  156. package/dist/utils/encoding/lz.d.ts.map +1 -0
  157. package/dist/utils/encoding/lz.js +271 -0
  158. package/dist/utils/encoding/lz.js.map +1 -0
  159. package/dist/utils/enum.d.ts +45 -0
  160. package/dist/utils/enum.d.ts.map +1 -0
  161. package/dist/utils/enum.js +135 -0
  162. package/dist/utils/enum.js.map +1 -0
  163. package/dist/utils/errorHandling.d.ts +13 -0
  164. package/dist/utils/errorHandling.d.ts.map +1 -0
  165. package/dist/utils/errorHandling.js +18 -0
  166. package/dist/utils/errorHandling.js.map +1 -0
  167. package/dist/utils/fileSystem.d.ts +16 -0
  168. package/dist/utils/fileSystem.d.ts.map +1 -0
  169. package/dist/utils/fileSystem.js +161 -0
  170. package/dist/utils/fileSystem.js.map +1 -0
  171. package/dist/utils/help.d.ts +7 -0
  172. package/dist/utils/help.d.ts.map +1 -0
  173. package/dist/utils/help.js +87 -0
  174. package/dist/utils/help.js.map +1 -0
  175. package/dist/utils/lua/luaUtils.d.ts +1 -0
  176. package/dist/utils/lua/luaUtils.d.ts.map +1 -0
  177. package/dist/utils/lua/luaUtils.js +3 -0
  178. package/dist/utils/lua/luaUtils.js.map +1 -0
  179. package/dist/utils/lua/lua_alias_expressions.d.ts +20 -0
  180. package/dist/utils/lua/lua_alias_expressions.d.ts.map +1 -0
  181. package/dist/utils/lua/lua_alias_expressions.js +233 -0
  182. package/dist/utils/lua/lua_alias_expressions.js.map +1 -0
  183. package/dist/utils/lua/lua_alias_literals.d.ts +20 -0
  184. package/dist/utils/lua/lua_alias_literals.d.ts.map +1 -0
  185. package/dist/utils/lua/lua_alias_literals.js +165 -0
  186. package/dist/utils/lua/lua_alias_literals.js.map +1 -0
  187. package/dist/utils/lua/lua_alias_shared.d.ts +31 -0
  188. package/dist/utils/lua/lua_alias_shared.d.ts.map +1 -0
  189. package/dist/utils/lua/lua_alias_shared.js +415 -0
  190. package/dist/utils/lua/lua_alias_shared.js.map +1 -0
  191. package/dist/utils/lua/lua_ast.d.ts +9 -0
  192. package/dist/utils/lua/lua_ast.d.ts.map +1 -0
  193. package/dist/utils/lua/lua_ast.js +90 -0
  194. package/dist/utils/lua/lua_ast.js.map +1 -0
  195. package/dist/utils/lua/lua_fundamentals.d.ts +14 -0
  196. package/dist/utils/lua/lua_fundamentals.d.ts.map +1 -0
  197. package/dist/utils/lua/lua_fundamentals.js +93 -0
  198. package/dist/utils/lua/lua_fundamentals.js.map +1 -0
  199. package/dist/utils/lua/lua_pack_locals.d.ts +3 -0
  200. package/dist/utils/lua/lua_pack_locals.d.ts.map +1 -0
  201. package/dist/utils/lua/lua_pack_locals.js +206 -0
  202. package/dist/utils/lua/lua_pack_locals.js.map +1 -0
  203. package/dist/utils/lua/lua_processor.d.ts +65 -0
  204. package/dist/utils/lua/lua_processor.d.ts.map +1 -0
  205. package/dist/utils/lua/lua_processor.js +1153 -0
  206. package/dist/utils/lua/lua_processor.js.map +1 -0
  207. package/dist/utils/lua/lua_processor.test.d.ts +2 -0
  208. package/dist/utils/lua/lua_processor.test.d.ts.map +1 -0
  209. package/dist/utils/lua/lua_processor.test.js.map +1 -0
  210. package/dist/utils/lua/lua_remove_unused_functions.d.ts +6 -0
  211. package/dist/utils/lua/lua_remove_unused_functions.d.ts.map +1 -0
  212. package/dist/utils/lua/lua_remove_unused_functions.js +474 -0
  213. package/dist/utils/lua/lua_remove_unused_functions.js.map +1 -0
  214. package/dist/utils/lua/lua_remove_unused_locals.d.ts +3 -0
  215. package/dist/utils/lua/lua_remove_unused_locals.d.ts.map +1 -0
  216. package/dist/utils/lua/lua_remove_unused_locals.js +303 -0
  217. package/dist/utils/lua/lua_remove_unused_locals.js.map +1 -0
  218. package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts +3 -0
  219. package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts.map +1 -0
  220. package/dist/utils/lua/lua_rename_allowed_table_keys.js +157 -0
  221. package/dist/utils/lua/lua_rename_allowed_table_keys.js.map +1 -0
  222. package/dist/utils/lua/lua_rename_table_fields.d.ts +3 -0
  223. package/dist/utils/lua/lua_rename_table_fields.d.ts.map +1 -0
  224. package/dist/utils/lua/lua_rename_table_fields.js +427 -0
  225. package/dist/utils/lua/lua_rename_table_fields.js.map +1 -0
  226. package/dist/utils/lua/lua_renamer.d.ts +3 -0
  227. package/dist/utils/lua/lua_renamer.d.ts.map +1 -0
  228. package/dist/utils/lua/lua_renamer.js +229 -0
  229. package/dist/utils/lua/lua_renamer.js.map +1 -0
  230. package/dist/utils/lua/lua_simplify.d.ts +3 -0
  231. package/dist/utils/lua/lua_simplify.d.ts.map +1 -0
  232. package/dist/utils/lua/lua_simplify.js +541 -0
  233. package/dist/utils/lua/lua_simplify.js.map +1 -0
  234. package/dist/utils/lua/lua_utils.d.ts +13 -0
  235. package/dist/utils/lua/lua_utils.d.ts.map +1 -0
  236. package/dist/utils/lua/lua_utils.js +58 -0
  237. package/dist/utils/lua/lua_utils.js.map +1 -0
  238. package/dist/utils/math.d.ts +2 -0
  239. package/dist/utils/math.d.ts.map +1 -0
  240. package/dist/utils/math.js +7 -0
  241. package/dist/utils/math.js.map +1 -0
  242. package/dist/utils/math.test.d.ts +2 -0
  243. package/dist/utils/math.test.d.ts.map +1 -0
  244. package/dist/utils/math.test.js.map +1 -0
  245. package/dist/utils/templates.d.ts +3 -0
  246. package/dist/utils/templates.d.ts.map +1 -0
  247. package/dist/utils/templates.js +57 -0
  248. package/dist/utils/templates.js.map +1 -0
  249. package/dist/utils/tic80/bankSupport.test.d.ts +2 -0
  250. package/dist/utils/tic80/bankSupport.test.d.ts.map +1 -0
  251. package/dist/utils/tic80/bankSupport.test.js.map +1 -0
  252. package/dist/utils/tic80/cartLoader.d.ts +3 -0
  253. package/dist/utils/tic80/cartLoader.d.ts.map +1 -0
  254. package/dist/utils/tic80/cartLoader.js +54 -0
  255. package/dist/utils/tic80/cartLoader.js.map +1 -0
  256. package/dist/utils/tic80/cartWriter.d.ts +5 -0
  257. package/dist/utils/tic80/cartWriter.d.ts.map +1 -0
  258. package/dist/utils/tic80/cartWriter.js +95 -0
  259. package/dist/utils/tic80/cartWriter.js.map +1 -0
  260. package/dist/utils/tic80/launch.d.ts +4 -0
  261. package/dist/utils/tic80/launch.d.ts.map +1 -0
  262. package/dist/utils/tic80/launch.js +36 -0
  263. package/dist/utils/tic80/launch.js.map +1 -0
  264. package/dist/utils/tic80/tic80.d.ts +1149 -0
  265. package/dist/utils/tic80/tic80.d.ts.map +1 -0
  266. package/dist/utils/tic80/tic80.js +114 -0
  267. package/dist/utils/tic80/tic80.js.map +1 -0
  268. package/dist/utils/utils.d.ts +13 -0
  269. package/dist/utils/utils.d.ts.map +1 -0
  270. package/dist/utils/utils.js +109 -0
  271. package/dist/utils/utils.js.map +1 -0
  272. package/dist/utils/versionString.d.ts +12 -0
  273. package/dist/utils/versionString.d.ts.map +1 -0
  274. package/dist/utils/versionString.js +33 -0
  275. package/dist/utils/versionString.js.map +1 -0
  276. package/dist/utils/windowPosition.d.ts +10 -0
  277. package/dist/utils/windowPosition.d.ts.map +1 -0
  278. package/dist/utils/windowPosition.js +222 -0
  279. package/dist/utils/windowPosition.js.map +1 -0
  280. package/example.ticbuild.jsonc +94 -0
  281. package/package.json +51 -0
  282. package/templates/help/build.txt +23 -0
  283. package/templates/help/init.txt +23 -0
  284. package/templates/help/main.txt +41 -0
  285. package/templates/help/run.txt +22 -0
  286. package/templates/help/tic80.txt +8 -0
  287. package/templates/help/watch.txt +24 -0
  288. package/templates/minimal/project.ticbuild.jsonc +43 -0
  289. package/ticbuild-1.0.0.tgz +0 -0
  290. package/ticbuild.schema.json +327 -0
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ok = ok;
4
+ exports.err = err;
5
+ exports.assert = assert;
6
+ function ok(value) {
7
+ return { ok: true, value };
8
+ }
9
+ function err(error) {
10
+ return { ok: false, error };
11
+ }
12
+ function assert(condition = true, message = "Assertion failed") {
13
+ if (!condition) {
14
+ console.error("Assertion failed:", message);
15
+ throw new Error(message);
16
+ }
17
+ }
18
+ //# sourceMappingURL=errorHandling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":";;AAYA,gBAEC;AAED,kBAEC;AAED,wBAKC;AAbD,SAAgB,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,GAAG,CAAY,KAAa;IAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,SAAgB,MAAM,CAAC,YAAqB,IAAI,EAAE,UAAkB,kBAAkB;IACpF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare function resolvePath(basePath: string, relativePath: string): string;
2
+ export declare function fileExists(filePath: string): boolean;
3
+ export declare function ensureDir(dirPath: string): void;
4
+ export declare function readTextFileAsync(filePath: string, encoding?: BufferEncoding): Promise<string>;
5
+ export declare function readBinaryFileAsync(filePath: string): Promise<Uint8Array>;
6
+ export declare function writeTextFile(filePath: string, content: string, encoding?: BufferEncoding): Promise<void>;
7
+ export declare function writeBinaryFile(filePath: string, data: Uint8Array): Promise<void>;
8
+ export declare function findExecutableInPath(executable: string): string | undefined;
9
+ export declare function isAbsolutePath(p: string): boolean;
10
+ export declare function joinPathParts(pathParts: string[]): string;
11
+ export declare function isDirectory(p: string): boolean;
12
+ export declare function canonicalizePath(p: string): string;
13
+ export declare function resolveFileWithSearchPaths(filePath: string, baseDir: string, additionalDirs?: string[]): string | null;
14
+ export declare function copyFile(sourcePath: string, targetPath: string, force: boolean): void;
15
+ export declare function isDirectoryEmpty(dirPath: string): boolean;
16
+ //# sourceMappingURL=fileSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.d.ts","sourceRoot":"","sources":["../../src/utils/fileSystem.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpG;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAG/E;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/G;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAO9C;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AASD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,MAAM,GAAG,IAAI,CAwBf;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAOrF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMzD"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolvePath = resolvePath;
37
+ exports.fileExists = fileExists;
38
+ exports.ensureDir = ensureDir;
39
+ exports.readTextFileAsync = readTextFileAsync;
40
+ exports.readBinaryFileAsync = readBinaryFileAsync;
41
+ exports.writeTextFile = writeTextFile;
42
+ exports.writeBinaryFile = writeBinaryFile;
43
+ exports.findExecutableInPath = findExecutableInPath;
44
+ exports.isAbsolutePath = isAbsolutePath;
45
+ exports.joinPathParts = joinPathParts;
46
+ exports.isDirectory = isDirectory;
47
+ exports.canonicalizePath = canonicalizePath;
48
+ exports.resolveFileWithSearchPaths = resolveFileWithSearchPaths;
49
+ exports.copyFile = copyFile;
50
+ exports.isDirectoryEmpty = isDirectoryEmpty;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ function resolvePath(basePath, relativePath) {
54
+ return path.resolve(path.dirname(basePath), relativePath);
55
+ }
56
+ function fileExists(filePath) {
57
+ try {
58
+ return fs.existsSync(filePath);
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ function ensureDir(dirPath) {
65
+ if (!fs.existsSync(dirPath)) {
66
+ fs.mkdirSync(dirPath, { recursive: true });
67
+ }
68
+ }
69
+ async function readTextFileAsync(filePath, encoding) {
70
+ return fs.promises.readFile(filePath, encoding || "utf-8");
71
+ }
72
+ async function readBinaryFileAsync(filePath) {
73
+ const data = await fs.promises.readFile(filePath);
74
+ return new Uint8Array(data);
75
+ }
76
+ async function writeTextFile(filePath, content, encoding) {
77
+ await fs.promises.writeFile(filePath, content, { encoding: encoding || "utf-8" });
78
+ }
79
+ async function writeBinaryFile(filePath, data) {
80
+ await fs.promises.writeFile(filePath, Buffer.from(data));
81
+ }
82
+ function findExecutableInPath(executable) {
83
+ const pathEnv = process.env.PATH || "";
84
+ const pathSeparator = process.platform === "win32" ? ";" : ":";
85
+ const paths = pathEnv.split(pathSeparator);
86
+ const exeExtensions = process.platform === "win32" ? [".exe", ".cmd", ".bat", ""] : [""];
87
+ for (const dir of paths) {
88
+ for (const ext of exeExtensions) {
89
+ const fullPath = path.join(dir, executable + ext);
90
+ if (fileExists(fullPath)) {
91
+ return fullPath;
92
+ }
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+ function isAbsolutePath(p) {
98
+ return path.isAbsolute(p);
99
+ }
100
+ function joinPathParts(pathParts) {
101
+ return path.join(...pathParts);
102
+ }
103
+ function isDirectory(p) {
104
+ try {
105
+ const stats = fs.statSync(p);
106
+ return stats.isDirectory();
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ // Normalizes a path to its canonical form
113
+ // (e.g., resolves .. and . segments, uses consistent separators)
114
+ function canonicalizePath(p) {
115
+ return path.normalize(p);
116
+ }
117
+ // Resolves a file path by searching in a base directory and additional search directories.
118
+ // Returns the first matching file found, or null if not found.
119
+ //
120
+ // filePath - The file path to resolve (can be relative or absolute)
121
+ // baseDir - The base directory to search in first
122
+ // additionalDirs - Additional directories to search (relative to baseDir)
123
+ // returns The absolute path to the file if found, or null
124
+ function resolveFileWithSearchPaths(filePath, baseDir, additionalDirs) {
125
+ // If absolute path, check if it exists
126
+ if (isAbsolutePath(filePath)) {
127
+ return fileExists(filePath) ? canonicalizePath(filePath) : null;
128
+ }
129
+ // Try base directory first
130
+ const baseCandidate = path.join(baseDir, filePath);
131
+ if (fileExists(baseCandidate)) {
132
+ return canonicalizePath(baseCandidate);
133
+ }
134
+ // Try additional search directories
135
+ if (additionalDirs) {
136
+ for (const searchDir of additionalDirs) {
137
+ const absoluteSearchDir = isAbsolutePath(searchDir) ? searchDir : path.join(baseDir, searchDir);
138
+ const candidate = path.join(absoluteSearchDir, filePath);
139
+ if (fileExists(candidate)) {
140
+ return canonicalizePath(candidate);
141
+ }
142
+ }
143
+ }
144
+ return null;
145
+ }
146
+ function copyFile(sourcePath, targetPath, force) {
147
+ if (!force && fileExists(targetPath)) {
148
+ throw new Error(`File already exists: ${targetPath} (use --force to overwrite)`);
149
+ }
150
+ const content = fs.readFileSync(sourcePath, "utf-8");
151
+ ensureDir(path.dirname(targetPath));
152
+ fs.writeFileSync(targetPath, content, "utf-8");
153
+ }
154
+ function isDirectoryEmpty(dirPath) {
155
+ if (!fs.existsSync(dirPath)) {
156
+ return true;
157
+ }
158
+ const entries = fs.readdirSync(dirPath);
159
+ return entries.length === 0;
160
+ }
161
+ //# sourceMappingURL=fileSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.js","sourceRoot":"","sources":["../../src/utils/fileSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function printMainHelp(): void;
2
+ export declare function printBuildHelp(): void;
3
+ export declare function printRunHelp(): void;
4
+ export declare function printWatchHelp(): void;
5
+ export declare function printInitHelp(): void;
6
+ export declare function printTic80Help(): void;
7
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.printMainHelp = printMainHelp;
37
+ exports.printBuildHelp = printBuildHelp;
38
+ exports.printRunHelp = printRunHelp;
39
+ exports.printWatchHelp = printWatchHelp;
40
+ exports.printInitHelp = printInitHelp;
41
+ exports.printTic80Help = printTic80Help;
42
+ const fs = __importStar(require("node:fs"));
43
+ const path = __importStar(require("node:path"));
44
+ const buildInfo_1 = require("../buildInfo");
45
+ const versionString_1 = require("./versionString");
46
+ const templates_1 = require("./templates");
47
+ function loadHelpTemplate(templateName) {
48
+ const templatePath = path.resolve(__dirname, "..", "..", "templates", "help", `${templateName}.txt`);
49
+ if (!fs.existsSync(templatePath)) {
50
+ throw new Error(`Help template not found: ${templatePath}`);
51
+ }
52
+ return fs.readFileSync(templatePath, "utf-8");
53
+ }
54
+ function renderHelpTemplate(templateName) {
55
+ const template = loadHelpTemplate(templateName);
56
+ const variables = {
57
+ VERSION: (0, versionString_1.getBuildVersionTag)(buildInfo_1.buildInfo),
58
+ COMMIT_HASH: buildInfo_1.buildInfo.commitHash || "unknown",
59
+ BUILD_DATE: buildInfo_1.buildInfo.buildDate || "unknown",
60
+ };
61
+ return (0, templates_1.applyTemplateVariables)(template, variables);
62
+ }
63
+ function printMainHelp() {
64
+ const help = renderHelpTemplate("main");
65
+ console.log(help);
66
+ }
67
+ function printBuildHelp() {
68
+ const help = renderHelpTemplate("build");
69
+ console.log(help);
70
+ }
71
+ function printRunHelp() {
72
+ const help = renderHelpTemplate("run");
73
+ console.log(help);
74
+ }
75
+ function printWatchHelp() {
76
+ const help = renderHelpTemplate("watch");
77
+ console.log(help);
78
+ }
79
+ function printInitHelp() {
80
+ const help = renderHelpTemplate("init");
81
+ console.log(help);
82
+ }
83
+ function printTic80Help() {
84
+ const help = renderHelpTemplate("tic80");
85
+ console.log(help);
86
+ }
87
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,sCAGC;AAED,wCAGC;AAED,oCAGC;AAED,wCAGC;AAED,sCAGC;AAED,wCAGC;AApDD,4CAA8B;AAC9B,gDAAkC;AAClC,4CAAyC;AACzC,mDAAqD;AACrD,2CAAqD;AAErD,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,MAAM,CAAC,CAAC;IACrG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,SAAS,GAA2B;QACxC,OAAO,EAAE,IAAA,kCAAkB,EAAC,qBAAS,CAAC;QACtC,WAAW,EAAE,qBAAS,CAAC,UAAU,IAAI,SAAS;QAC9C,UAAU,EAAE,qBAAS,CAAC,SAAS,IAAI,SAAS;KAC7C,CAAC;IACF,OAAO,IAAA,kCAAsB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=luaUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"luaUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/luaUtils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // barrel-ish file to expose lua manipulation / import / generation utils
3
+ //# sourceMappingURL=luaUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"luaUtils.js","sourceRoot":"","sources":["../../../src/utils/lua/luaUtils.ts"],"names":[],"mappings":";AAAA,yEAAyE"}
@@ -0,0 +1,20 @@
1
+ import * as luaparse from "luaparse";
2
+ /**
3
+ * Alias repeated expressions in the AST
4
+ *
5
+ * This optimization finds expressions that are used multiple times (like math.cos, string.sub)
6
+ * and creates local aliases for them to reduce code size. Aliases are declared in the highest
7
+ * scope where they are used.
8
+ *
9
+ * Example:
10
+ * local x = math.cos(1) + math.cos(2) + math.cos(3)
11
+ * local y = math.sin(1) + math.sin(2) + math.sin(3)
12
+ *
13
+ * Becomes:
14
+ * local _a = math.cos
15
+ * local _b = math.sin
16
+ * local x = _a(1) + _a(2) + _a(3)
17
+ * local y = _b(1) + _b(2) + _b(3)
18
+ */
19
+ export declare function aliasRepeatedExpressionsInAST(ast: luaparse.Chunk): luaparse.Chunk;
20
+ //# sourceMappingURL=lua_alias_expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lua_alias_expressions.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAsPrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAejF"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aliasRepeatedExpressionsInAST = aliasRepeatedExpressionsInAST;
4
+ const lua_alias_shared_1 = require("./lua_alias_shared");
5
+ // ============================================================================
6
+ // Expression Aliasing - Create local aliases for repeated expressions
7
+ // ============================================================================
8
+ // Configuration
9
+ const EXPR_ALIAS_PREFIX = "_"; // Prefix for generated alias names
10
+ const SAFE_GLOBAL_BASES = new Set(["math", "string", "table", "utf8", "bit", "bit32", "coroutine"]);
11
+ const SAFE_GLOBAL_FUNCS = new Set([
12
+ // TIC-80 API (pure or stable references)
13
+ "peek", "poke", "peek4", "poke4", "memcpy", "memset", "pmem", "mget", "mset", "sfx", "music",
14
+ "map", "spr", "circ", "circb", "rect", "rectb", "tri", "line", "pix", "clip", "btn",
15
+ "btnp", "key", "keyp", "mouse", "time", "tstamp", "sync", "trace", "exit",
16
+ ]);
17
+ //type StringLiteralNode = luaparse.StringLiteral&{value?: string | null};
18
+ function baseIsSafeGlobal(expr) {
19
+ return expr.type === "Identifier" && SAFE_GLOBAL_BASES.has(expr.name);
20
+ }
21
+ // Serialize an expression to a string key for comparison
22
+ function serializeExpression(node) {
23
+ if (!node)
24
+ return null;
25
+ switch (node.type) {
26
+ case "Identifier":
27
+ if (!SAFE_GLOBAL_FUNCS.has(node.name))
28
+ return null;
29
+ return `id:${node.name}`;
30
+ case "MemberExpression": {
31
+ if (!baseIsSafeGlobal(node.base))
32
+ return null;
33
+ const baseName = node.base.name;
34
+ const id = node.identifier;
35
+ let identifier = null;
36
+ if (id) {
37
+ if (id.type === "Identifier")
38
+ identifier = id.name;
39
+ else
40
+ identifier = serializeExpression(id);
41
+ }
42
+ if (!identifier)
43
+ return null;
44
+ return `member:${baseName}.${identifier}`;
45
+ }
46
+ case "IndexExpression": {
47
+ if (!baseIsSafeGlobal(node.base))
48
+ return null;
49
+ const base = node.base.name;
50
+ const index = serializeExpression(node.index);
51
+ if (!base || !index)
52
+ return null;
53
+ return `index:${base}[${index}]`;
54
+ }
55
+ case "StringLiteral": {
56
+ const strNode = node;
57
+ const raw = strNode.raw ?? (strNode.value != null ? JSON.stringify(strNode.value) : "\"\"");
58
+ return `str:${raw}`;
59
+ }
60
+ case "NumericLiteral":
61
+ return `num:${node.value}`;
62
+ case "BooleanLiteral":
63
+ return `bool:${node.value}`;
64
+ case "NilLiteral":
65
+ return "nil";
66
+ default:
67
+ return null;
68
+ }
69
+ }
70
+ // Check if an expression is worth aliasing
71
+ function isAliasableExpression(node) {
72
+ if (!node)
73
+ return false;
74
+ switch (node.type) {
75
+ case "Identifier":
76
+ return SAFE_GLOBAL_FUNCS.has(node.name);
77
+ case "MemberExpression":
78
+ // Only alias safe global library member access (e.g., math.cos)
79
+ return baseIsSafeGlobal(node.base);
80
+ case "IndexExpression":
81
+ // Only alias safe global library index access (e.g., math["cos"])
82
+ return baseIsSafeGlobal(node.base);
83
+ // Don't alias literals
84
+ case "StringLiteral":
85
+ case "NumericLiteral":
86
+ case "BooleanLiteral":
87
+ case "NilLiteral":
88
+ return false;
89
+ default:
90
+ return false;
91
+ }
92
+ }
93
+ function expressionTextLength(node) {
94
+ if (!node)
95
+ return Number.POSITIVE_INFINITY;
96
+ switch (node.type) {
97
+ case "Identifier":
98
+ return node.name.length;
99
+ case "MemberExpression": {
100
+ const id = node.identifier;
101
+ const idLen = id?.type === "Identifier" ? id.name.length : expressionTextLength(id);
102
+ return expressionTextLength(node.base) + 1 + idLen; // base . id
103
+ }
104
+ case "IndexExpression": {
105
+ return expressionTextLength(node.base) + 2 + expressionTextLength(node.index); // base[index]
106
+ }
107
+ case "StringLiteral": {
108
+ const strNode = node;
109
+ if (strNode.raw)
110
+ return strNode.raw.length;
111
+ if (typeof strNode.value === "string")
112
+ return strNode.value.length + 2; // quotes
113
+ return 2;
114
+ }
115
+ case "NumericLiteral":
116
+ return node.raw?.length || String(node.value).length;
117
+ case "BooleanLiteral":
118
+ return node.value ? 4 : 5;
119
+ case "NilLiteral":
120
+ return 3;
121
+ default:
122
+ return Number.POSITIVE_INFINITY;
123
+ }
124
+ }
125
+ function shouldAliasExpression(info) {
126
+ const exprCost = expressionTextLength(info.node);
127
+ if (!Number.isFinite(exprCost))
128
+ return false;
129
+ const aliasNameLength = info.aliasName?.length ?? (EXPR_ALIAS_PREFIX.length + 1); // e.g., _a
130
+ const declarationCost = 6 + aliasNameLength + exprCost; // "local " + name + "=" + expr
131
+ const useCost = aliasNameLength;
132
+ const aliasTotal = declarationCost + useCost * info.count;
133
+ const noAliasTotal = exprCost * info.count;
134
+ return aliasTotal < noAliasTotal;
135
+ }
136
+ // Recursively replace expressions with aliases
137
+ function replaceExpression(node, tracker) {
138
+ if (!node)
139
+ return node;
140
+ const key = serializeExpression(node);
141
+ if (key) {
142
+ const alias = tracker.getAlias(key);
143
+ if (alias) {
144
+ return {
145
+ type: "Identifier",
146
+ name: alias,
147
+ };
148
+ }
149
+ }
150
+ // Recursively replace in child expressions
151
+ switch (node.type) {
152
+ case "BinaryExpression":
153
+ case "LogicalExpression":
154
+ node.left = replaceExpression(node.left, tracker);
155
+ node.right = replaceExpression(node.right, tracker);
156
+ break;
157
+ case "UnaryExpression":
158
+ node.argument = replaceExpression(node.argument, tracker);
159
+ break;
160
+ case "CallExpression":
161
+ node.base = replaceExpression(node.base, tracker);
162
+ if (node.arguments) {
163
+ node.arguments = node.arguments.map(arg => replaceExpression(arg, tracker));
164
+ }
165
+ break;
166
+ case "TableCallExpression":
167
+ node.base = replaceExpression(node.base, tracker);
168
+ node.arguments = replaceExpression(node.arguments, tracker);
169
+ break;
170
+ case "StringCallExpression":
171
+ node.base = replaceExpression(node.base, tracker);
172
+ break;
173
+ case "MemberExpression":
174
+ // Don't replace the base if this whole expression is being aliased
175
+ if (!serializeExpression(node) || !tracker.getAlias(serializeExpression(node))) {
176
+ node.base = replaceExpression(node.base, tracker);
177
+ }
178
+ break;
179
+ case "IndexExpression":
180
+ // Don't replace base/index if this whole expression is being aliased
181
+ if (!serializeExpression(node) || !tracker.getAlias(serializeExpression(node))) {
182
+ node.base = replaceExpression(node.base, tracker);
183
+ node.index = replaceExpression(node.index, tracker);
184
+ }
185
+ break;
186
+ case "TableConstructorExpression":
187
+ if (node.fields) {
188
+ node.fields.forEach((field) => {
189
+ if (field.type === "TableKey" || field.type === "TableKeyString") {
190
+ if (field.key)
191
+ field.key = replaceExpression(field.key, tracker);
192
+ }
193
+ if (field.value)
194
+ field.value = replaceExpression(field.value, tracker);
195
+ });
196
+ }
197
+ break;
198
+ }
199
+ return node;
200
+ }
201
+ /**
202
+ * Alias repeated expressions in the AST
203
+ *
204
+ * This optimization finds expressions that are used multiple times (like math.cos, string.sub)
205
+ * and creates local aliases for them to reduce code size. Aliases are declared in the highest
206
+ * scope where they are used.
207
+ *
208
+ * Example:
209
+ * local x = math.cos(1) + math.cos(2) + math.cos(3)
210
+ * local y = math.sin(1) + math.sin(2) + math.sin(3)
211
+ *
212
+ * Becomes:
213
+ * local _a = math.cos
214
+ * local _b = math.sin
215
+ * local x = _a(1) + _a(2) + _a(3)
216
+ * local y = _b(1) + _b(2) + _b(3)
217
+ */
218
+ function aliasRepeatedExpressionsInAST(ast) {
219
+ const strategy = {
220
+ prefix: EXPR_ALIAS_PREFIX,
221
+ serialize: (node) => {
222
+ if (!node)
223
+ return null;
224
+ if (!isAliasableExpression(node))
225
+ return null;
226
+ return serializeExpression(node);
227
+ },
228
+ shouldAlias: shouldAliasExpression,
229
+ replaceExpression,
230
+ };
231
+ return (0, lua_alias_shared_1.runAliasPass)(ast, strategy);
232
+ }
233
+ //# sourceMappingURL=lua_alias_expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lua_alias_expressions.js","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as luaparse from "luaparse";
2
+ /**
3
+ * Alias repeated literal values in the AST
4
+ *
5
+ * This optimization finds literal values (strings, numbers) that are used multiple times
6
+ * and creates local aliases for them to reduce code size.
7
+ *
8
+ * Example:
9
+ * local x = "hello" .. "world"
10
+ * local y = "hello" .. "test"
11
+ * local z = "hello" .. "demo"
12
+ *
13
+ * Becomes:
14
+ * local La = "hello"
15
+ * local x = La .. "world"
16
+ * local y = La .. "test"
17
+ * local z = La .. "demo"
18
+ */
19
+ export declare function aliasLiteralsInAST(ast: luaparse.Chunk): luaparse.Chunk;
20
+ //# sourceMappingURL=lua_alias_literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lua_alias_literals.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAqKrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAStE"}