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,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kSourceEncoding = void 0;
4
+ exports.resolveSourceEncoding = resolveSourceEncoding;
5
+ exports.decodeSourceDataFromBytes = decodeSourceDataFromBytes;
6
+ exports.decodeSourceDataFromString = decodeSourceDataFromString;
7
+ exports.encodeBinaryToString = encodeBinaryToString;
8
+ exports.isStringSourceEncoding = isStringSourceEncoding;
9
+ const enum_1 = require("../enum");
10
+ const b85_1 = require("./b85");
11
+ const hex_1 = require("./hex");
12
+ const lz_1 = require("./lz");
13
+ exports.kSourceEncoding = (0, enum_1.defineEnum)({
14
+ raw: { value: "raw", input: "bytes" },
15
+ lz: { value: "lz", input: "bytes" },
16
+ hex: { value: "hex", input: "string" },
17
+ "b85+1": { value: "b85+1", input: "string" },
18
+ "lz85+1": { value: "lz85+1", input: "string" },
19
+ });
20
+ const sourceEncodings = {
21
+ raw: {
22
+ key: "raw",
23
+ input: "bytes",
24
+ decodeFromBytes: (data) => data,
25
+ },
26
+ lz: {
27
+ key: "lz",
28
+ input: "bytes",
29
+ decodeFromBytes: (data) => (0, lz_1.lzDecompress)(data),
30
+ },
31
+ hex: {
32
+ key: "hex",
33
+ input: "string",
34
+ decodeFromString: (text) => (0, hex_1.decodeHexString)(text),
35
+ encodeToString: (data) => (0, hex_1.encodeHexString)(data),
36
+ },
37
+ "b85+1": {
38
+ key: "b85+1",
39
+ input: "string",
40
+ decodeFromString: (text) => (0, b85_1.base85Plus1Decode)(text),
41
+ encodeToString: (data) => (0, b85_1.base85Plus1Encode)(data),
42
+ },
43
+ "lz85+1": {
44
+ key: "lz85+1",
45
+ input: "string",
46
+ decodeFromString: (text) => (0, lz_1.lzDecompress)((0, b85_1.base85Plus1Decode)(text)),
47
+ encodeToString: (data) => (0, b85_1.base85Plus1Encode)((0, lz_1.lzCompress)(data, lz_1.gSomaticLZDefaultConfig)),
48
+ },
49
+ };
50
+ function resolveSourceEncoding(encoding) {
51
+ const info = exports.kSourceEncoding.coerceByKey(encoding);
52
+ if (!info) {
53
+ throw new Error(`Unsupported source encoding: ${encoding}`);
54
+ }
55
+ return sourceEncodings[info.key];
56
+ }
57
+ function decodeSourceDataFromBytes(encoding, data) {
58
+ const codec = sourceEncodings[encoding];
59
+ if (!codec.decodeFromBytes) {
60
+ throw new Error(`Source encoding ${encoding} expects string input`);
61
+ }
62
+ return codec.decodeFromBytes(data);
63
+ }
64
+ function decodeSourceDataFromString(encoding, text) {
65
+ const codec = sourceEncodings[encoding];
66
+ if (!codec.decodeFromString) {
67
+ throw new Error(`Source encoding ${encoding} expects binary input`);
68
+ }
69
+ return codec.decodeFromString(text);
70
+ }
71
+ function encodeBinaryToString(encoding, data) {
72
+ const codec = sourceEncodings[encoding];
73
+ if (!codec.encodeToString) {
74
+ throw new Error(`Source encoding ${encoding} does not support string encoding`);
75
+ }
76
+ return codec.encodeToString(data);
77
+ }
78
+ function isStringSourceEncoding(encoding) {
79
+ return sourceEncodings[encoding].input === "string";
80
+ }
81
+ //# sourceMappingURL=codecRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecRegistry.js","sourceRoot":"","sources":["../../../src/utils/encoding/codecRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function decodeHexString(input: string): Uint8Array;
2
+ export declare function encodeHexString(data: Uint8Array): string;
3
+ //# sourceMappingURL=hex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../src/utils/encoding/hex.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAgBzD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAMxD"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // hex encoded string helpers
3
+ // e.g. "4a 6f 68 6e" <--> Uint8Array [0x4a, 0x6f, 0x68, 0x6e]
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.decodeHexString = decodeHexString;
6
+ exports.encodeHexString = encodeHexString;
7
+ function decodeHexString(input) {
8
+ const trimmed = input.replace(/\s+/g, "");
9
+ if (trimmed.length % 2 !== 0) {
10
+ throw new Error(`hex decode: input length ${trimmed.length} is not even`);
11
+ }
12
+ const out = new Uint8Array(trimmed.length / 2);
13
+ for (let i = 0; i < trimmed.length; i += 2) {
14
+ const byteStr = trimmed.slice(i, i + 2);
15
+ const value = Number.parseInt(byteStr, 16);
16
+ if (Number.isNaN(value)) {
17
+ throw new Error(`hex decode: invalid byte '${byteStr}' at index ${i}`);
18
+ }
19
+ out[i / 2] = value;
20
+ }
21
+ return out;
22
+ }
23
+ function encodeHexString(data) {
24
+ let out = "";
25
+ for (const byte of data) {
26
+ out += byte.toString(16).padStart(2, "0");
27
+ }
28
+ return out;
29
+ }
30
+ //# sourceMappingURL=hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../src/utils/encoding/hex.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,8DAA8D;;AAE9D,0CAgBC;AAED,0CAMC;AAxBD,SAAgB,eAAe,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,eAAe,CAAC,IAAgB;IAC9C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface LZConfig {
2
+ windowSize: number;
3
+ minMatchLength: number;
4
+ maxMatchLength: number;
5
+ useRLE: boolean;
6
+ }
7
+ /** ---- Decompress ---- */
8
+ export declare function lzDecompress(encoded: Uint8Array): Uint8Array;
9
+ export declare const gSomaticLZDefaultConfig: LZConfig;
10
+ /** ---- Compress (greedy) ---- */
11
+ export declare function lzCompress(input: Uint8Array, cfg: LZConfig): Uint8Array;
12
+ //# sourceMappingURL=lz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lz.d.ts","sourceRoot":"","sources":["../../../src/utils/encoding/lz.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAoCD,2BAA2B;AAC3B,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAsC5D;AAKD,eAAO,MAAM,uBAAuB,EAAE,QAKrC,CAAC;AAEF,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,GAAG,UAAU,CAkIvE"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ /*
3
+
4
+ Lua reference decoder (peek - poke)
5
+
6
+
7
+
8
+ -- Read unsigned LEB128 varint from memory.
9
+ -- base: start address of encoded stream
10
+ -- si: current offset (0-based) into the stream
11
+ -- srcLen: total length of the encoded stream (in bytes)
12
+ -- Returns: value, next_si
13
+ local function varint(base, si, srcLen)
14
+ local x, f = 0, 1
15
+ while true do
16
+ local b = peek(base + si)
17
+ si = si + 1
18
+ x = x + (b % 0x80) * f
19
+ if b < 0x80 then
20
+ return x, si
21
+ end
22
+ f = f * 0x80
23
+ end
24
+ end
25
+
26
+ -- LZ-Decompress from [src .. src+srcLen-1] into [dst ..).
27
+ -- Returns number of decompressed bytes written.
28
+ local function lzdm(src, srcLen, dst)
29
+ local si, di = 0, 0
30
+ while si < srcLen do
31
+ local t = peek(src + si)
32
+ si = si + 1
33
+ if t == 0 then
34
+ local l
35
+ l, si = varint(src, si, srcLen)
36
+ for j = 1, l do
37
+ poke(dst + di, peek(src + si))
38
+ si = si + 1
39
+ di = di + 1
40
+ end
41
+ else
42
+ local l, d
43
+ l, si = varint(src, si, srcLen)
44
+ d, si = varint(src, si, srcLen)
45
+ for j = 1, l do
46
+ poke(dst + di, peek(dst + di - d))
47
+ di = di + 1
48
+ end
49
+ end
50
+ end
51
+ return di
52
+ end
53
+
54
+
55
+ */
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.gSomaticLZDefaultConfig = void 0;
58
+ exports.lzDecompress = lzDecompress;
59
+ exports.lzCompress = lzCompress;
60
+ /** ---- Varint (unsigned LEB128) ---- */
61
+ function writeVarint(out, x) {
62
+ // x must be >= 0 and <= 2^31-ish; good enough for asset sizes
63
+ while (x >= 0x80) {
64
+ out.push((x & 0x7f) | 0x80);
65
+ x >>>= 7;
66
+ }
67
+ out.push(x);
68
+ }
69
+ function readVarint(data, i) {
70
+ let x = 0;
71
+ let shift = 0;
72
+ while (true) {
73
+ if (i >= data.length)
74
+ throw new Error("truncated varint");
75
+ const b = data[i++];
76
+ x |= (b & 0x7f) << shift;
77
+ if ((b & 0x80) === 0)
78
+ break;
79
+ shift += 7;
80
+ if (shift > 35)
81
+ throw new Error("varint too large");
82
+ }
83
+ return { value: x >>> 0, next: i };
84
+ }
85
+ /** Roughly how many bytes a varint would take (for cheap cost comparisons). */
86
+ function varintSize(x) {
87
+ let n = 1;
88
+ while (x >= 0x80) {
89
+ n++;
90
+ x >>>= 7;
91
+ }
92
+ return n;
93
+ }
94
+ /** ---- Decompress ---- */
95
+ function lzDecompress(encoded) {
96
+ const out = [];
97
+ let i = 0;
98
+ while (i < encoded.length) {
99
+ const tag = encoded[i++];
100
+ if (tag === 0x00) {
101
+ const r = readVarint(encoded, i);
102
+ i = r.next;
103
+ const len = r.value;
104
+ if (i + len > encoded.length)
105
+ throw new Error("truncated literal run");
106
+ for (let j = 0; j < len; j++)
107
+ out.push(encoded[i++]);
108
+ }
109
+ else if (tag === 0x80) {
110
+ const rl = readVarint(encoded, i);
111
+ i = rl.next;
112
+ const rd = readVarint(encoded, i);
113
+ i = rd.next;
114
+ const len = rl.value;
115
+ const dist = rd.value;
116
+ if (dist <= 0 || dist > out.length)
117
+ throw new Error("invalid match distance");
118
+ for (let j = 0; j < len; j++) {
119
+ out.push(out[out.length - dist]);
120
+ }
121
+ }
122
+ else if (tag === 0x81) {
123
+ const rl = readVarint(encoded, i);
124
+ i = rl.next;
125
+ const len = rl.value;
126
+ if (i >= encoded.length)
127
+ throw new Error("truncated rle");
128
+ const v = encoded[i++];
129
+ for (let j = 0; j < len; j++)
130
+ out.push(v);
131
+ }
132
+ else {
133
+ throw new Error(`unknown tag 0x${tag.toString(16)}`);
134
+ }
135
+ }
136
+ return Uint8Array.from(out);
137
+ }
138
+ // note that the playroutine's LZ decoder may need to be modified if this changes.
139
+ // for example it does NOT support RLE (0x81) opcodes.
140
+ // Also the window size affects decoder memory usage.
141
+ exports.gSomaticLZDefaultConfig = {
142
+ windowSize: 16,
143
+ minMatchLength: 4,
144
+ maxMatchLength: 30,
145
+ useRLE: false,
146
+ };
147
+ /** ---- Compress (greedy) ---- */
148
+ function lzCompress(input, cfg) {
149
+ const { windowSize, minMatchLength, maxMatchLength, useRLE } = cfg;
150
+ if (windowSize < 1)
151
+ throw new Error("windowSize must be >= 1");
152
+ if (minMatchLength < 2)
153
+ throw new Error("minMatchLength should be >= 2 (usually 3)");
154
+ if (maxMatchLength < minMatchLength)
155
+ throw new Error("maxMatchLength must be >= minMatchLength");
156
+ const out = [];
157
+ const lits = [];
158
+ function flushLits() {
159
+ if (lits.length === 0)
160
+ return;
161
+ out.push(0x00);
162
+ writeVarint(out, lits.length);
163
+ out.push(...lits);
164
+ lits.length = 0;
165
+ }
166
+ function emitMatch(len, dist) {
167
+ out.push(0x80);
168
+ writeVarint(out, len);
169
+ writeVarint(out, dist);
170
+ }
171
+ function emitRLE(len, value) {
172
+ out.push(0x81);
173
+ writeVarint(out, len);
174
+ out.push(value);
175
+ }
176
+ // Estimate encoded size of candidates (to choose between LZ vs RLE vs literals).
177
+ const matchCost = (len, dist) => 1 + varintSize(len) + varintSize(dist); // 0x80 + len + dist
178
+ const rleCost = (len) => 1 + varintSize(len) + 1; // 0x81 + len + value
179
+ const litCost = (len) => 1 + varintSize(len) + len; // 0x00 + len + bytes
180
+ let i = 0;
181
+ while (i < input.length) {
182
+ // Optional: detect RLE run at i
183
+ let rleLen = 0;
184
+ if (useRLE) {
185
+ const v = input[i];
186
+ let k = i + 1;
187
+ const cap = Math.min(input.length, i + maxMatchLength);
188
+ while (k < cap && input[k] === v)
189
+ k++;
190
+ rleLen = k - i;
191
+ }
192
+ // Find best LZ match (greedy longest within window, capped)
193
+ let bestLen = 0;
194
+ let bestDist = 0;
195
+ const maxDist = Math.min(windowSize, i);
196
+ const maxLenCap = Math.min(maxMatchLength, input.length - i);
197
+ // Simple brute-force search. For tuning/testing this is fine.
198
+ for (let dist = 1; dist <= maxDist; dist++) {
199
+ let len = 0;
200
+ // Compare input[i + len] vs input[i + len - dist]
201
+ while (len < maxLenCap && input[i + len] === input[i + len - dist])
202
+ len++;
203
+ if (len > bestLen) {
204
+ bestLen = len;
205
+ bestDist = dist;
206
+ if (bestLen === maxLenCap)
207
+ break; // can't do better
208
+ }
209
+ }
210
+ const canMatch = bestLen >= minMatchLength;
211
+ const canRLE = useRLE && rleLen >= minMatchLength;
212
+ if (!canMatch && !canRLE) {
213
+ // literal byte
214
+ lits.push(input[i++]);
215
+ // optional: keep literals from growing too huge (not necessary, but keeps memory tame)
216
+ if (lits.length >= 1 << 15)
217
+ flushLits();
218
+ continue;
219
+ }
220
+ // Choose best operation by cost-per-byte-saved. We'll compare:
221
+ // - LZ match candidate (if any)
222
+ // - RLE candidate (if any)
223
+ // - otherwise literals
224
+ //
225
+ // For fairness, we compare costs for encoding exactly N bytes of output.
226
+ // For LZ, N = bestLen; for RLE, N = rleLen.
227
+ //
228
+ // If both exist, we can also clamp to the same N and compare, but
229
+ // typically you want the op that encodes MORE bytes cheaply.
230
+ let choose = "LIT";
231
+ let useLen = 1;
232
+ // Start with "literal run" as baseline (encode next byte as literal; we'll accumulate)
233
+ let bestScore = Infinity;
234
+ if (canMatch) {
235
+ const len = Math.min(bestLen, maxLenCap);
236
+ const cost = matchCost(len, bestDist);
237
+ const score = cost / len; // lower is better
238
+ bestScore = score;
239
+ choose = "LZ";
240
+ useLen = len;
241
+ }
242
+ if (canRLE) {
243
+ const len = Math.min(rleLen, maxLenCap);
244
+ const cost = rleCost(len);
245
+ const score = cost / len;
246
+ // Prefer RLE if it wins on score, or ties but is longer (often helps)
247
+ if (score < bestScore || (score === bestScore && len > useLen)) {
248
+ bestScore = score;
249
+ choose = "RLE";
250
+ useLen = len;
251
+ }
252
+ }
253
+ // Emit chosen op
254
+ flushLits();
255
+ if (choose === "LZ") {
256
+ emitMatch(useLen, bestDist);
257
+ i += useLen;
258
+ }
259
+ else if (choose === "RLE") {
260
+ emitRLE(useLen, input[i]);
261
+ i += useLen;
262
+ }
263
+ else {
264
+ // Shouldn't happen given canMatch/canRLE checks, but keep safe:
265
+ lits.push(input[i++]);
266
+ }
267
+ }
268
+ flushLits();
269
+ return Uint8Array.from(out);
270
+ }
271
+ //# sourceMappingURL=lz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lz.js","sourceRoot":"","sources":["../../../src/utils/encoding/lz.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ type EnumValue = string | number;
2
+ type EnumDef = Record<string, {
3
+ value: EnumValue;
4
+ } & Record<string, any>>;
5
+ type EnumKeyUnion<D extends EnumDef> = keyof D;
6
+ type EnumValueUnion<D extends EnumDef> = D[EnumKeyUnion<D>]["value"];
7
+ type EnumInfo<D extends EnumDef, K extends EnumKeyUnion<D>> = {
8
+ key: K;
9
+ } & D[K];
10
+ type EnumInfoUnion<D extends EnumDef> = {
11
+ [K in EnumKeyUnion<D>]: {
12
+ key: K;
13
+ } & D[K];
14
+ }[EnumKeyUnion<D>];
15
+ export declare function defineEnum<const D extends EnumDef>(def: D): {
16
+ readonly $key: keyof D;
17
+ readonly $value: EnumValueUnion<D>;
18
+ readonly $info: EnumInfoUnion<D>;
19
+ readonly valueByKey: keyof D extends infer T extends keyof D ? { [K in T]: D[K]["value"]; } : never;
20
+ readonly infoByKey: keyof D extends infer T_1 extends keyof D ? { [K_1 in T_1]: EnumInfo<D, K_1>; } : never;
21
+ readonly key: keyof D extends infer T_2 extends keyof D ? { [K_2 in T_2]: K_2; } : never;
22
+ readonly byKey: D;
23
+ readonly infoByValue: Map<EnumValueUnion<D>, EnumInfoUnion<D>>;
24
+ readonly keyByValue: Map<EnumValueUnion<D>, keyof D>;
25
+ readonly keys: [keyof D, ...(keyof D)[]];
26
+ readonly values: EnumValueUnion<D>[];
27
+ readonly infos: EnumInfoUnion<D>[];
28
+ readonly valuesSet: Set<EnumValueUnion<D>>;
29
+ readonly keysSet: Set<keyof D>;
30
+ readonly isValidKey: (k: any) => k is EnumKeyUnion<D>;
31
+ readonly coerceByKey: {
32
+ (k: any): EnumInfoUnion<D> | undefined;
33
+ (k: any, fallbackKey: keyof typeof def): EnumInfoUnion<D>;
34
+ };
35
+ readonly coerceByValue: {
36
+ (v: any): EnumInfoUnion<D> | undefined;
37
+ (v: any, fallbackKey: keyof typeof def): EnumInfoUnion<D>;
38
+ };
39
+ readonly coerceByValueOrKey: {
40
+ (vk: any): EnumInfoUnion<D> | undefined;
41
+ (vk: any, fallbackKey: keyof typeof def): EnumInfoUnion<D>;
42
+ };
43
+ };
44
+ export {};
45
+ //# sourceMappingURL=enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/utils/enum.ts"],"names":[],"mappings":"AA8BA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAIjC,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAE1E,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,MAAM,CAAC,CAAC;AAC/C,KAAK,cAAc,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAIrE,KAAK,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IAC5D,GAAG,EAAE,CAAC,CAAC;CACR,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACT,KAAK,aAAa,CAAC,CAAC,SAAS,OAAO,IAAI;KACrC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,CAAC,CAAA;KAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAenB,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC;;;;sEAqBrD,CAAC;;;;;;;;;;;6BAgEmB,GAAG,KAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;;YApCxB,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS;YAClC,GAAG,eAAe,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;;;YAWnD,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS;YAClC,GAAG,eAAe,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;;;aAS/C,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS;aAClC,GAAG,eAAe,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;;EAsDvF"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ // utility to define enums with all the extras without needing tons of
3
+ // boilerplate and symbols scattered around also allows enums to attach more
4
+ // complex arbitrary data to them.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.defineEnum = defineEnum;
7
+ // const ExampleDef = {
8
+ // A: {value: 1, title: "First"},
9
+ // B: {value: 2, title: "Second"},
10
+ // } as const;
11
+ // type ExampleKey = EnumKeyUnion<typeof ExampleDef>; // "A" | "B"
12
+ // type ExampleVal = EnumValueUnion<typeof ExampleDef>; // 1 | 2
13
+ // type ExampleInfoA = EnumInfo<typeof ExampleDef, "A">;
14
+ // // now let's make a type which unions all infos.
15
+ // // {key: "A", value: 1, title: "First"} | {key: "B", value: 2, title:
16
+ // "Second"} type ExampleInfoUnion = EnumInfoUnion<typeof ExampleDef>;
17
+ function defineEnum(def) {
18
+ // ok so what type do we actualyl want for keys?
19
+ // -> ["KEY1", "KEY2"] -- explict literal array, not sure if this is actually
20
+ // possible without some recursive type magic
21
+ // -> ("KEY1" | "KEY2")[]
22
+ // -> Set<"KEY1" | "KEY2">
23
+ // etc. ?
24
+ // const keys = typedKeys(def);
25
+ const keys = Object.keys(def); //(keyof D)[]; // specify that
26
+ //there are at least 1; then it
27
+ //can be used in z.enum().
28
+ // Set<string>() of keys
29
+ // []
30
+ // key.TIC80 -> "TIC80"
31
+ const key = Object.fromEntries(keys.map((k) => [k, k]));
32
+ // valueByKey.TIC80 -> 1
33
+ const valueByKey = Object.fromEntries(keys.map((k) => [k, def[k].value]));
34
+ const values = keys.map((k) => valueByKey[k]);
35
+ const infos = keys.map((k) => ({ key: k, ...def[k] }));
36
+ // Reverse lookups (Map handles number keys cleanly)
37
+ const keyByValue = new Map();
38
+ const infoByValue = new Map();
39
+ const infoByKey = Object.fromEntries(keys.map((k) => [k, { key: k, ...def[k] }]));
40
+ for (const k of keys) {
41
+ const v = valueByKey[k];
42
+ // Optional: detect duplicate values (uncomment to hard fail)
43
+ // if (keyByValue.has(v)) throw new Error(`Duplicate enum value:
44
+ // ${String(v)}`);
45
+ keyByValue.set(v, k);
46
+ infoByValue.set(v, infos.find((x) => x.key === k));
47
+ }
48
+ // phantom fields for type extraction convenience
49
+ const $key = null;
50
+ const $value = null;
51
+ const $info = null;
52
+ function _coerceByKey(k, fallbackKey) {
53
+ if (typeof k !== "string") {
54
+ return fallbackKey ? infoByKey[fallbackKey] : undefined;
55
+ }
56
+ if (k in def) {
57
+ return infoByKey[k];
58
+ }
59
+ return fallbackKey ? infoByKey[fallbackKey] : undefined;
60
+ }
61
+ function _coerceByValue(v, fallbackKey) {
62
+ const info = infoByValue.get(v);
63
+ if (info) {
64
+ return info;
65
+ }
66
+ return fallbackKey ? infoByKey[fallbackKey] : undefined;
67
+ }
68
+ function _coerceByValueOrKey(vk, fallbackKey) {
69
+ // prefer key first
70
+ const infoByKeyResult = _coerceByKey(vk);
71
+ if (infoByKeyResult) {
72
+ return infoByKeyResult;
73
+ }
74
+ if (fallbackKey === undefined) {
75
+ return _coerceByValue(vk);
76
+ }
77
+ return _coerceByValue(vk, fallbackKey);
78
+ }
79
+ function isValidKey(k) {
80
+ return typeof k === "string" && k in def;
81
+ }
82
+ return {
83
+ // phantom fields for type extraction
84
+ $key,
85
+ $value,
86
+ $info,
87
+ // record objects
88
+ valueByKey, // e.valueByKey.TIC80 -> 1
89
+ infoByKey, // e.infoByKey.TIC80 -> {key: "TIC80", value: 1, title:
90
+ // "TIC-80"}
91
+ key, // e.key.TIC80 -> "TIC80" (so you can refer to keys like traditional
92
+ // enums)
93
+ byKey: def, // e.byKey.TIC80 -> {value: 1, title: "TIC-80"} -- this is just
94
+ // the original def
95
+ // maps
96
+ infoByValue,
97
+ keyByValue,
98
+ // arrays
99
+ keys, // array of keys e.keys -> ("TIC80" | "AMIGAMOD")[].
100
+ values,
101
+ infos, // flat array of all infos
102
+ // sets
103
+ valuesSet: new Set(values),
104
+ keysSet: new Set(keys),
105
+ // query fns
106
+ isValidKey,
107
+ // todo: others? a lot can be done via coersions.
108
+ // coercion fns (lookup from `any`, with fallback)
109
+ coerceByKey: _coerceByKey,
110
+ coerceByValue: _coerceByValue,
111
+ coerceByValueOrKey: _coerceByValueOrKey,
112
+ };
113
+ }
114
+ // const ExampleDef = {
115
+ // A: {value: 1, title: "First"},
116
+ // B: {value: 2, title: "Second"},
117
+ // } as const;
118
+ // type ExampleKey = EnumKeyUnion<typeof ExampleDef>; // "A" | "B"
119
+ // type ExampleVal = EnumValueUnion<typeof ExampleDef>; // 1 | 2
120
+ // type ExampleInfoA = EnumInfo<typeof ExampleDef, "A">;
121
+ // // now let's make a type which unions all infos.
122
+ // // {key: "A", value: 1, title: "First"} | {key: "B", value: 2, title:
123
+ // "Second"} type ExampleInfoUnion = EnumInfoUnion<typeof ExampleDef>;
124
+ // const kExampleEnum = defineEnum(ExampleDef);
125
+ // const throwaway = {
126
+ // aKey: kExampleEnum.key.A,
127
+ // aValue: kExampleEnum.valueByKey.A,
128
+ // aInfo: kExampleEnum.infoByKey.A,
129
+ // aInfoByValue: kExampleEnum.infoByValue.get(1),
130
+ // x: kExampleEnum.values,
131
+ // // y: kExampleEnum.values,
132
+ // // z: kExampleEnum.infos,
133
+ // };
134
+ // throwaway.x[0]
135
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/utils/enum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type Ok<T> = {
2
+ ok: true;
3
+ value: T;
4
+ };
5
+ export type Err = {
6
+ ok: false;
7
+ error: string;
8
+ };
9
+ export type Result<T> = Ok<T> | Err;
10
+ export declare function ok<T>(value: T): Ok<T>;
11
+ export declare function err<T = never>(error: string): Result<T>;
12
+ export declare function assert(condition?: boolean, message?: string): asserts condition;
13
+ //# sourceMappingURL=errorHandling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI;IAClB,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AACF,MAAM,MAAM,GAAG,GAAG;IAChB,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAEpC,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAErC;AAED,wBAAgB,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAEvD;AAED,wBAAgB,MAAM,CAAC,SAAS,GAAE,OAAc,EAAE,OAAO,GAAE,MAA2B,GAAG,OAAO,CAAC,SAAS,CAKzG"}