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.
- package/.attachments/support_me_on_kofi_beige.png +0 -0
- package/.env.example +3 -0
- package/.prettierignore +10 -0
- package/LICENSE +15 -0
- package/README.md +429 -0
- package/debug/obj/resolvedManifest.ticbuild.jsonc +108 -0
- package/dist/backend/ImportedResource.d.ts +11 -0
- package/dist/backend/ImportedResource.d.ts.map +1 -0
- package/dist/backend/ImportedResource.js +53 -0
- package/dist/backend/ImportedResource.js.map +1 -0
- package/dist/backend/ImportedResourceTypes.d.ts +24 -0
- package/dist/backend/ImportedResourceTypes.d.ts.map +1 -0
- package/dist/backend/ImportedResourceTypes.js +35 -0
- package/dist/backend/ImportedResourceTypes.js.map +1 -0
- package/dist/backend/codeBanking.test.d.ts +2 -0
- package/dist/backend/codeBanking.test.d.ts.map +1 -0
- package/dist/backend/codeBanking.test.js.map +1 -0
- package/dist/backend/importResources.d.ts +4 -0
- package/dist/backend/importResources.d.ts.map +1 -0
- package/dist/backend/importResources.js +58 -0
- package/dist/backend/importResources.js.map +1 -0
- package/dist/backend/importUtils.d.ts +14 -0
- package/dist/backend/importUtils.d.ts.map +1 -0
- package/dist/backend/importUtils.js +77 -0
- package/dist/backend/importUtils.js.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.d.ts +47 -0
- package/dist/backend/importers/LuaCodeImporter.d.ts.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.js +196 -0
- package/dist/backend/importers/LuaCodeImporter.js.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.test.d.ts +2 -0
- package/dist/backend/importers/LuaCodeImporter.test.d.ts.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.test.js.map +1 -0
- package/dist/backend/importers/binaryResourceImporter.d.ts +22 -0
- package/dist/backend/importers/binaryResourceImporter.d.ts.map +1 -0
- package/dist/backend/importers/binaryResourceImporter.js +53 -0
- package/dist/backend/importers/binaryResourceImporter.js.map +1 -0
- package/dist/backend/importers/luaImporter.d.ts +1 -0
- package/dist/backend/importers/luaImporter.d.ts.map +1 -0
- package/dist/backend/importers/luaImporter.js +3 -0
- package/dist/backend/importers/luaImporter.js.map +1 -0
- package/dist/backend/importers/textResourceImporter.d.ts +23 -0
- package/dist/backend/importers/textResourceImporter.d.ts.map +1 -0
- package/dist/backend/importers/textResourceImporter.js +55 -0
- package/dist/backend/importers/textResourceImporter.js.map +1 -0
- package/dist/backend/importers/tic80CartImporter.d.ts +21 -0
- package/dist/backend/importers/tic80CartImporter.d.ts.map +1 -0
- package/dist/backend/importers/tic80CartImporter.js +96 -0
- package/dist/backend/importers/tic80CartImporter.js.map +1 -0
- package/dist/backend/loadAllImports.d.ts +1 -0
- package/dist/backend/loadAllImports.d.ts.map +1 -0
- package/dist/backend/loadAllImports.js +3 -0
- package/dist/backend/loadAllImports.js.map +1 -0
- package/dist/backend/luaBinaryEncoding.d.ts +6 -0
- package/dist/backend/luaBinaryEncoding.d.ts.map +1 -0
- package/dist/backend/luaBinaryEncoding.js +94 -0
- package/dist/backend/luaBinaryEncoding.js.map +1 -0
- package/dist/backend/luaPreprocessor.d.ts +8 -0
- package/dist/backend/luaPreprocessor.d.ts.map +1 -0
- package/dist/backend/luaPreprocessor.js +862 -0
- package/dist/backend/luaPreprocessor.js.map +1 -0
- package/dist/backend/luaPreprocessor.test.d.ts +2 -0
- package/dist/backend/luaPreprocessor.test.d.ts.map +1 -0
- package/dist/backend/luaPreprocessor.test.js.map +1 -0
- package/dist/backend/manifestLoader.d.ts +19 -0
- package/dist/backend/manifestLoader.d.ts.map +1 -0
- package/dist/backend/manifestLoader.js +142 -0
- package/dist/backend/manifestLoader.js.map +1 -0
- package/dist/backend/manifestLoader.test.d.ts +2 -0
- package/dist/backend/manifestLoader.test.d.ts.map +1 -0
- package/dist/backend/manifestLoader.test.js.map +1 -0
- package/dist/backend/manifestTypes.d.ts +454 -0
- package/dist/backend/manifestTypes.d.ts.map +1 -0
- package/dist/backend/manifestTypes.js +28 -0
- package/dist/backend/manifestTypes.js.map +1 -0
- package/dist/backend/project.d.ts +24 -0
- package/dist/backend/project.d.ts.map +1 -0
- package/dist/backend/project.js +159 -0
- package/dist/backend/project.js.map +1 -0
- package/dist/backend/projectCore.d.ts +34 -0
- package/dist/backend/projectCore.d.ts.map +1 -0
- package/dist/backend/projectCore.js +226 -0
- package/dist/backend/projectCore.js.map +1 -0
- package/dist/backend/tic80Resolver.d.ts +6 -0
- package/dist/backend/tic80Resolver.d.ts.map +1 -0
- package/dist/backend/tic80Resolver.js +66 -0
- package/dist/backend/tic80Resolver.js.map +1 -0
- package/dist/buildInfo.d.ts +9 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +13 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/frontend/build.d.ts +3 -0
- package/dist/frontend/build.d.ts.map +1 -0
- package/dist/frontend/build.js +8 -0
- package/dist/frontend/build.js.map +1 -0
- package/dist/frontend/codeBankWarnings.test.d.ts +2 -0
- package/dist/frontend/codeBankWarnings.test.d.ts.map +1 -0
- package/dist/frontend/codeBankWarnings.test.js.map +1 -0
- package/dist/frontend/core.d.ts +3 -0
- package/dist/frontend/core.d.ts.map +1 -0
- package/dist/frontend/core.js +259 -0
- package/dist/frontend/core.js.map +1 -0
- package/dist/frontend/init.d.ts +7 -0
- package/dist/frontend/init.d.ts.map +1 -0
- package/dist/frontend/init.js +95 -0
- package/dist/frontend/init.js.map +1 -0
- package/dist/frontend/parseOptions.d.ts +7 -0
- package/dist/frontend/parseOptions.d.ts.map +1 -0
- package/dist/frontend/parseOptions.js +68 -0
- package/dist/frontend/parseOptions.js.map +1 -0
- package/dist/frontend/run.d.ts +3 -0
- package/dist/frontend/run.d.ts.map +1 -0
- package/dist/frontend/run.js +63 -0
- package/dist/frontend/run.js.map +1 -0
- package/dist/frontend/watch.d.ts +3 -0
- package/dist/frontend/watch.d.ts.map +1 -0
- package/dist/frontend/watch.js +208 -0
- package/dist/frontend/watch.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +191 -0
- package/dist/index.js.map +1 -0
- package/dist/obj/resolvedManifest.ticbuild.jsonc +110 -0
- package/dist/obj/variables.json +19 -0
- package/dist/utils/algorithms.d.ts +4 -0
- package/dist/utils/algorithms.d.ts.map +1 -0
- package/dist/utils/algorithms.js +15 -0
- package/dist/utils/algorithms.js.map +1 -0
- package/dist/utils/algorithms.test.d.ts +2 -0
- package/dist/utils/algorithms.test.d.ts.map +1 -0
- package/dist/utils/algorithms.test.js.map +1 -0
- package/dist/utils/bin.d.ts +4 -0
- package/dist/utils/bin.d.ts.map +1 -0
- package/dist/utils/bin.js +16 -0
- package/dist/utils/bin.js.map +1 -0
- package/dist/utils/charMap.d.ts +28 -0
- package/dist/utils/charMap.d.ts.map +1 -0
- package/dist/utils/charMap.js +31 -0
- package/dist/utils/charMap.js.map +1 -0
- package/dist/utils/console.d.ts +10 -0
- package/dist/utils/console.d.ts.map +1 -0
- package/dist/utils/console.js +66 -0
- package/dist/utils/console.js.map +1 -0
- package/dist/utils/encoding/b85.d.ts +5 -0
- package/dist/utils/encoding/b85.d.ts.map +1 -0
- package/dist/utils/encoding/b85.js +136 -0
- package/dist/utils/encoding/b85.js.map +1 -0
- package/dist/utils/encoding/codecRegistry.d.ts +333 -0
- package/dist/utils/encoding/codecRegistry.d.ts.map +1 -0
- package/dist/utils/encoding/codecRegistry.js +81 -0
- package/dist/utils/encoding/codecRegistry.js.map +1 -0
- package/dist/utils/encoding/hex.d.ts +3 -0
- package/dist/utils/encoding/hex.d.ts.map +1 -0
- package/dist/utils/encoding/hex.js +30 -0
- package/dist/utils/encoding/hex.js.map +1 -0
- package/dist/utils/encoding/lz.d.ts +12 -0
- package/dist/utils/encoding/lz.d.ts.map +1 -0
- package/dist/utils/encoding/lz.js +271 -0
- package/dist/utils/encoding/lz.js.map +1 -0
- package/dist/utils/enum.d.ts +45 -0
- package/dist/utils/enum.d.ts.map +1 -0
- package/dist/utils/enum.js +135 -0
- package/dist/utils/enum.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +13 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +18 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/fileSystem.d.ts +16 -0
- package/dist/utils/fileSystem.d.ts.map +1 -0
- package/dist/utils/fileSystem.js +161 -0
- package/dist/utils/fileSystem.js.map +1 -0
- package/dist/utils/help.d.ts +7 -0
- package/dist/utils/help.d.ts.map +1 -0
- package/dist/utils/help.js +87 -0
- package/dist/utils/help.js.map +1 -0
- package/dist/utils/lua/luaUtils.d.ts +1 -0
- package/dist/utils/lua/luaUtils.d.ts.map +1 -0
- package/dist/utils/lua/luaUtils.js +3 -0
- package/dist/utils/lua/luaUtils.js.map +1 -0
- package/dist/utils/lua/lua_alias_expressions.d.ts +20 -0
- package/dist/utils/lua/lua_alias_expressions.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_expressions.js +233 -0
- package/dist/utils/lua/lua_alias_expressions.js.map +1 -0
- package/dist/utils/lua/lua_alias_literals.d.ts +20 -0
- package/dist/utils/lua/lua_alias_literals.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_literals.js +165 -0
- package/dist/utils/lua/lua_alias_literals.js.map +1 -0
- package/dist/utils/lua/lua_alias_shared.d.ts +31 -0
- package/dist/utils/lua/lua_alias_shared.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_shared.js +415 -0
- package/dist/utils/lua/lua_alias_shared.js.map +1 -0
- package/dist/utils/lua/lua_ast.d.ts +9 -0
- package/dist/utils/lua/lua_ast.d.ts.map +1 -0
- package/dist/utils/lua/lua_ast.js +90 -0
- package/dist/utils/lua/lua_ast.js.map +1 -0
- package/dist/utils/lua/lua_fundamentals.d.ts +14 -0
- package/dist/utils/lua/lua_fundamentals.d.ts.map +1 -0
- package/dist/utils/lua/lua_fundamentals.js +93 -0
- package/dist/utils/lua/lua_fundamentals.js.map +1 -0
- package/dist/utils/lua/lua_pack_locals.d.ts +3 -0
- package/dist/utils/lua/lua_pack_locals.d.ts.map +1 -0
- package/dist/utils/lua/lua_pack_locals.js +206 -0
- package/dist/utils/lua/lua_pack_locals.js.map +1 -0
- package/dist/utils/lua/lua_processor.d.ts +65 -0
- package/dist/utils/lua/lua_processor.d.ts.map +1 -0
- package/dist/utils/lua/lua_processor.js +1153 -0
- package/dist/utils/lua/lua_processor.js.map +1 -0
- package/dist/utils/lua/lua_processor.test.d.ts +2 -0
- package/dist/utils/lua/lua_processor.test.d.ts.map +1 -0
- package/dist/utils/lua/lua_processor.test.js.map +1 -0
- package/dist/utils/lua/lua_remove_unused_functions.d.ts +6 -0
- package/dist/utils/lua/lua_remove_unused_functions.d.ts.map +1 -0
- package/dist/utils/lua/lua_remove_unused_functions.js +474 -0
- package/dist/utils/lua/lua_remove_unused_functions.js.map +1 -0
- package/dist/utils/lua/lua_remove_unused_locals.d.ts +3 -0
- package/dist/utils/lua/lua_remove_unused_locals.d.ts.map +1 -0
- package/dist/utils/lua/lua_remove_unused_locals.js +303 -0
- package/dist/utils/lua/lua_remove_unused_locals.js.map +1 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts +3 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts.map +1 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.js +157 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.js.map +1 -0
- package/dist/utils/lua/lua_rename_table_fields.d.ts +3 -0
- package/dist/utils/lua/lua_rename_table_fields.d.ts.map +1 -0
- package/dist/utils/lua/lua_rename_table_fields.js +427 -0
- package/dist/utils/lua/lua_rename_table_fields.js.map +1 -0
- package/dist/utils/lua/lua_renamer.d.ts +3 -0
- package/dist/utils/lua/lua_renamer.d.ts.map +1 -0
- package/dist/utils/lua/lua_renamer.js +229 -0
- package/dist/utils/lua/lua_renamer.js.map +1 -0
- package/dist/utils/lua/lua_simplify.d.ts +3 -0
- package/dist/utils/lua/lua_simplify.d.ts.map +1 -0
- package/dist/utils/lua/lua_simplify.js +541 -0
- package/dist/utils/lua/lua_simplify.js.map +1 -0
- package/dist/utils/lua/lua_utils.d.ts +13 -0
- package/dist/utils/lua/lua_utils.d.ts.map +1 -0
- package/dist/utils/lua/lua_utils.js +58 -0
- package/dist/utils/lua/lua_utils.js.map +1 -0
- package/dist/utils/math.d.ts +2 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +7 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/math.test.d.ts +2 -0
- package/dist/utils/math.test.d.ts.map +1 -0
- package/dist/utils/math.test.js.map +1 -0
- package/dist/utils/templates.d.ts +3 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +57 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tic80/bankSupport.test.d.ts +2 -0
- package/dist/utils/tic80/bankSupport.test.d.ts.map +1 -0
- package/dist/utils/tic80/bankSupport.test.js.map +1 -0
- package/dist/utils/tic80/cartLoader.d.ts +3 -0
- package/dist/utils/tic80/cartLoader.d.ts.map +1 -0
- package/dist/utils/tic80/cartLoader.js +54 -0
- package/dist/utils/tic80/cartLoader.js.map +1 -0
- package/dist/utils/tic80/cartWriter.d.ts +5 -0
- package/dist/utils/tic80/cartWriter.d.ts.map +1 -0
- package/dist/utils/tic80/cartWriter.js +95 -0
- package/dist/utils/tic80/cartWriter.js.map +1 -0
- package/dist/utils/tic80/launch.d.ts +4 -0
- package/dist/utils/tic80/launch.d.ts.map +1 -0
- package/dist/utils/tic80/launch.js +36 -0
- package/dist/utils/tic80/launch.js.map +1 -0
- package/dist/utils/tic80/tic80.d.ts +1149 -0
- package/dist/utils/tic80/tic80.d.ts.map +1 -0
- package/dist/utils/tic80/tic80.js +114 -0
- package/dist/utils/tic80/tic80.js.map +1 -0
- package/dist/utils/utils.d.ts +13 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +109 -0
- package/dist/utils/utils.js.map +1 -0
- package/dist/utils/versionString.d.ts +12 -0
- package/dist/utils/versionString.d.ts.map +1 -0
- package/dist/utils/versionString.js +33 -0
- package/dist/utils/versionString.js.map +1 -0
- package/dist/utils/windowPosition.d.ts +10 -0
- package/dist/utils/windowPosition.d.ts.map +1 -0
- package/dist/utils/windowPosition.js +222 -0
- package/dist/utils/windowPosition.js.map +1 -0
- package/example.ticbuild.jsonc +94 -0
- package/package.json +51 -0
- package/templates/help/build.txt +23 -0
- package/templates/help/init.txt +23 -0
- package/templates/help/main.txt +41 -0
- package/templates/help/run.txt +22 -0
- package/templates/help/tic80.txt +8 -0
- package/templates/help/watch.txt +24 -0
- package/templates/minimal/project.ticbuild.jsonc +43 -0
- package/ticbuild-1.0.0.tgz +0 -0
- 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":";;;AAuDA,sDAMC;AAED,8DAMC;AAED,gEAMC;AAED,oDAMC;AAED,wDAEC;AAzFD,kCAAqC;AACrC,+BAA6D;AAC7D,+BAAyD;AACzD,6BAAyE;AAE5D,QAAA,eAAe,GAAG,IAAA,iBAAU,EAAC;IACxC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IACrC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;CACtC,CAAC,CAAC;AAaZ,MAAM,eAAe,GAAmD;IACtE,GAAG,EAAE;QACH,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;KAChC;IACD,EAAE,EAAE;QACF,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,iBAAY,EAAC,IAAI,CAAC;KAC9C;IACD,GAAG,EAAE;QACH,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qBAAe,EAAC,IAAI,CAAC;QACjD,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qBAAe,EAAC,IAAI,CAAC;KAChD;IACD,OAAO,EAAE;QACP,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,uBAAiB,EAAC,IAAI,CAAC;QACnD,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,uBAAiB,EAAC,IAAI,CAAC;KAClD;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,iBAAY,EAAC,IAAA,uBAAiB,EAAC,IAAI,CAAC,CAAC;QACjE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,uBAAiB,EAAC,IAAA,eAAU,EAAC,IAAI,EAAE,4BAAuB,CAAC,CAAC;KACvF;CACF,CAAC;AAEF,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,uBAAe,CAAC,WAAW,CAAC,QAA6B,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,yBAAyB,CAAC,QAA2B,EAAE,IAAgB;IACrF,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,uBAAuB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,0BAA0B,CAAC,QAA2B,EAAE,IAAY;IAClF,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,uBAAuB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAA2B,EAAE,IAAgB;IAChF,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,mCAAmC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,sBAAsB,CAAC,QAA2B;IAChE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AACtD,CAAC"}
|
|
@@ -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":";AAAA,sEAAsE;AACtE,4EAA4E;AAC5E,kCAAkC;;AA2DlC,gCA8HC;AA3ID,uBAAuB;AACvB,oCAAoC;AACpC,qCAAqC;AACrC,cAAc;AAEd,oEAAoE;AACpE,gEAAgE;AAChE,wDAAwD;AAExD,mDAAmD;AACnD,wEAAwE;AACxE,sEAAsE;AAEtE,SAAgB,UAAU,CAA0B,GAAM;IACxD,gDAAgD;IAChD,6EAA6E;IAC7E,6CAA6C;IAC7C,yBAAyB;IACzB,0BAA0B;IAC1B,SAAS;IACT,+BAA+B;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAA8B,CAAC,CAAC,8BAA8B;IAC1F,+BAA+B;IAC/B,0BAA0B;IAC1B,wBAAwB;IACxB,KAAK;IAEL,uBAAuB;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAErD,CAAC;IAEF,wBAAwB;IACxB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAEvE,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAwB,CAAC;IAErE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;IAE7E,oDAAoD;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAE/E,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAsB,CAAC;QAC7C,6DAA6D;QAC7D,gEAAgE;QAChE,kBAAkB;QAClB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAsB,CAAC,CAAC;IAC1E,CAAC;IAED,iDAAiD;IACjD,MAAM,IAAI,GAAG,IAAkC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAoC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAmC,CAAC;IAIlD,SAAS,YAAY,CAAC,CAAM,EAAE,WAA0C;QACtE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,CAAoB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAID,SAAS,cAAc,CAAC,CAAM,EAAE,WAA0C;QACxE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAsB,CAAC,CAAC;QACrD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAID,SAAS,mBAAmB,CAAC,EAAO,EAAE,WAA8B;QAClE,mBAAmB;QACnB,MAAM,eAAe,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,UAAU,CAAC,CAAM;QACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,qCAAqC;QACrC,IAAI;QACJ,MAAM;QACN,KAAK;QAEL,iBAAiB;QACjB,UAAU,EAAE,0BAA0B;QACtC,SAAS,EAAE,uDAAuD;QAClE,YAAY;QACZ,GAAG,EAAE,oEAAoE;QACzE,SAAS;QACT,KAAK,EAAE,GAAG,EAAE,+DAA+D;QAC3E,mBAAmB;QAEnB,OAAO;QACP,WAAW;QACX,UAAU;QAEV,SAAS;QACT,IAAI,EAAE,oDAAoD;QAC1D,MAAM;QACN,KAAK,EAAE,0BAA0B;QAEjC,OAAO;QACP,SAAS,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC;QAEtB,YAAY;QACZ,UAAU;QACV,iDAAiD;QAEjD,kDAAkD;QAClD,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,cAAc;QAC7B,kBAAkB,EAAE,mBAAmB;KAC/B,CAAC;AACb,CAAC;AAED,uBAAuB;AACvB,oCAAoC;AACpC,qCAAqC;AACrC,cAAc;AAEd,oEAAoE;AACpE,gEAAgE;AAChE,wDAAwD;AAExD,mDAAmD;AACnD,wEAAwE;AACxE,sEAAsE;AAEtE,+CAA+C;AAE/C,sBAAsB;AACtB,+BAA+B;AAC/B,wCAAwC;AACxC,sCAAsC;AACtC,oDAAoD;AACpD,6BAA6B;AAC7B,gCAAgC;AAChC,+BAA+B;AAC/B,KAAK;AAEL,iBAAiB"}
|
|
@@ -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"}
|