@4bitlabs/sci0 5.0.0 → 6.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 (130) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +13 -0
  2. package/dist/index.d.ts +25 -26
  3. package/dist/index.js +11 -46
  4. package/dist/models/cel.d.ts +7 -4
  5. package/dist/models/cel.d.ts.map +1 -1
  6. package/dist/models/cursor.d.ts +6 -3
  7. package/dist/models/cursor.d.ts.map +1 -1
  8. package/dist/models/draw-codes.d.ts +4 -5
  9. package/dist/models/draw-codes.d.ts.map +1 -1
  10. package/dist/models/draw-command.d.ts +5 -2
  11. package/dist/models/draw-command.d.ts.map +1 -1
  12. package/dist/models/draw-commands.d.ts +16 -46
  13. package/dist/models/draw-commands.d.ts.map +1 -1
  14. package/dist/models/draw-mode.d.ts +21 -18
  15. package/dist/models/draw-mode.d.ts.map +1 -1
  16. package/dist/models/draw-mode.js +20 -25
  17. package/dist/models/draw-mode.js.map +1 -1
  18. package/dist/models/font-face.d.ts +7 -4
  19. package/dist/models/font-face.d.ts.map +1 -1
  20. package/dist/models/pattern-code.d.ts +4 -5
  21. package/dist/models/pattern-code.d.ts.map +1 -1
  22. package/dist/models/pic.d.ts +6 -3
  23. package/dist/models/pic.d.ts.map +1 -1
  24. package/dist/models/resource-header.d.ts +12 -9
  25. package/dist/models/resource-header.d.ts.map +1 -1
  26. package/dist/models/resource-id.d.ts +10 -5
  27. package/dist/models/resource-id.d.ts.map +1 -1
  28. package/dist/models/resource-id.js +28 -36
  29. package/dist/models/resource-id.js.map +1 -1
  30. package/dist/models/resource-map.d.ts +7 -4
  31. package/dist/models/resource-map.d.ts.map +1 -1
  32. package/dist/models/resource-type.d.ts +5 -2
  33. package/dist/models/resource-type.d.ts.map +1 -1
  34. package/dist/models/resource-types.d.ts +15 -10
  35. package/dist/models/resource-types.d.ts.map +1 -1
  36. package/dist/models/resource-types.js +17 -13
  37. package/dist/models/resource-types.js.map +1 -1
  38. package/dist/models/view.d.ts +16 -13
  39. package/dist/models/view.d.ts.map +1 -1
  40. package/dist/parsers/compression.d.ts +4 -1
  41. package/dist/parsers/compression.d.ts.map +1 -1
  42. package/dist/parsers/compression.js +36 -54
  43. package/dist/parsers/compression.js.map +1 -1
  44. package/dist/parsers/mapping.d.ts +5 -3
  45. package/dist/parsers/mapping.d.ts.map +1 -1
  46. package/dist/parsers/mapping.js +18 -23
  47. package/dist/parsers/mapping.js.map +1 -1
  48. package/dist/parsers/parse-cel.js +26 -29
  49. package/dist/parsers/parse-cel.js.map +1 -1
  50. package/dist/parsers/parse-cursor-options.d.ts +10 -7
  51. package/dist/parsers/parse-cursor-options.d.ts.map +1 -1
  52. package/dist/parsers/parse-cursor.d.ts +6 -3
  53. package/dist/parsers/parse-cursor.d.ts.map +1 -1
  54. package/dist/parsers/parse-cursor.js +34 -36
  55. package/dist/parsers/parse-cursor.js.map +1 -1
  56. package/dist/parsers/parse-font-options.d.ts +6 -3
  57. package/dist/parsers/parse-font-options.d.ts.map +1 -1
  58. package/dist/parsers/parse-font.d.ts +6 -3
  59. package/dist/parsers/parse-font.d.ts.map +1 -1
  60. package/dist/parsers/parse-font.js +27 -30
  61. package/dist/parsers/parse-font.js.map +1 -1
  62. package/dist/parsers/parse-pic.d.ts +8 -5
  63. package/dist/parsers/parse-pic.d.ts.map +1 -1
  64. package/dist/parsers/parse-pic.js +22 -29
  65. package/dist/parsers/parse-pic.js.map +1 -1
  66. package/dist/parsers/parse-view.d.ts +5 -2
  67. package/dist/parsers/parse-view.d.ts.map +1 -1
  68. package/dist/parsers/parse-view.js +45 -41
  69. package/dist/parsers/parse-view.js.map +1 -1
  70. package/dist/parsers/pic/handlers.js +272 -208
  71. package/dist/parsers/pic/handlers.js.map +1 -1
  72. package/dist/parsers/pic/op-codes.js +37 -45
  73. package/dist/parsers/pic/op-codes.js.map +1 -1
  74. package/dist/parsers/pic/pic-state.js +16 -8
  75. package/dist/parsers/pic/pic-state.js.map +1 -1
  76. package/dist/parsers/pic/points.js +19 -45
  77. package/dist/parsers/pic/points.js.map +1 -1
  78. package/dist/parsers/resource-header.d.ts +6 -3
  79. package/dist/parsers/resource-header.d.ts.map +1 -1
  80. package/dist/parsers/resource-header.js +15 -20
  81. package/dist/parsers/resource-header.js.map +1 -1
  82. package/dist/utils/exhaustive.js +5 -4
  83. package/dist/utils/exhaustive.js.map +1 -1
  84. package/dist/utils/repeat.js +5 -7
  85. package/dist/utils/repeat.js.map +1 -1
  86. package/package.json +17 -15
  87. package/dist/index.d.ts.map +0 -1
  88. package/dist/index.js.map +0 -1
  89. package/dist/models/cel.js +0 -3
  90. package/dist/models/cel.js.map +0 -1
  91. package/dist/models/cursor.js +0 -3
  92. package/dist/models/cursor.js.map +0 -1
  93. package/dist/models/draw-codes.js +0 -3
  94. package/dist/models/draw-codes.js.map +0 -1
  95. package/dist/models/draw-command.js +0 -3
  96. package/dist/models/draw-command.js.map +0 -1
  97. package/dist/models/draw-commands.js +0 -3
  98. package/dist/models/draw-commands.js.map +0 -1
  99. package/dist/models/font-face.js +0 -3
  100. package/dist/models/font-face.js.map +0 -1
  101. package/dist/models/pattern-code.js +0 -3
  102. package/dist/models/pattern-code.js.map +0 -1
  103. package/dist/models/pic.js +0 -3
  104. package/dist/models/pic.js.map +0 -1
  105. package/dist/models/resource-header.js +0 -3
  106. package/dist/models/resource-header.js.map +0 -1
  107. package/dist/models/resource-map.js +0 -3
  108. package/dist/models/resource-map.js.map +0 -1
  109. package/dist/models/resource-type.js +0 -3
  110. package/dist/models/resource-type.js.map +0 -1
  111. package/dist/models/view.js +0 -3
  112. package/dist/models/view.js.map +0 -1
  113. package/dist/parsers/parse-cel.d.ts +0 -3
  114. package/dist/parsers/parse-cel.d.ts.map +0 -1
  115. package/dist/parsers/parse-cursor-options.js +0 -3
  116. package/dist/parsers/parse-cursor-options.js.map +0 -1
  117. package/dist/parsers/parse-font-options.js +0 -3
  118. package/dist/parsers/parse-font-options.js.map +0 -1
  119. package/dist/parsers/pic/handlers.d.ts +0 -8
  120. package/dist/parsers/pic/handlers.d.ts.map +0 -1
  121. package/dist/parsers/pic/op-codes.d.ts +0 -32
  122. package/dist/parsers/pic/op-codes.d.ts.map +0 -1
  123. package/dist/parsers/pic/pic-state.d.ts +0 -10
  124. package/dist/parsers/pic/pic-state.d.ts.map +0 -1
  125. package/dist/parsers/pic/points.d.ts +0 -6
  126. package/dist/parsers/pic/points.d.ts.map +0 -1
  127. package/dist/utils/exhaustive.d.ts +0 -2
  128. package/dist/utils/exhaustive.d.ts.map +0 -1
  129. package/dist/utils/repeat.d.ts +0 -2
  130. package/dist/utils/repeat.d.ts.map +0 -1
@@ -1,3 +1,6 @@
1
- import { VIEW_TYPE, PIC_TYPE, SCRIPT_TYPE, TEXT_TYPE, SOUND_TYPE, MEMORY_TYPE, VOCAB_TYPE, FONT_TYPE, CURSOR_TYPE, PATCH_TYPE } from './resource-types';
2
- export type ResourceType = typeof VIEW_TYPE | typeof PIC_TYPE | typeof SCRIPT_TYPE | typeof TEXT_TYPE | typeof SOUND_TYPE | typeof MEMORY_TYPE | typeof VOCAB_TYPE | typeof FONT_TYPE | typeof CURSOR_TYPE | typeof PATCH_TYPE;
1
+ import { CURSOR_TYPE, FONT_TYPE, MEMORY_TYPE, PATCH_TYPE, PIC_TYPE, SCRIPT_TYPE, SOUND_TYPE, TEXT_TYPE, VIEW_TYPE, VOCAB_TYPE } from "./resource-types.js";
2
+ //#region src/models/resource-type.d.ts
3
+ type ResourceType = typeof VIEW_TYPE | typeof PIC_TYPE | typeof SCRIPT_TYPE | typeof TEXT_TYPE | typeof SOUND_TYPE | typeof MEMORY_TYPE | typeof VOCAB_TYPE | typeof FONT_TYPE | typeof CURSOR_TYPE | typeof PATCH_TYPE;
4
+ //#endregion
5
+ export { ResourceType };
3
6
  //# sourceMappingURL=resource-type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-type.d.ts","sourceRoot":"","sources":["../../src/models/resource-type.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,YAAY,GACpB,OAAO,SAAS,GAChB,OAAO,QAAQ,GACf,OAAO,WAAW,GAClB,OAAO,SAAS,GAChB,OAAO,UAAU,GACjB,OAAO,WAAW,GAClB,OAAO,UAAU,GACjB,OAAO,SAAS,GAChB,OAAO,WAAW,GAClB,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"resource-type.d.ts","names":[],"sources":["../../src/models/resource-type.ts"],"mappings":";;KAaY,sBACD,mBACA,kBACA,qBACA,mBACA,oBACA,qBACA,oBACA,mBACA,qBACA"}
@@ -1,11 +1,16 @@
1
- export declare const VIEW_TYPE: 0;
2
- export declare const PIC_TYPE: 1;
3
- export declare const SCRIPT_TYPE: 2;
4
- export declare const TEXT_TYPE: 3;
5
- export declare const SOUND_TYPE: 4;
6
- export declare const MEMORY_TYPE: 5;
7
- export declare const VOCAB_TYPE: 6;
8
- export declare const FONT_TYPE: 7;
9
- export declare const CURSOR_TYPE: 8;
10
- export declare const PATCH_TYPE: 9;
1
+ declare namespace resource_types_d_exports {
2
+ export { CURSOR_TYPE, FONT_TYPE, MEMORY_TYPE, PATCH_TYPE, PIC_TYPE, SCRIPT_TYPE, SOUND_TYPE, TEXT_TYPE, VIEW_TYPE, VOCAB_TYPE };
3
+ }
4
+ declare const VIEW_TYPE: 0;
5
+ declare const PIC_TYPE: 1;
6
+ declare const SCRIPT_TYPE: 2;
7
+ declare const TEXT_TYPE: 3;
8
+ declare const SOUND_TYPE: 4;
9
+ declare const MEMORY_TYPE: 5;
10
+ declare const VOCAB_TYPE: 6;
11
+ declare const FONT_TYPE: 7;
12
+ declare const CURSOR_TYPE: 8;
13
+ declare const PATCH_TYPE: 9;
14
+ //#endregion
15
+ export { CURSOR_TYPE, FONT_TYPE, MEMORY_TYPE, PATCH_TYPE, PIC_TYPE, SCRIPT_TYPE, SOUND_TYPE, TEXT_TYPE, VIEW_TYPE, VOCAB_TYPE, resource_types_d_exports };
11
16
  //# sourceMappingURL=resource-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-types.d.ts","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAa,CAAC;AACpC,eAAO,MAAM,QAAQ,GAAa,CAAC;AACnC,eAAO,MAAM,WAAW,GAAa,CAAC;AACtC,eAAO,MAAM,SAAS,GAAa,CAAC;AACpC,eAAO,MAAM,UAAU,GAAa,CAAC;AACrC,eAAO,MAAM,WAAW,GAAa,CAAC;AACtC,eAAO,MAAM,UAAU,GAAa,CAAC;AACrC,eAAO,MAAM,SAAS,GAAa,CAAC;AACpC,eAAO,MAAM,WAAW,GAAa,CAAC;AACtC,eAAO,MAAM,UAAU,GAAa,CAAC"}
1
+ {"version":3,"file":"resource-types.d.ts","names":[],"sources":["../../src/models/resource-types.ts"],"mappings":";;;cAAa;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA"}
@@ -1,14 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PATCH_TYPE = exports.CURSOR_TYPE = exports.FONT_TYPE = exports.VOCAB_TYPE = exports.MEMORY_TYPE = exports.SOUND_TYPE = exports.TEXT_TYPE = exports.SCRIPT_TYPE = exports.PIC_TYPE = exports.VIEW_TYPE = void 0;
4
- exports.VIEW_TYPE = 0;
5
- exports.PIC_TYPE = 1;
6
- exports.SCRIPT_TYPE = 2;
7
- exports.TEXT_TYPE = 3;
8
- exports.SOUND_TYPE = 4;
9
- exports.MEMORY_TYPE = 5;
10
- exports.VOCAB_TYPE = 6;
11
- exports.FONT_TYPE = 7;
12
- exports.CURSOR_TYPE = 8;
13
- exports.PATCH_TYPE = 9;
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ //#region src/models/resource-types.ts
3
+ var resource_types_exports = /* @__PURE__ */ __exportAll({
4
+ CURSOR_TYPE: () => 8,
5
+ FONT_TYPE: () => 7,
6
+ MEMORY_TYPE: () => 5,
7
+ PATCH_TYPE: () => 9,
8
+ PIC_TYPE: () => 1,
9
+ SCRIPT_TYPE: () => 2,
10
+ SOUND_TYPE: () => 4,
11
+ TEXT_TYPE: () => 3,
12
+ VIEW_TYPE: () => 0,
13
+ VOCAB_TYPE: () => 6
14
+ });
15
+ //#endregion
16
+ export { resource_types_exports };
17
+
14
18
  //# sourceMappingURL=resource-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-types.js","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,CAAU,CAAC;AACvB,QAAA,QAAQ,GAAG,CAAU,CAAC;AACtB,QAAA,WAAW,GAAG,CAAU,CAAC;AACzB,QAAA,SAAS,GAAG,CAAU,CAAC;AACvB,QAAA,UAAU,GAAG,CAAU,CAAC;AACxB,QAAA,WAAW,GAAG,CAAU,CAAC;AACzB,QAAA,UAAU,GAAG,CAAU,CAAC;AACxB,QAAA,SAAS,GAAG,CAAU,CAAC;AACvB,QAAA,WAAW,GAAG,CAAU,CAAC;AACzB,QAAA,UAAU,GAAG,CAAU,CAAC"}
1
+ {"version":3,"file":"resource-types.js","names":[],"sources":["../../src/models/resource-types.ts"],"sourcesContent":["export const VIEW_TYPE = 0 as const;\nexport const PIC_TYPE = 1 as const;\nexport const SCRIPT_TYPE = 2 as const;\nexport const TEXT_TYPE = 3 as const;\nexport const SOUND_TYPE = 4 as const;\nexport const MEMORY_TYPE = 5 as const;\nexport const VOCAB_TYPE = 6 as const;\nexport const FONT_TYPE = 7 as const;\nexport const CURSOR_TYPE = 8 as const;\nexport const PATCH_TYPE = 9 as const;\n"],"mappings":""}
@@ -1,15 +1,18 @@
1
- import { Cel } from './cel';
2
- export interface Loop {
3
- readonly frames: Cel[];
4
- readonly isMirrored: boolean;
5
- readonly bounds: {
6
- readonly left: number;
7
- readonly top: number;
8
- readonly right: number;
9
- readonly bottom: number;
10
- readonly width: number;
11
- readonly height: number;
12
- };
1
+ import { Cel } from "./cel.js";
2
+ //#region src/models/view.d.ts
3
+ interface Loop {
4
+ readonly frames: Cel[];
5
+ readonly isMirrored: boolean;
6
+ readonly bounds: {
7
+ readonly left: number;
8
+ readonly top: number;
9
+ readonly right: number;
10
+ readonly bottom: number;
11
+ readonly width: number;
12
+ readonly height: number;
13
+ };
13
14
  }
14
- export type View = Loop[];
15
+ type View = Loop[];
16
+ //#endregion
17
+ export { Loop, View };
15
18
  //# sourceMappingURL=view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/models/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"view.d.ts","names":[],"sources":["../../src/models/view.ts"],"mappings":";;UAEiB;WACN,QAAQ;WACR;WACA;aACE;aACA;aACA;aACA;aACA;aACA;;;KAID,OAAO"}
@@ -1,3 +1,4 @@
1
+ //#region src/parsers/compression.d.ts
1
2
  /**
2
3
  * Decompress resource payload bytes with a specific algorithm.
3
4
  *
@@ -22,5 +23,7 @@
22
23
  * @param bytes The compressed bytes to decompress.
23
24
  * @returns Decompressed payload data.
24
25
  */
25
- export declare const decompress: (engine: "sci0" | "sci01", algorithm: number, bytes: Uint8Array) => Uint8Array;
26
+ declare const decompress: (engine: "sci0" | "sci01", algorithm: number, bytes: Uint8Array) => Uint8Array;
27
+ //#endregion
28
+ export { decompress };
26
29
  //# sourceMappingURL=compression.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/parsers/compression.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,GAAG,OAAO,aACb,MAAM,SACV,UAAU,KAChB,UAmBF,CAAC"}
1
+ {"version":3,"file":"compression.d.ts","names":[],"sources":["../../src/parsers/compression.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;cAmDa,aACX,0BACA,mBACA,OAAO,eACN"}
@@ -1,61 +1,43 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decompress = void 0;
4
- const huffman_1 = require("@4bitlabs/codecs/huffman");
5
- const lzw_1 = require("@4bitlabs/codecs/lzw");
6
- const comp3_1 = require("@4bitlabs/codecs/comp3");
7
- const exhaustive_1 = require("../utils/exhaustive");
8
- const sci0Supported = (it) => typeof it === 'number' && Number.isInteger(it) && [0, 1, 2].includes(it);
9
- const sci01Supported = (it) => typeof it === 'number' && Number.isInteger(it) && [0, 1, 2].includes(it);
1
+ import { exhaustive } from "../utils/exhaustive.js";
2
+ import { unpack } from "@4bitlabs/codecs/huffman";
3
+ import { unpack as unpack$1 } from "@4bitlabs/codecs/lzw";
4
+ import { unpack as unpack$2 } from "@4bitlabs/codecs/comp3";
5
+ //#region src/parsers/compression.ts
6
+ const sci0Supported = (it) => typeof it === "number" && Number.isInteger(it) && [
7
+ 0,
8
+ 1,
9
+ 2
10
+ ].includes(it);
11
+ const sci01Supported = (it) => typeof it === "number" && Number.isInteger(it) && [
12
+ 0,
13
+ 1,
14
+ 2
15
+ ].includes(it);
10
16
  const SCI0 = {
11
- 0: (bytes) => bytes,
12
- 1: (bytes) => (0, lzw_1.unpack)(bytes, { literalWidth: 8, order: 'lsb' }),
13
- 2: (bytes) => (0, huffman_1.unpack)(bytes),
17
+ 0: (bytes) => bytes,
18
+ 1: (bytes) => unpack$1(bytes, {
19
+ literalWidth: 8,
20
+ order: "lsb"
21
+ }),
22
+ 2: (bytes) => unpack(bytes)
14
23
  };
15
24
  const SCI01 = {
16
- 0: (bytes) => bytes,
17
- 1: (bytes) => (0, huffman_1.unpack)(bytes),
18
- 2: (bytes) => (0, comp3_1.unpack)(bytes),
25
+ 0: (bytes) => bytes,
26
+ 1: (bytes) => unpack(bytes),
27
+ 2: (bytes) => unpack$2(bytes)
19
28
  };
20
- /**
21
- * Decompress resource payload bytes with a specific algorithm.
22
- *
23
- * #### SCI0 algorithm
24
- * | | |
25
- * | --- | --- |
26
- * | 0 | _no compression_ |
27
- * | 1 | LZW (8-bit/lsb) |
28
- * | 2 | Huffman |
29
- *
30
- * #### SCI01 algorithm
31
- * | | |
32
- * | --- | --- |
33
- * | 0 | _no compression_ |
34
- * | 1 | Huffman |
35
- * | 2 | COMP3 |
36
- *
37
- * @see {@link ResourceHeader.compression}
38
- *
39
- * @param engine Select between engine type: `sci0` or `sci01`.
40
- * @param algorithm The decompression method.
41
- * @param bytes The compressed bytes to decompress.
42
- * @returns Decompressed payload data.
43
- */
44
29
  const decompress = (engine, algorithm, bytes) => {
45
- switch (engine) {
46
- case 'sci0': {
47
- if (!sci0Supported(algorithm))
48
- throw new Error(`unsupported compression algorithm: ${algorithm.toString(10)}`);
49
- return SCI0[algorithm](bytes);
50
- }
51
- case 'sci01': {
52
- if (!sci01Supported(algorithm))
53
- throw new Error(`unsupported compression algorithm: ${algorithm.toString(10)}`);
54
- return SCI01[algorithm](bytes);
55
- }
56
- default:
57
- (0, exhaustive_1.exhaustive)('unsupported engine/compression', engine);
58
- }
30
+ switch (engine) {
31
+ case "sci0":
32
+ if (!sci0Supported(algorithm)) throw new Error(`unsupported compression algorithm: ${algorithm.toString(10)}`);
33
+ return SCI0[algorithm](bytes);
34
+ case "sci01":
35
+ if (!sci01Supported(algorithm)) throw new Error(`unsupported compression algorithm: ${algorithm.toString(10)}`);
36
+ return SCI01[algorithm](bytes);
37
+ default: exhaustive("unsupported engine/compression", engine);
38
+ }
59
39
  };
60
- exports.decompress = decompress;
40
+ //#endregion
41
+ export { decompress };
42
+
61
43
  //# sourceMappingURL=compression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/parsers/compression.ts"],"names":[],"mappings":";;;AAAA,sDAAmE;AACnE,8CAA2D;AAC3D,kDAA+D;AAC/D,oDAAiD;AAMjD,MAAM,aAAa,GAAG,CAAC,EAAW,EAAwB,EAAE,CAC1D,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,cAAc,GAAG,CAAC,EAAW,EAAyB,EAAE,CAC5D,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,IAAI,GAAyC;IACjD,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;IACnB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,YAAS,EAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gBAAa,EAAC,KAAK,CAAC;CACnC,CAAC;AAEF,MAAM,KAAK,GAA0C;IACnD,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;IACnB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gBAAa,EAAC,KAAK,CAAC;IAClC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,cAAW,EAAC,KAAK,CAAC;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,MAAM,UAAU,GAAG,CACxB,MAAwB,EACxB,SAAiB,EACjB,KAAiB,EACL,EAAE;IACd,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAC/D,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAC/D,CAAC;YACJ,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD;YACE,IAAA,uBAAU,EAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;AACH,CAAC,CAAC;AAvBW,QAAA,UAAU,cAuBrB"}
1
+ {"version":3,"file":"compression.js","names":["unpackLzw","unpackHuffman","unpackComp3"],"sources":["../../src/parsers/compression.ts"],"sourcesContent":["import { unpack as unpackHuffman } from '@4bitlabs/codecs/huffman';\nimport { unpack as unpackLzw } from '@4bitlabs/codecs/lzw';\nimport { unpack as unpackComp3 } from '@4bitlabs/codecs/comp3';\nimport { exhaustive } from '../utils/exhaustive.js';\n\ntype Sci0Algorithms = 0 | 1 | 2;\ntype Sci01Algorithms = 0 | 1 | 2;\ntype DecompressFn = (bytes: Uint8Array) => Uint8Array;\n\nconst sci0Supported = (it: unknown): it is Sci0Algorithms =>\n typeof it === 'number' && Number.isInteger(it) && [0, 1, 2].includes(it);\n\nconst sci01Supported = (it: unknown): it is Sci01Algorithms =>\n typeof it === 'number' && Number.isInteger(it) && [0, 1, 2].includes(it);\n\nconst SCI0: Record<Sci0Algorithms, DecompressFn> = {\n 0: (bytes) => bytes,\n 1: (bytes) => unpackLzw(bytes, { literalWidth: 8, order: 'lsb' }),\n 2: (bytes) => unpackHuffman(bytes),\n};\n\nconst SCI01: Record<Sci01Algorithms, DecompressFn> = {\n 0: (bytes) => bytes,\n 1: (bytes) => unpackHuffman(bytes),\n 2: (bytes) => unpackComp3(bytes),\n};\n\n/**\n * Decompress resource payload bytes with a specific algorithm.\n *\n * #### SCI0 algorithm\n * | | |\n * | --- | --- |\n * | 0 | _no compression_ |\n * | 1 | LZW (8-bit/lsb) |\n * | 2 | Huffman |\n *\n * #### SCI01 algorithm\n * | | |\n * | --- | --- |\n * | 0 | _no compression_ |\n * | 1 | Huffman |\n * | 2 | COMP3 |\n *\n * @see {@link ResourceHeader.compression}\n *\n * @param engine Select between engine type: `sci0` or `sci01`.\n * @param algorithm The decompression method.\n * @param bytes The compressed bytes to decompress.\n * @returns Decompressed payload data.\n */\nexport const decompress = (\n engine: 'sci0' | 'sci01',\n algorithm: number,\n bytes: Uint8Array,\n): Uint8Array => {\n switch (engine) {\n case 'sci0': {\n if (!sci0Supported(algorithm))\n throw new Error(\n `unsupported compression algorithm: ${algorithm.toString(10)}`,\n );\n return SCI0[algorithm](bytes);\n }\n case 'sci01': {\n if (!sci01Supported(algorithm))\n throw new Error(\n `unsupported compression algorithm: ${algorithm.toString(10)}`,\n );\n return SCI01[algorithm](bytes);\n }\n default:\n exhaustive('unsupported engine/compression', engine);\n }\n};\n"],"mappings":";;;;;AASA,MAAM,iBAAiB,OACrB,OAAO,OAAO,YAAY,OAAO,UAAU,EAAE,KAAK;CAAC;CAAG;CAAG;AAAC,CAAC,CAAC,SAAS,EAAE;AAEzE,MAAM,kBAAkB,OACtB,OAAO,OAAO,YAAY,OAAO,UAAU,EAAE,KAAK;CAAC;CAAG;CAAG;AAAC,CAAC,CAAC,SAAS,EAAE;AAEzE,MAAM,OAA6C;CACjD,IAAI,UAAU;CACd,IAAI,UAAUA,SAAU,OAAO;EAAE,cAAc;EAAG,OAAO;CAAM,CAAC;CAChE,IAAI,UAAUC,OAAc,KAAK;AACnC;AAEA,MAAM,QAA+C;CACnD,IAAI,UAAU;CACd,IAAI,UAAUA,OAAc,KAAK;CACjC,IAAI,UAAUC,SAAY,KAAK;AACjC;AA0BA,MAAa,cACX,QACA,WACA,UACe;CACf,QAAQ,QAAR;EACE,KAAK;GACH,IAAI,CAAC,cAAc,SAAS,GAC1B,MAAM,IAAI,MACR,sCAAsC,UAAU,SAAS,EAAE,GAC7D;GACF,OAAO,KAAK,UAAU,CAAC,KAAK;EAE9B,KAAK;GACH,IAAI,CAAC,eAAe,SAAS,GAC3B,MAAM,IAAI,MACR,sCAAsC,UAAU,SAAS,EAAE,GAC7D;GACF,OAAO,MAAM,UAAU,CAAC,KAAK;EAE/B,SACE,WAAW,kCAAkC,MAAM;CACvD;AACF"}
@@ -1,4 +1,6 @@
1
- import { ResourceMap } from '../models/resource-map';
2
- export declare function consume(bytes: Uint8Array): IterableIterator<ResourceMap>;
3
- export declare const parseAllMappings: (bytes: Uint8Array) => ResourceMap[];
1
+ import { ResourceMap } from "../models/resource-map.js";
2
+ //#region src/parsers/mapping.d.ts
3
+ declare const parseAllMappings: (bytes: Uint8Array) => ResourceMap[];
4
+ //#endregion
5
+ export { parseAllMappings };
4
6
  //# sourceMappingURL=mapping.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/parsers/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAKrD,wBAAiB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAgBzE;AAED,eAAO,MAAM,gBAAgB,UAAW,UAAU,KAAG,WAAW,EAE/D,CAAC"}
1
+ {"version":3,"file":"mapping.d.ts","names":[],"sources":["../../src/parsers/mapping.ts"],"mappings":";;cAuBa,mBAAoB,OAAO,eAAa"}
@@ -1,26 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseAllMappings = void 0;
4
- exports.consume = consume;
5
- const HEAD_END_TOKEN = ~0 >>> 16;
6
- const TAIL_END_TOKEN = ~0 >>> 0;
1
+ //#region src/parsers/mapping.ts
2
+ const HEAD_END_TOKEN = 65535;
3
+ const TAIL_END_TOKEN = -1 >>> 0;
7
4
  function* consume(bytes) {
8
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
9
- for (let offset = 0; offset + 5 < bytes.length; offset += 6) {
10
- const head = view.getUint16(offset, true);
11
- const tail = view.getUint32(offset + 2, true);
12
- const isEnd = HEAD_END_TOKEN === head && TAIL_END_TOKEN === tail;
13
- if (isEnd)
14
- return;
15
- yield {
16
- id: head,
17
- file: tail >>> 26,
18
- offset: tail & 67108863,
19
- };
20
- }
5
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
6
+ for (let offset = 0; offset + 5 < bytes.length; offset += 6) {
7
+ const head = view.getUint16(offset, true);
8
+ const tail = view.getUint32(offset + 2, true);
9
+ if (HEAD_END_TOKEN === head && TAIL_END_TOKEN === tail) return;
10
+ yield {
11
+ id: head,
12
+ file: tail >>> 26,
13
+ offset: tail & 67108863
14
+ };
15
+ }
21
16
  }
22
- const parseAllMappings = (bytes) => [
23
- ...consume(bytes),
24
- ];
25
- exports.parseAllMappings = parseAllMappings;
17
+ const parseAllMappings = (bytes) => [...consume(bytes)];
18
+ //#endregion
19
+ export { consume, parseAllMappings };
20
+
26
21
  //# sourceMappingURL=mapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/parsers/mapping.ts"],"names":[],"mappings":";;;AAKA,0BAgBC;AAnBD,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACjC,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAEhC,QAAe,CAAC,CAAC,OAAO,CAAC,KAAiB;IACxC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5E,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI,CAAC;QACjE,IAAI,KAAK;YAAE,OAAO;QAElB,MAAM;YACJ,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI,KAAK,EAAE;YACjB,MAAM,EAAE,IAAI,GAAG,QAAkC;SAClD,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAiB,EAAE,CAAC;IACpE,GAAG,OAAO,CAAC,KAAK,CAAC;CAClB,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
1
+ {"version":3,"file":"mapping.js","names":[],"sources":["../../src/parsers/mapping.ts"],"sourcesContent":["import type { ResourceMap } from '../models/resource-map.js';\n\nconst HEAD_END_TOKEN = ~0 >>> 16;\nconst TAIL_END_TOKEN = ~0 >>> 0;\n\nexport function* consume(bytes: Uint8Array): IterableIterator<ResourceMap> {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n for (let offset = 0; offset + 5 < bytes.length; offset += 6) {\n const head = view.getUint16(offset, true);\n const tail = view.getUint32(offset + 2, true);\n\n const isEnd = HEAD_END_TOKEN === head && TAIL_END_TOKEN === tail;\n if (isEnd) return;\n\n yield {\n id: head,\n file: tail >>> 26,\n offset: tail & 0b11_1111_1111_1111_1111_1111_1111,\n };\n }\n}\n\nexport const parseAllMappings = (bytes: Uint8Array): ResourceMap[] => [\n ...consume(bytes),\n];\n"],"mappings":";AAEA,MAAM,iBAAiB;AACvB,MAAM,iBAAiB,OAAO;AAE9B,UAAiB,QAAQ,OAAkD;CACzE,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;CAE1E,KAAK,IAAI,SAAS,GAAG,SAAS,IAAI,MAAM,QAAQ,UAAU,GAAG;EAC3D,MAAM,OAAO,KAAK,UAAU,QAAQ,IAAI;EACxC,MAAM,OAAO,KAAK,UAAU,SAAS,GAAG,IAAI;EAG5C,IADc,mBAAmB,QAAQ,mBAAmB,MACjD;EAEX,MAAM;GACJ,IAAI;GACJ,MAAM,SAAS;GACf,QAAQ,OAAO;EACjB;CACF;AACF;AAEA,MAAa,oBAAoB,UAAqC,CACpE,GAAG,QAAQ,KAAK,CAClB"}
@@ -1,32 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseCel = void 0;
4
- const image_1 = require("@4bitlabs/image");
1
+ import { createIndexedPixelData } from "@4bitlabs/image";
2
+ //#region src/parsers/parse-cel.ts
5
3
  const parseCel = (frameView) => {
6
- const [width, height] = [
7
- frameView.getUint16(0, true),
8
- frameView.getUint16(2, true),
9
- ];
10
- const [dx, dy] = [frameView.getInt8(4), frameView.getInt8(5)];
11
- const keyColor = frameView.getUint8(6);
12
- const total = width * height;
13
- const img = (0, image_1.createIndexedPixelData)(width, height);
14
- let idx = 0;
15
- for (let i = 0; i < total;) {
16
- const data = frameView.getUint8(7 + idx);
17
- idx += 1;
18
- const [color, repeat] = [data & 0xf, data >>> 4];
19
- for (let r = 0; r < repeat; r++) {
20
- img.pixels[i] = color;
21
- i += 1;
22
- }
23
- }
24
- return {
25
- ...img,
26
- keyColor,
27
- dx,
28
- dy,
29
- };
4
+ const [width, height] = [frameView.getUint16(0, true), frameView.getUint16(2, true)];
5
+ const [dx, dy] = [frameView.getInt8(4), frameView.getInt8(5)];
6
+ const keyColor = frameView.getUint8(6);
7
+ const total = width * height;
8
+ const img = createIndexedPixelData(width, height);
9
+ let idx = 0;
10
+ for (let i = 0; i < total;) {
11
+ const data = frameView.getUint8(7 + idx);
12
+ idx += 1;
13
+ const [color, repeat] = [data & 15, data >>> 4];
14
+ for (let r = 0; r < repeat; r++) {
15
+ img.pixels[i] = color;
16
+ i += 1;
17
+ }
18
+ }
19
+ return {
20
+ ...img,
21
+ keyColor,
22
+ dx,
23
+ dy
24
+ };
30
25
  };
31
- exports.parseCel = parseCel;
26
+ //#endregion
27
+ export { parseCel };
28
+
32
29
  //# sourceMappingURL=parse-cel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-cel.js","sourceRoot":"","sources":["../../src/parsers/parse-cel.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AAGlD,MAAM,QAAQ,GAAG,CAAC,SAAmB,EAAO,EAAE;IACnD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;QACtB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QAC5B,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;KAC7B,CAAC;IACF,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAA,8BAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAI,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACzC,GAAG,IAAI,CAAC,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,GAAG;QACN,QAAQ;QACR,EAAE;QACF,EAAE;KACH,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,QAAQ,YA4BnB"}
1
+ {"version":3,"file":"parse-cel.js","names":[],"sources":["../../src/parsers/parse-cel.ts"],"sourcesContent":["import { createIndexedPixelData } from '@4bitlabs/image';\nimport type { Cel } from '../models/cel.js';\n\nexport const parseCel = (frameView: DataView): Cel => {\n const [width, height] = [\n frameView.getUint16(0, true),\n frameView.getUint16(2, true),\n ];\n const [dx, dy] = [frameView.getInt8(4), frameView.getInt8(5)];\n const keyColor = frameView.getUint8(6);\n\n const total = width * height;\n const img = createIndexedPixelData(width, height);\n\n let idx = 0;\n for (let i = 0; i < total; ) {\n const data = frameView.getUint8(7 + idx);\n idx += 1;\n const [color, repeat] = [data & 0xf, data >>> 4];\n for (let r = 0; r < repeat; r++) {\n img.pixels[i] = color;\n i += 1;\n }\n }\n\n return {\n ...img,\n keyColor,\n dx,\n dy,\n };\n};\n"],"mappings":";;AAGA,MAAa,YAAY,cAA6B;CACpD,MAAM,CAAC,OAAO,UAAU,CACtB,UAAU,UAAU,GAAG,IAAI,GAC3B,UAAU,UAAU,GAAG,IAAI,CAC7B;CACA,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,QAAQ,CAAC,GAAG,UAAU,QAAQ,CAAC,CAAC;CAC5D,MAAM,WAAW,UAAU,SAAS,CAAC;CAErC,MAAM,QAAQ,QAAQ;CACtB,MAAM,MAAM,uBAAuB,OAAO,MAAM;CAEhD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,QAAS;EAC3B,MAAM,OAAO,UAAU,SAAS,IAAI,GAAG;EACvC,OAAO;EACP,MAAM,CAAC,OAAO,UAAU,CAAC,OAAO,IAAK,SAAS,CAAC;EAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;GAC/B,IAAI,OAAO,KAAK;GAChB,KAAK;EACP;CACF;CAEA,OAAO;EACL,GAAG;EACH;EACA;EACA;CACF;AACF"}
@@ -1,9 +1,12 @@
1
- export interface ParseCursorOptions {
2
- mapping?: {
3
- black: number;
4
- gray: number;
5
- white: number;
6
- keyColor: number;
7
- };
1
+ //#region src/parsers/parse-cursor-options.d.ts
2
+ interface ParseCursorOptions {
3
+ mapping?: {
4
+ black: number;
5
+ gray: number;
6
+ white: number;
7
+ keyColor: number;
8
+ };
8
9
  }
10
+ //#endregion
11
+ export { ParseCursorOptions };
9
12
  //# sourceMappingURL=parse-cursor-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-cursor-options.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-cursor-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
1
+ {"version":3,"file":"parse-cursor-options.d.ts","names":[],"sources":["../../src/parsers/parse-cursor-options.ts"],"mappings":";UAAiB;EACf;IACE;IACA;IACA;IACA"}
@@ -1,4 +1,7 @@
1
- import { type Cursor } from '../models/cursor';
2
- import { ParseCursorOptions } from './parse-cursor-options';
3
- export declare const parseCursor: (source: Uint8Array, options?: ParseCursorOptions) => Cursor;
1
+ import { ParseCursorOptions } from "./parse-cursor-options.js";
2
+ import { Cursor } from "../models/cursor.js";
3
+ //#region src/parsers/parse-cursor.d.ts
4
+ declare const parseCursor: (source: Uint8Array, options?: ParseCursorOptions) => Cursor;
5
+ //#endregion
6
+ export { parseCursor };
4
7
  //# sourceMappingURL=parse-cursor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-cursor.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAS5D,eAAO,MAAM,WAAW,WACd,UAAU,YACT,kBAAkB,KAC1B,MAsCF,CAAC"}
1
+ {"version":3,"file":"parse-cursor.d.ts","names":[],"sources":["../../src/parsers/parse-cursor.ts"],"mappings":";;;cAWa,cACX,QAAQ,YACR,UAAS,uBACR"}
@@ -1,41 +1,39 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseCursor = void 0;
4
- const image_1 = require("@4bitlabs/image");
1
+ import { createIndexedPixelData } from "@4bitlabs/image";
2
+ //#region src/parsers/parse-cursor.ts
5
3
  const DEFAULT_MAPPING = {
6
- black: 0x00,
7
- white: 0x0f,
8
- gray: 0x07,
9
- keyColor: 0x0d,
4
+ black: 0,
5
+ white: 15,
6
+ gray: 7,
7
+ keyColor: 13
10
8
  };
11
9
  const parseCursor = (source, options = {}) => {
12
- const { mapping = DEFAULT_MAPPING } = options;
13
- const { keyColor } = mapping;
14
- const colorLut = [
15
- mapping.black,
16
- mapping.white,
17
- mapping.keyColor,
18
- mapping.gray,
19
- ];
20
- const view = new DataView(source.buffer, source.byteOffset, source.byteLength);
21
- const hotspot = [view.getUint16(0, true), view.getUint16(2, true)];
22
- const img = (0, image_1.createIndexedPixelData)(16, 16, { keyColor });
23
- const stride = 16;
24
- for (let y = 0; y < 16; y++) {
25
- for (let x = 0; x < 16; x++) {
26
- const idx = 4 + y * 2;
27
- const tx = view.getUint16(idx, true);
28
- const clr = view.getUint16(idx + 32, true);
29
- const a = (tx >> (15 - x)) & 1;
30
- const b = (clr >> (15 - x)) & 1;
31
- const value = (a << 1) | b;
32
- img.pixels[x + y * stride] = colorLut[value];
33
- }
34
- }
35
- return {
36
- ...img,
37
- hotspot,
38
- };
10
+ const { mapping = DEFAULT_MAPPING } = options;
11
+ const { keyColor } = mapping;
12
+ const colorLut = [
13
+ mapping.black,
14
+ mapping.white,
15
+ mapping.keyColor,
16
+ mapping.gray
17
+ ];
18
+ const view = new DataView(source.buffer, source.byteOffset, source.byteLength);
19
+ const hotspot = [view.getUint16(0, true), view.getUint16(2, true)];
20
+ const img = createIndexedPixelData(16, 16, { keyColor });
21
+ const stride = 16;
22
+ for (let y = 0; y < 16; y++) for (let x = 0; x < 16; x++) {
23
+ const idx = 4 + y * 2;
24
+ const tx = view.getUint16(idx, true);
25
+ const clr = view.getUint16(idx + 32, true);
26
+ const a = tx >> 15 - x & 1;
27
+ const b = clr >> 15 - x & 1;
28
+ const value = a << 1 | b;
29
+ img.pixels[x + y * stride] = colorLut[value];
30
+ }
31
+ return {
32
+ ...img,
33
+ hotspot
34
+ };
39
35
  };
40
- exports.parseCursor = parseCursor;
36
+ //#endregion
37
+ export { parseCursor };
38
+
41
39
  //# sourceMappingURL=parse-cursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-cursor.js","sourceRoot":"","sources":["../../src/parsers/parse-cursor.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AAIzD,MAAM,eAAe,GAAG;IACtB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;CACf,CAAC;AAEK,MAAM,WAAW,GAAG,CACzB,MAAkB,EAClB,UAA8B,EAAE,EACxB,EAAE;IACV,MAAM,EAAE,OAAO,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,QAAQ,GAAG;QACf,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,QAAQ;QAChB,OAAO,CAAC,IAAI;KACb,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,QAAQ,CACvB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAU,CAAC;IAE5E,MAAM,GAAG,GAAG,IAAA,8BAAsB,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3C,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,GAAG;QACN,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAzCW,QAAA,WAAW,eAyCtB"}
1
+ {"version":3,"file":"parse-cursor.js","names":[],"sources":["../../src/parsers/parse-cursor.ts"],"sourcesContent":["import { createIndexedPixelData } from '@4bitlabs/image';\nimport type { Cursor } from '../models/cursor.js';\nimport type { ParseCursorOptions } from './parse-cursor-options.js';\n\nconst DEFAULT_MAPPING = {\n black: 0x00,\n white: 0x0f,\n gray: 0x07,\n keyColor: 0x0d,\n};\n\nexport const parseCursor = (\n source: Uint8Array,\n options: ParseCursorOptions = {},\n): Cursor => {\n const { mapping = DEFAULT_MAPPING } = options;\n const { keyColor } = mapping;\n const colorLut = [\n mapping.black,\n mapping.white,\n mapping.keyColor,\n mapping.gray,\n ];\n\n const view = new DataView(\n source.buffer,\n source.byteOffset,\n source.byteLength,\n );\n\n const hotspot = [view.getUint16(0, true), view.getUint16(2, true)] as const;\n\n const img = createIndexedPixelData(16, 16, { keyColor });\n const stride = 16;\n for (let y = 0; y < 16; y++) {\n for (let x = 0; x < 16; x++) {\n const idx = 4 + y * 2;\n\n const tx = view.getUint16(idx, true);\n const clr = view.getUint16(idx + 32, true);\n\n const a = (tx >> (15 - x)) & 1;\n const b = (clr >> (15 - x)) & 1;\n const value = (a << 1) | b;\n img.pixels[x + y * stride] = colorLut[value];\n }\n }\n\n return {\n ...img,\n hotspot,\n };\n};\n"],"mappings":";;AAIA,MAAM,kBAAkB;CACtB,OAAO;CACP,OAAO;CACP,MAAM;CACN,UAAU;AACZ;AAEA,MAAa,eACX,QACA,UAA8B,CAAC,MACpB;CACX,MAAM,EAAE,UAAU,oBAAoB;CACtC,MAAM,EAAE,aAAa;CACrB,MAAM,WAAW;EACf,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;CACV;CAEA,MAAM,OAAO,IAAI,SACf,OAAO,QACP,OAAO,YACP,OAAO,UACT;CAEA,MAAM,UAAU,CAAC,KAAK,UAAU,GAAG,IAAI,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;CAEjE,MAAM,MAAM,uBAAuB,IAAI,IAAI,EAAE,SAAS,CAAC;CACvD,MAAM,SAAS;CACf,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;EAC3B,MAAM,MAAM,IAAI,IAAI;EAEpB,MAAM,KAAK,KAAK,UAAU,KAAK,IAAI;EACnC,MAAM,MAAM,KAAK,UAAU,MAAM,IAAI,IAAI;EAEzC,MAAM,IAAK,MAAO,KAAK,IAAM;EAC7B,MAAM,IAAK,OAAQ,KAAK,IAAM;EAC9B,MAAM,QAAS,KAAK,IAAK;EACzB,IAAI,OAAO,IAAI,IAAI,UAAU,SAAS;CACxC;CAGF,OAAO;EACL,GAAG;EACH;CACF;AACF"}
@@ -1,5 +1,8 @@
1
- export interface ParseFontOptions {
2
- color?: number;
3
- keyColor?: number;
1
+ //#region src/parsers/parse-font-options.d.ts
2
+ interface ParseFontOptions {
3
+ color?: number;
4
+ keyColor?: number;
4
5
  }
6
+ //#endregion
7
+ export { ParseFontOptions };
5
8
  //# sourceMappingURL=parse-font-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-font-options.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-font-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"parse-font-options.d.ts","names":[],"sources":["../../src/parsers/parse-font-options.ts"],"mappings":";UAAiB;EACf;EACA"}
@@ -1,4 +1,7 @@
1
- import { FontFace } from '../models/font-face';
2
- import { ParseFontOptions } from './parse-font-options';
3
- export declare const parseFont: (source: Uint8Array, options?: ParseFontOptions) => FontFace;
1
+ import { ParseFontOptions } from "./parse-font-options.js";
2
+ import { FontFace } from "../models/font-face.js";
3
+ //#region src/parsers/parse-font.d.ts
4
+ declare const parseFont: (source: Uint8Array, options?: ParseFontOptions) => FontFace;
5
+ //#endregion
6
+ export { parseFont };
4
7
  //# sourceMappingURL=parse-font.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-font.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-font.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,eAAO,MAAM,SAAS,WACZ,UAAU,YACT,gBAAgB,KACxB,QAqCF,CAAC"}
1
+ {"version":3,"file":"parse-font.d.ts","names":[],"sources":["../../src/parsers/parse-font.ts"],"mappings":";;;cAKa,YACX,QAAQ,YACR,UAAS,qBACR"}