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 @@
1
+ {"version":3,"file":"tic80.d.ts","sourceRoot":"","sources":["../../../src/utils/tic80/tic80.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkH2B,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,qBAAqB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ // types for tic80 specific platform
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.kTic80CartChunkTypes = void 0;
5
+ const bin_1 = require("../bin");
6
+ const enum_1 = require("../enum");
7
+ // https://github.com/nesbox/TIC-80/wiki/.tic-File-Format
8
+ exports.kTic80CartChunkTypes = (0, enum_1.defineEnum)({
9
+ // 256 sprites/tiles, 2 pixels per byte.
10
+ TILES: {
11
+ value: 1,
12
+ bankCount: 8,
13
+ sizePerBank: 0x2000,
14
+ deprecated: false,
15
+ },
16
+ SPRITES: {
17
+ value: 2,
18
+ bankCount: 8,
19
+ sizePerBank: 0x2000,
20
+ deprecated: false,
21
+ },
22
+ MAP: {
23
+ value: 4,
24
+ bankCount: 8,
25
+ sizePerBank: 0x7f80,
26
+ deprecated: false,
27
+ },
28
+ // This represents the code, in ASCII text format.
29
+ // Version Notes:
30
+ // 0.80 removed support for separate code banks. Older cartridge's
31
+ // discrete banks will be loaded into a single codebase (with a newline
32
+ // between each) - starting at bank 7 (which appears at the top) and
33
+ // working backwards to bank 0. The bank number is therefore deprecated in
34
+ // version 0.80.
35
+ // 1.0 supports up to 512kb of code. This code is stored sequentially
36
+ // (uncompressed) across up to 8 banks. Individual banks are joined into a
37
+ // single large string when loaded (in sequential 0..7 order). The editor
38
+ // buffer split into multiple banks when saved to cartridge (when larger
39
+ // than 64kb). A cartridge may consist of 1 to 8 code banks.
40
+ // * it means we can support multiple code banks each up to 64kb.
41
+ // * ASCII encoding only (no bin, no unicode possible...)
42
+ //
43
+ CODE: {
44
+ value: 5, //
45
+ bankCount: 8,
46
+ sizePerBank: (0, bin_1.kbToBytes)(64) - 1, // size must be <= 65535 bytes because of how size is represented.
47
+ deprecated: false,
48
+ },
49
+ // sprite flags data
50
+ FLAGS: {
51
+ value: 6,
52
+ bankCount: 8,
53
+ sizePerBank: 0x200,
54
+ deprecated: false,
55
+ },
56
+ SFX: {
57
+ value: 9,
58
+ bankCount: 8,
59
+ sizePerBank: 0x1080,
60
+ deprecated: false,
61
+ },
62
+ WAVEFORMS: {
63
+ value: 10,
64
+ bankCount: 1, // no bank support.
65
+ sizePerBank: 0x1000,
66
+ deprecated: false,
67
+ },
68
+ PALETTE: {
69
+ value: 12,
70
+ bankCount: 1, // no bank support.
71
+ sizePerBank: 96, // 48 SCN + 48 BDR
72
+ deprecated: false,
73
+ },
74
+ MUSIC_TRACKS: {
75
+ value: 14,
76
+ bankCount: 8,
77
+ sizePerBank: 0x198, // 0x13E64...0x13FFB
78
+ deprecated: false,
79
+ },
80
+ MUSIC_PATTERNS: {
81
+ value: 15,
82
+ bankCount: 8,
83
+ sizePerBank: 0x2d00, // 0x11164...0x13E63
84
+ deprecated: false,
85
+ },
86
+ CODE_COMPRESSED: {
87
+ value: 16, //
88
+ bankCount: 1, // no bank support. compressed code must be 64kb or less, compressed with ZLIB.
89
+ sizePerBank: (0, bin_1.kbToBytes)(64) - 1, //
90
+ deprecated: true,
91
+ },
92
+ // if present, default palette & waveforms are loaded.
93
+ DEFAULT: {
94
+ value: 17,
95
+ bankCount: 1,
96
+ sizePerBank: 0,
97
+ deprecated: false,
98
+ },
99
+ // bank 0 used as cover image.
100
+ // otherwise not certain what this is -- maybe loaded as VRAM (0x0000) at startup?
101
+ SCREEN: {
102
+ value: 18,
103
+ bankCount: 8,
104
+ sizePerBank: (0, bin_1.kbToBytes)(16),
105
+ deprecated: false,
106
+ },
107
+ CODE_WASM: {
108
+ value: 19,
109
+ bankCount: 4,
110
+ sizePerBank: 0,
111
+ deprecated: false,
112
+ },
113
+ });
114
+ //# sourceMappingURL=tic80.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tic80.js","sourceRoot":"","sources":["../../../src/utils/tic80/tic80.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAEpC,gCAAmC;AACnC,kCAAqC;AAiBrC,yDAAyD;AAC5C,QAAA,oBAAoB,GAAG,IAAA,iBAAU,EAAC;IAC7C,wCAAwC;IACxC,KAAK,EAAE;QACL,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;KAClB;IAED,OAAO,EAAE;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;KAClB;IAED,GAAG,EAAE;QACH,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;KAClB;IAED,kDAAkD;IAClD,iBAAiB;IACjB,sEAAsE;IACtE,2EAA2E;IAC3E,wEAAwE;IACxE,8EAA8E;IAC9E,oBAAoB;IAEpB,yEAAyE;IACzE,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,gEAAgE;IAEhE,iEAAiE;IACjE,yDAAyD;IACzD,EAAE;IAEF,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,EAAE,EAAE;QACZ,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,IAAA,eAAS,EAAC,EAAE,CAAC,GAAG,CAAC,EAAE,kEAAkE;QAClG,UAAU,EAAE,KAAK;KAClB;IAED,oBAAoB;IACpB,KAAK,EAAE;QACL,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,KAAK;KAClB;IAED,GAAG,EAAE;QACH,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;KAClB;IAED,SAAS,EAAE;QACT,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC,EAAE,mBAAmB;QACjC,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;KAClB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC,EAAE,mBAAmB;QACjC,WAAW,EAAE,EAAE,EAAE,kBAAkB;QACnC,UAAU,EAAE,KAAK;KAClB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,KAAK,EAAE,oBAAoB;QACxC,UAAU,EAAE,KAAK;KAClB;IACD,cAAc,EAAE;QACd,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,MAAM,EAAE,oBAAoB;QACzC,UAAU,EAAE,KAAK;KAClB;IACD,eAAe,EAAE;QACf,KAAK,EAAE,EAAE,EAAE,EAAE;QACb,SAAS,EAAE,CAAC,EAAE,+EAA+E;QAC7F,WAAW,EAAE,IAAA,eAAS,EAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QAClC,UAAU,EAAE,IAAI;KACjB;IACD,sDAAsD;IACtD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,KAAK;KAClB;IACD,8BAA8B;IAC9B,kFAAkF;IAClF,MAAM,EAAE;QACN,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,IAAA,eAAS,EAAC,EAAE,CAAC;QAC1B,UAAU,EAAE,KAAK;KAClB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,KAAK;KAClB;CACwD,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const kNullKey = "__NULL__";
2
+ export declare function TryParseInt(value: any): number | null;
3
+ export declare const formatBytes: (n: number | null) => string;
4
+ export declare function stripExtension(fileName: string): string;
5
+ export type TObject = {
6
+ [key: string]: any;
7
+ };
8
+ export declare function deepMergeObjects(target: TObject, source: TObject): void;
9
+ export declare function extractVariablesFromObject(obj: TObject): Map<string, string>;
10
+ export declare function makeMapSerializable<K, V>(map: Map<K, V>): object;
11
+ export declare function deserializeMap<K, V>(obj: object): Map<K, V>;
12
+ export declare function CoalesceBool(value: boolean | null | undefined, defaultValue: boolean): boolean;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAWrD;AAED,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,GAAG,IAAI,WAK3C,CAAC;AAIF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAI7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAyBvE;AAiCD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAEhE;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAK9F"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatBytes = exports.kNullKey = void 0;
4
+ exports.TryParseInt = TryParseInt;
5
+ exports.stripExtension = stripExtension;
6
+ exports.deepMergeObjects = deepMergeObjects;
7
+ exports.extractVariablesFromObject = extractVariablesFromObject;
8
+ exports.makeMapSerializable = makeMapSerializable;
9
+ exports.deserializeMap = deserializeMap;
10
+ exports.CoalesceBool = CoalesceBool;
11
+ exports.kNullKey = "__NULL__";
12
+ function TryParseInt(value) {
13
+ if (typeof value === "number" && isFinite(value)) {
14
+ return Math.floor(value);
15
+ }
16
+ if (typeof value === "string") {
17
+ const parsed = parseInt(value, 10);
18
+ if (!isNaN(parsed)) {
19
+ return parsed;
20
+ }
21
+ }
22
+ return null;
23
+ }
24
+ const formatBytes = (n) => {
25
+ if (n == null)
26
+ return "...";
27
+ if (n < 1024)
28
+ return `${n} B`;
29
+ if (n < 1024 * 1024)
30
+ return `${(n / 1024).toFixed(1)} KB`;
31
+ return `${(n / (1024 * 1024)).toFixed(2)} MB`;
32
+ };
33
+ exports.formatBytes = formatBytes;
34
+ // Remove the extension from a filename string.
35
+ // example: "myfile.txt" => "myfile"
36
+ function stripExtension(fileName) {
37
+ return fileName.replace(/\.[^./\\]+$/, "");
38
+ }
39
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////
40
+ // Generic deep merge that treats arrays as leaf values
41
+ function deepMergeObjects(target, source) {
42
+ for (const key in source) {
43
+ if (!source.hasOwnProperty(key)) {
44
+ continue;
45
+ }
46
+ const sourceValue = source[key];
47
+ const targetValue = target[key];
48
+ // Arrays are treated as leaf values - replace entirely
49
+ if (Array.isArray(sourceValue)) {
50
+ target[key] = sourceValue;
51
+ }
52
+ // Objects are merged recursively
53
+ else if (sourceValue !== null && typeof sourceValue === "object" && !Array.isArray(sourceValue)) {
54
+ if (!targetValue || typeof targetValue !== "object") {
55
+ target[key] = {};
56
+ }
57
+ deepMergeObjects(target[key], sourceValue);
58
+ }
59
+ // Primitives override
60
+ else {
61
+ target[key] = sourceValue;
62
+ }
63
+ }
64
+ }
65
+ // Extracts variables from non-array leaf values in an object
66
+ function extractVariablesFromObject2(obj, prefix) {
67
+ const variables = new Map();
68
+ for (const key in obj) {
69
+ if (!obj.hasOwnProperty(key)) {
70
+ continue;
71
+ }
72
+ const value = obj[key];
73
+ const fullKey = prefix ? `${prefix}.${key}` : key;
74
+ // Arrays are leaf values, don't process them
75
+ if (Array.isArray(value)) {
76
+ continue;
77
+ }
78
+ // Objects are processed recursively
79
+ else if (value !== null && typeof value === "object") {
80
+ const childVars = extractVariablesFromObject2(value, fullKey);
81
+ for (const [k, v] of childVars.entries()) {
82
+ variables.set(k, v);
83
+ }
84
+ }
85
+ // Primitives become variables
86
+ else if (value !== undefined && value !== null) {
87
+ variables.set(fullKey, String(value));
88
+ }
89
+ }
90
+ return variables;
91
+ }
92
+ // Extracts variables from non-array leaf values in an object
93
+ function extractVariablesFromObject(obj) {
94
+ return extractVariablesFromObject2(obj, undefined);
95
+ }
96
+ // where K and V are serializable types
97
+ function makeMapSerializable(map) {
98
+ return Object.fromEntries(map.entries());
99
+ }
100
+ function deserializeMap(obj) {
101
+ return new Map(Object.entries(obj));
102
+ }
103
+ function CoalesceBool(value, defaultValue) {
104
+ if (value === null || value === undefined) {
105
+ return defaultValue;
106
+ }
107
+ return value;
108
+ }
109
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type BuildInfoLike = {
2
+ gitTag: string | null;
3
+ commitsSinceTag: number | null;
4
+ dirty: boolean | null;
5
+ buildDate?: string;
6
+ lastCommitDate?: string | null;
7
+ commitHash?: string | null;
8
+ };
9
+ export declare function getBuildVersionTag(info: BuildInfoLike): string;
10
+ export declare function getAppVersionString(): string;
11
+ export declare function getAppVersionAndCommitString(): string;
12
+ //# sourceMappingURL=versionString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionString.d.ts","sourceRoot":"","sources":["../../src/utils/versionString.ts"],"names":[],"mappings":"AAiDA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAOF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAW9D;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAGD,wBAAgB,4BAA4B,IAAI,MAAM,CAErD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBuildVersionTag = getBuildVersionTag;
4
+ exports.getAppVersionString = getAppVersionString;
5
+ exports.getAppVersionAndCommitString = getAppVersionAndCommitString;
6
+ const buildInfo_1 = require("../buildInfo");
7
+ // Version tag is like:
8
+ // - v1
9
+ // - v1+290
10
+ // - v1+290(!)
11
+ // - unknown
12
+ function getBuildVersionTag(info) {
13
+ if (!info.gitTag)
14
+ return "unknown";
15
+ let str = String(info.gitTag);
16
+ if (info.commitsSinceTag && info.commitsSinceTag > 0) {
17
+ str += `+${info.commitsSinceTag}`;
18
+ }
19
+ if (info.dirty) {
20
+ str += "(!)";
21
+ }
22
+ return str;
23
+ }
24
+ // Hash input / display string.
25
+ // Example: "Ticbuild v1+290(!)"
26
+ function getAppVersionString() {
27
+ return `Ticbuild ${getBuildVersionTag(buildInfo_1.buildInfo)}`;
28
+ }
29
+ // Example: "Ticbuild v1+290(!) (abcdef1234)"
30
+ function getAppVersionAndCommitString() {
31
+ return `Ticbuild ${getBuildVersionTag(buildInfo_1.buildInfo)} (${buildInfo_1.buildInfo.commitHash ?? "unknown"})`;
32
+ }
33
+ //# sourceMappingURL=versionString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionString.js","sourceRoot":"","sources":["../../src/utils/versionString.ts"],"names":[],"mappings":";;AA+DA,gDAWC;AAID,kDAEC;AAGD,oEAEC;AArFD,4CAAyC;AA0DzC,uBAAuB;AACvB,OAAO;AACP,WAAW;AACX,cAAc;AACd,YAAY;AACZ,SAAgB,kBAAkB,CAAC,IAAmB;IACpD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAEnC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QACrD,GAAG,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,GAAG,IAAI,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+BAA+B;AAC/B,gCAAgC;AAChC,SAAgB,mBAAmB;IACjC,OAAO,YAAY,kBAAkB,CAAC,qBAAS,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,6CAA6C;AAC7C,SAAgB,4BAA4B;IAC1C,OAAO,YAAY,kBAAkB,CAAC,qBAAS,CAAC,KAAK,qBAAS,CAAC,UAAU,IAAI,SAAS,GAAG,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface WindowPlacement {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export declare function getWindowPosition(pid: number): Promise<WindowPlacement | null>;
8
+ export declare function setWindowPosition(pid: number, placement: WindowPlacement): Promise<boolean>;
9
+ export declare function waitForWindow(pid: number, timeoutMs?: number): Promise<boolean>;
10
+ //# sourceMappingURL=windowPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowPosition.d.ts","sourceRoot":"","sources":["../../src/utils/windowPosition.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA4FpF;AAGD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAiEjG;AAGD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB3F"}
@@ -0,0 +1,222 @@
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.getWindowPosition = getWindowPosition;
37
+ exports.setWindowPosition = setWindowPosition;
38
+ exports.waitForWindow = waitForWindow;
39
+ const node_child_process_1 = require("node:child_process");
40
+ const promises_1 = require("node:fs/promises");
41
+ const node_os_1 = require("node:os");
42
+ const node_path_1 = require("node:path");
43
+ const node_util_1 = require("node:util");
44
+ const cons = __importStar(require("./console"));
45
+ const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
46
+ // Gets the window position for a process by PID using PowerShell
47
+ async function getWindowPosition(pid) {
48
+ if (process.platform !== "win32") {
49
+ throw new Error(`Platform ${process.platform} is not supported for getWindowPosition.`);
50
+ }
51
+ const psScript = `
52
+ Add-Type @"
53
+ using System;
54
+ using System.Runtime.InteropServices;
55
+ public class Win32 {
56
+ [DllImport("user32.dll")]
57
+ public static extern IntPtr GetForegroundWindow();
58
+
59
+ [DllImport("user32.dll")]
60
+ public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
61
+
62
+ [DllImport("user32.dll")]
63
+ [return: MarshalAs(UnmanagedType.Bool)]
64
+ public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
65
+
66
+ [StructLayout(LayoutKind.Sequential)]
67
+ public struct RECT {
68
+ public int Left;
69
+ public int Top;
70
+ public int Right;
71
+ public int Bottom;
72
+ }
73
+
74
+ [DllImport("user32.dll")]
75
+ [return: MarshalAs(UnmanagedType.Bool)]
76
+ public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
77
+
78
+ public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
79
+ }
80
+ "@
81
+
82
+ $targetPid = ${pid}
83
+ $result = $null
84
+
85
+ [Win32]::EnumWindows({
86
+ param($hwnd, $lParam)
87
+ $procId = 0
88
+ [Win32]::GetWindowThreadProcessId($hwnd, [ref]$procId) | Out-Null
89
+ if ($procId -eq $targetPid) {
90
+ $rect = New-Object Win32+RECT
91
+ if ([Win32]::GetWindowRect($hwnd, [ref]$rect)) {
92
+ $script:result = @{
93
+ x = $rect.Left
94
+ y = $rect.Top
95
+ width = $rect.Right - $rect.Left
96
+ height = $rect.Bottom - $rect.Top
97
+ }
98
+ return $false
99
+ }
100
+ }
101
+ return $true
102
+ }, [IntPtr]::Zero) | Out-Null
103
+
104
+ if ($script:result) {
105
+ $script:result | ConvertTo-Json -Compress
106
+ }
107
+ `;
108
+ const scriptPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `getwindowpos-${pid}-${Date.now()}.ps1`);
109
+ try {
110
+ await (0, promises_1.writeFile)(scriptPath, psScript, "utf-8");
111
+ const { stdout, stderr } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`);
112
+ if (stderr) {
113
+ cons.warning(`PowerShell stderr: ${stderr}`);
114
+ }
115
+ cons.dim(`PowerShell stdout: "${stdout.trim()}"`);
116
+ if (stdout.trim()) {
117
+ const parsed = JSON.parse(stdout.trim());
118
+ return {
119
+ x: parsed.x,
120
+ y: parsed.y,
121
+ width: parsed.width,
122
+ height: parsed.height,
123
+ };
124
+ }
125
+ }
126
+ finally {
127
+ try {
128
+ await (0, promises_1.unlink)(scriptPath);
129
+ }
130
+ catch {
131
+ // Ignore cleanup errors
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ // Sets the window position for a process by PID using PowerShell
137
+ async function setWindowPosition(pid, placement) {
138
+ if (process.platform !== "win32") {
139
+ throw new Error(`Platform ${process.platform} is not supported for setWindowPosition.`);
140
+ }
141
+ const psScript = `
142
+ Add-Type @"
143
+ using System;
144
+ using System.Runtime.InteropServices;
145
+ public class Win32 {
146
+ [DllImport("user32.dll")]
147
+ [return: MarshalAs(UnmanagedType.Bool)]
148
+ public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
149
+
150
+ [DllImport("user32.dll")]
151
+ public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
152
+
153
+ [DllImport("user32.dll")]
154
+ [return: MarshalAs(UnmanagedType.Bool)]
155
+ public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
156
+
157
+ public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
158
+
159
+ public const uint SWP_NOZORDER = 0x0004;
160
+ public const uint SWP_SHOWWINDOW = 0x0040;
161
+ }
162
+ "@
163
+
164
+ $targetPid = ${pid}
165
+ $x = ${placement.x}
166
+ $y = ${placement.y}
167
+ $width = ${placement.width}
168
+ $height = ${placement.height}
169
+
170
+ [Win32]::EnumWindows({
171
+ param($hwnd, $lParam)
172
+ $procId = 0
173
+ [Win32]::GetWindowThreadProcessId($hwnd, [ref]$procId) | Out-Null
174
+ if ($procId -eq $targetPid) {
175
+ [Win32]::SetWindowPos($hwnd, [IntPtr]::Zero, $x, $y, $width, $height, [Win32]::SWP_NOZORDER -bor [Win32]::SWP_SHOWWINDOW) | Out-Null
176
+ return $false
177
+ }
178
+ return $true
179
+ }, [IntPtr]::Zero) | Out-Null
180
+
181
+ Write-Output "success"
182
+ `;
183
+ const scriptPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `setwindowpos-${pid}-${Date.now()}.ps1`);
184
+ try {
185
+ await (0, promises_1.writeFile)(scriptPath, psScript, "utf-8");
186
+ const { stderr } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`);
187
+ if (stderr) {
188
+ cons.warning(`PowerShell stderr: ${stderr}`);
189
+ }
190
+ }
191
+ finally {
192
+ try {
193
+ await (0, promises_1.unlink)(scriptPath);
194
+ }
195
+ catch {
196
+ // Ignore cleanup errors
197
+ }
198
+ }
199
+ return true;
200
+ }
201
+ //Waits for a window to appear for the given process ID
202
+ async function waitForWindow(pid, timeoutMs = 5000) {
203
+ if (process.platform !== "win32") {
204
+ throw new Error(`Platform ${process.platform} is not supported for waitForWindow.`);
205
+ }
206
+ const startTime = Date.now();
207
+ while (Date.now() - startTime < timeoutMs) {
208
+ try {
209
+ const position = await getWindowPosition(pid);
210
+ if (position) {
211
+ return true;
212
+ }
213
+ }
214
+ catch (error) {
215
+ // Window might not exist yet, keep trying
216
+ cons.dim(` Still waiting for window... (${error instanceof Error ? error.message : String(error)})`);
217
+ }
218
+ await new Promise((resolve) => setTimeout(resolve, 30));
219
+ }
220
+ return false;
221
+ }
222
+ //# sourceMappingURL=windowPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowPosition.js","sourceRoot":"","sources":["../../src/utils/windowPosition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ {
2
+ "$schema": "./ticbuild.schema.json",
3
+ // Example manifest for a TIC-80 project
4
+ "project": {
5
+ "name": "example-game",
6
+ "includeDirs": [
7
+ "./src",
8
+ "./include"
9
+ ],
10
+ "binDir": "./dist/bin",
11
+ "objDir": "./dist/obj",
12
+ "outputCartName": "example-game.tic",
13
+ },
14
+ "variables": {
15
+ "version": "1.0.0",
16
+ "author": "Example Developer",
17
+ },
18
+ "imports": [
19
+ {
20
+ "name": "maincode",
21
+ "path": "main.lua",
22
+ "kind": "LuaCode",
23
+ },
24
+ {
25
+ "name": "graphics",
26
+ "path": "./assets/sprites.tic",
27
+ "kind": "Tic80Cartridge",
28
+ "chunks": [
29
+ "TILES",
30
+ "SFX"
31
+ ],
32
+ },
33
+ {
34
+ "name": "music",
35
+ "path": "./assets/song.tic",
36
+ "kind": "Tic80Cartridge",
37
+ "chunks": [
38
+ "WAVEFORMS",
39
+ "MUSIC_PATTERNS",
40
+ "SFX",
41
+ "MUSIC_TRACKS"
42
+ ],
43
+ },
44
+ ],
45
+ "assembly": {
46
+ "lua": {
47
+ "minify": true,
48
+ },
49
+ "blocks": [
50
+ {
51
+ "chunks": [
52
+ "CODE"
53
+ ],
54
+ "asset": "maincode",
55
+ },
56
+ {
57
+ "asset": {
58
+ "import": "graphics",
59
+ "chunks": [
60
+ "TILES",
61
+ "SPRITES"
62
+ ],
63
+ },
64
+ },
65
+ {
66
+ "asset": {
67
+ "import": "music",
68
+ "chunks": [
69
+ "WAVEFORMS",
70
+ "MUSIC_PATTERNS",
71
+ "SFX",
72
+ "MUSIC_TRACKS"
73
+ ],
74
+ },
75
+ },
76
+ ],
77
+ },
78
+ "buildConfigurations": {
79
+ "debug": {
80
+ "project": {
81
+ "binDir": "./debug/bin",
82
+ "objDir": "./debug/obj",
83
+ },
84
+ "variables": {
85
+ "version": "1.0.0-debug",
86
+ },
87
+ "assembly": {
88
+ "lua": {
89
+ "minify": false,
90
+ },
91
+ },
92
+ },
93
+ },
94
+ }