@adobe/data 0.3.0 → 0.3.2

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 (158) hide show
  1. package/README.md +1 -1
  2. package/dist/cache/functions/hashing/array-buffer-to-hex.d.ts +1 -0
  3. package/dist/cache/functions/hashing/array-buffer-to-hex.js +27 -0
  4. package/dist/cache/functions/hashing/array-buffer-to-hex.js.map +1 -0
  5. package/dist/cache/functions/hashing/arrayBufferToHex.d.ts +1 -0
  6. package/dist/cache/functions/hashing/arrayBufferToHex.js +27 -0
  7. package/dist/cache/functions/hashing/arrayBufferToHex.js.map +1 -0
  8. package/dist/cache/functions/hashing/blob-to-hash.d.ts +5 -0
  9. package/dist/cache/functions/hashing/blob-to-hash.js +34 -8
  10. package/dist/cache/functions/hashing/blob-to-hash.js.map +1 -1
  11. package/dist/cache/functions/hashing/buffer-to-hash.js +1 -5
  12. package/dist/cache/functions/hashing/buffer-to-hash.js.map +1 -1
  13. package/dist/cache/functions/hashing/hashing.test.js +322 -65
  14. package/dist/cache/functions/hashing/hashing.test.js.map +1 -1
  15. package/dist/ecs/archetype/archetype.d.ts +8 -3
  16. package/dist/ecs/archetype/create-archetype.js +2 -1
  17. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  18. package/dist/ecs/archetype/create-archetype.test.js +4 -4
  19. package/dist/ecs/archetype/create-archetype.test.js.map +1 -1
  20. package/dist/ecs/archetype/delete-row.test.js +3 -3
  21. package/dist/ecs/archetype/delete-row.test.js.map +1 -1
  22. package/dist/ecs/database/create-database.js +17 -2
  23. package/dist/ecs/database/create-database.js.map +1 -1
  24. package/dist/ecs/database/create-database.test.js +234 -0
  25. package/dist/ecs/database/create-database.test.js.map +1 -1
  26. package/dist/ecs/database/database.d.ts +7 -4
  27. package/dist/ecs/database/observe-select-entities.d.ts +1 -1
  28. package/dist/ecs/database/observe-select-entities.js.map +1 -1
  29. package/dist/ecs/database/transactional-store/create-transactional-store.js +3 -0
  30. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  31. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +29 -2
  32. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  33. package/dist/ecs/database/transactional-store/patch-entity-values.d.ts +2 -2
  34. package/dist/ecs/database/transactional-store/patch-entity-values.js.map +1 -1
  35. package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +7 -0
  36. package/dist/ecs/entity-location-table/create-entity-location-table.js +14 -3
  37. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  38. package/dist/ecs/store/core/core.d.ts +13 -5
  39. package/dist/ecs/store/core/create-core.js +8 -3
  40. package/dist/ecs/store/core/create-core.js.map +1 -1
  41. package/dist/ecs/store/core/create-core.test.js +118 -0
  42. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  43. package/dist/ecs/store/core/select-entities.d.ts +1 -1
  44. package/dist/ecs/store/core/select-entities.js +2 -2
  45. package/dist/ecs/store/core/select-entities.js.map +1 -1
  46. package/dist/ecs/store/create-store.js.map +1 -1
  47. package/dist/ecs/store/create-store.test.js +21 -0
  48. package/dist/ecs/store/create-store.test.js.map +1 -1
  49. package/dist/ecs/store/store.d.ts +1 -1
  50. package/dist/equals.js +17 -11
  51. package/dist/equals.js.map +1 -1
  52. package/dist/equals.test.js +47 -0
  53. package/dist/equals.test.js.map +1 -1
  54. package/dist/functions/blit.d.ts +9 -0
  55. package/dist/functions/blit.js +42 -0
  56. package/dist/functions/blit.js.map +1 -0
  57. package/dist/functions/copy-view-bytes.d.ts +2 -0
  58. package/dist/functions/copy-view-bytes.js +29 -0
  59. package/dist/functions/copy-view-bytes.js.map +1 -0
  60. package/dist/functions/index.d.ts +3 -0
  61. package/dist/functions/index.js +3 -0
  62. package/dist/functions/index.js.map +1 -1
  63. package/dist/functions/serialization/codec.d.ts +24 -0
  64. package/dist/functions/serialization/codec.js +48 -0
  65. package/dist/functions/serialization/codec.js.map +1 -0
  66. package/dist/functions/serialization/deserialize.d.ts +4 -0
  67. package/dist/functions/serialization/deserialize.js +15 -0
  68. package/dist/functions/serialization/deserialize.js.map +1 -0
  69. package/dist/functions/serialization/index.d.ts +2 -0
  70. package/dist/functions/serialization/index.js +3 -0
  71. package/dist/functions/serialization/index.js.map +1 -0
  72. package/dist/functions/serialization/register-typed-array-codecs.d.ts +1 -0
  73. package/dist/functions/serialization/register-typed-array-codecs.js +13 -0
  74. package/dist/functions/serialization/register-typed-array-codecs.js.map +1 -0
  75. package/dist/functions/serialization/serialization.test.d.ts +1 -0
  76. package/dist/functions/serialization/serialization.test.js +79 -0
  77. package/dist/functions/serialization/serialization.test.js.map +1 -0
  78. package/dist/functions/serialization/serialize.d.ts +4 -0
  79. package/dist/functions/serialization/serialize.js +19 -0
  80. package/dist/functions/serialization/serialize.js.map +1 -0
  81. package/dist/observe/index.d.ts +1 -0
  82. package/dist/observe/index.js +1 -0
  83. package/dist/observe/index.js.map +1 -1
  84. package/dist/observe/observe.test.js +24 -0
  85. package/dist/observe/observe.test.js.map +1 -1
  86. package/dist/observe/to-async-generator.d.ts +9 -0
  87. package/dist/observe/to-async-generator.js +129 -0
  88. package/dist/observe/to-async-generator.js.map +1 -0
  89. package/dist/observe/to-async-generator.test.d.ts +1 -0
  90. package/dist/observe/to-async-generator.test.js +413 -0
  91. package/dist/observe/to-async-generator.test.js.map +1 -0
  92. package/dist/observe/with-map.d.ts +1 -1
  93. package/dist/observe/with-map.js +4 -1
  94. package/dist/observe/with-map.js.map +1 -1
  95. package/dist/schema/f32 copy.d.ts +6 -0
  96. package/dist/schema/f32 copy.js +6 -0
  97. package/dist/schema/f32 copy.js.map +1 -0
  98. package/dist/schema/f64.d.ts +6 -0
  99. package/dist/schema/f64.js +6 -0
  100. package/dist/schema/f64.js.map +1 -0
  101. package/dist/schema/schema.d.ts +5 -1
  102. package/dist/schema/time.d.ts +1 -1
  103. package/dist/schema/time.js +2 -2
  104. package/dist/table/add-row.js +4 -3
  105. package/dist/table/add-row.js.map +1 -1
  106. package/dist/table/copy-column-to-gpu-buffer.js +2 -2
  107. package/dist/table/copy-column-to-gpu-buffer.js.map +1 -1
  108. package/dist/table/create-table.js +4 -2
  109. package/dist/table/create-table.js.map +1 -1
  110. package/dist/table/create-table.test.js +1 -1
  111. package/dist/table/create-table.test.js.map +1 -1
  112. package/dist/table/delete-row.js +1 -1
  113. package/dist/table/delete-row.js.map +1 -1
  114. package/dist/table/ensure-capacity.d.ts +1 -1
  115. package/dist/table/ensure-capacity.js +10 -10
  116. package/dist/table/ensure-capacity.js.map +1 -1
  117. package/dist/table/select-rows.js +2 -2
  118. package/dist/table/select-rows.js.map +1 -1
  119. package/dist/table/table.d.ts +4 -2
  120. package/dist/tsconfig.tsbuildinfo +1 -1
  121. package/dist/typed-buffer/create-array-buffer.d.ts +3 -3
  122. package/dist/typed-buffer/create-array-buffer.js +36 -32
  123. package/dist/typed-buffer/create-array-buffer.js.map +1 -1
  124. package/dist/typed-buffer/create-const-buffer.d.ts +3 -1
  125. package/dist/typed-buffer/create-const-buffer.js +30 -28
  126. package/dist/typed-buffer/create-const-buffer.js.map +1 -1
  127. package/dist/typed-buffer/create-const-buffer.test.js +18 -46
  128. package/dist/typed-buffer/create-const-buffer.test.js.map +1 -1
  129. package/dist/typed-buffer/create-number-buffer.d.ts +2 -6
  130. package/dist/typed-buffer/create-number-buffer.js +40 -33
  131. package/dist/typed-buffer/create-number-buffer.js.map +1 -1
  132. package/dist/typed-buffer/create-struct-buffer.d.ts +3 -7
  133. package/dist/typed-buffer/create-struct-buffer.js +58 -41
  134. package/dist/typed-buffer/create-struct-buffer.js.map +1 -1
  135. package/dist/typed-buffer/create-typed-buffer.d.ts +2 -5
  136. package/dist/typed-buffer/create-typed-buffer.js +16 -8
  137. package/dist/typed-buffer/create-typed-buffer.js.map +1 -1
  138. package/dist/typed-buffer/is-typed-buffer.d.ts +2 -0
  139. package/dist/typed-buffer/is-typed-buffer.js +5 -0
  140. package/dist/typed-buffer/is-typed-buffer.js.map +1 -0
  141. package/dist/typed-buffer/is-typed-buffer.test.d.ts +1 -0
  142. package/dist/typed-buffer/is-typed-buffer.test.js +26 -0
  143. package/dist/typed-buffer/is-typed-buffer.test.js.map +1 -0
  144. package/dist/typed-buffer/register-typed-buffer-codecs.d.ts +1 -0
  145. package/dist/typed-buffer/register-typed-buffer-codecs.js +80 -0
  146. package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -0
  147. package/dist/typed-buffer/typed-buffer-equals.d.ts +2 -0
  148. package/dist/typed-buffer/typed-buffer-equals.js +20 -0
  149. package/dist/typed-buffer/typed-buffer-equals.js.map +1 -0
  150. package/dist/typed-buffer/typed-buffer-equals.test.d.ts +1 -0
  151. package/dist/typed-buffer/typed-buffer-equals.test.js +234 -0
  152. package/dist/typed-buffer/typed-buffer-equals.test.js.map +1 -0
  153. package/dist/typed-buffer/typed-buffer.d.ts +18 -8
  154. package/dist/typed-buffer/typed-buffer.js +6 -1
  155. package/dist/typed-buffer/typed-buffer.js.map +1 -1
  156. package/dist/typed-buffer/typed-buffer.test.js +30 -66
  157. package/dist/typed-buffer/typed-buffer.test.js.map +1 -1
  158. package/package.json +1 -1
package/README.md CHANGED
@@ -58,7 +58,7 @@ It is important that we use `as const` for the schema definition. Without that,
58
58
 
59
59
  ### Normalized Data
60
60
 
61
- Data is considered "Normalized" when all object keys contained anywhere within it are alphabetically sorted. We include a `normalize` function which performs this conversion. This is particularly useful when you want to use data as a cache key.
61
+ Data is considered "Normalized" when all object keys contained anywhere within it are lexigraphically sorted. We include a `normalize` function which performs this conversion. This is particularly useful when you want to use data as a cache key.
62
62
 
63
63
  ```typescript
64
64
  const notNormalized = { b: 2, a: 1 };
@@ -0,0 +1 @@
1
+ export declare function arrayBufferToHex(buffer: ArrayBuffer): string;
@@ -0,0 +1,27 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ export function arrayBufferToHex(buffer) {
23
+ return [...new Uint8Array(buffer)]
24
+ .map((x) => x.toString(16).padStart(2, "0"))
25
+ .join("");
26
+ }
27
+ //# sourceMappingURL=array-buffer-to-hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-buffer-to-hex.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/array-buffer-to-hex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAChD,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function arrayBufferToHex(buffer: ArrayBuffer): string;
@@ -0,0 +1,27 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ export function arrayBufferToHex(buffer) {
23
+ return [...new Uint8Array(buffer)]
24
+ .map((x) => x.toString(16).padStart(2, "0"))
25
+ .join("");
26
+ }
27
+ //# sourceMappingURL=arrayBufferToHex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayBufferToHex.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/arrayBufferToHex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAChD,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1,4 +1,9 @@
1
1
  /**
2
2
  * Converts a Blob to a hash using the blob content and type using SHA-256.
3
3
  */
4
+ /**
5
+ * Converts a Blob to a SHA-256 hash.
6
+ * • Uses the streaming `crypto.DigestStream` API when present (no large buffers).
7
+ * • Falls back to the original buffer-based approach otherwise.
8
+ */
4
9
  export declare function blobToHash(blob: Blob): Promise<string>;
@@ -19,26 +19,52 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.*/
22
+ import { arrayBufferToHex } from "./array-buffer-to-hex.js";
22
23
  import { bufferToHash } from "./buffer-to-hash.js";
23
24
  /**
24
25
  * Converts a Blob to a hash using the blob content and type using SHA-256.
25
26
  */
27
+ /**
28
+ * Converts a Blob to a SHA-256 hash.
29
+ * • Uses the streaming `crypto.DigestStream` API when present (no large buffers).
30
+ * • Falls back to the original buffer-based approach otherwise.
31
+ */
26
32
  export async function blobToHash(blob) {
33
+ // ── 1. Streamed path
34
+ if ("DigestStream" in crypto) {
35
+ const digestStream = new crypto.DigestStream("SHA-256");
36
+ // Encode the MIME-type as UTF-16LE
37
+ const tCodes = new Uint16Array(blob.type.length);
38
+ for (let i = 0; i < blob.type.length; i++)
39
+ tCodes[i] = blob.type.charCodeAt(i);
40
+ const tBytes = new Uint8Array(tCodes.buffer);
41
+ // Feed type + blob chunks into the hash
42
+ const writer = digestStream.writable.getWriter();
43
+ await writer.write(tBytes);
44
+ const reader = blob.stream().getReader();
45
+ while (true) {
46
+ const { value, done } = await reader.read();
47
+ if (done)
48
+ break;
49
+ await writer.write(value);
50
+ }
51
+ await writer.close();
52
+ const hashBuf = await digestStream.digest;
53
+ return arrayBufferToHex(hashBuf);
54
+ }
55
+ // ── 2. Fallback
27
56
  const { type } = blob;
28
- // create a single buffer to hold both the type and the blob
29
57
  const typeByteLength = type.length * 2;
30
58
  const buffer = new ArrayBuffer(typeByteLength + blob.size);
31
- // write the type into the first part of the buffer
59
+ // Write the MIME-type (UTF-16LE) into the first part of the buffer
32
60
  const charView = new Uint16Array(buffer, 0, type.length);
33
- for (let i = 0, strLen = type.length; i < strLen; i++) {
61
+ for (let i = 0; i < type.length; i++)
34
62
  charView[i] = type.charCodeAt(i);
35
- }
36
- // write the blob into the second part of the buffer
63
+ // Append the blob bytes
37
64
  const byteView = new Uint8Array(buffer);
38
65
  const blobArrayBuffer = await blob.arrayBuffer();
39
66
  byteView.set(new Uint8Array(blobArrayBuffer), typeByteLength);
40
- // finally create the hash off the combined buffer
41
- const hash = await bufferToHash(buffer);
42
- return hash;
67
+ // Hash the combined buffer
68
+ return bufferToHash(buffer);
43
69
  }
44
70
  //# sourceMappingURL=blob-to-hash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blob-to-hash.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/blob-to-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU;IACzC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,6DAA6D;IAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,qDAAqD;IACrD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACjD,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC;IAE9D,mDAAmD;IACnD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"blob-to-hash.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/blob-to-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU;IACzC,sBAAsB;IACtB,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,IAAK,MAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEjE,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,wCAAwC;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;QAC1C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,iBAAiB;IACjB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEvE,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACjD,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC;IAE9D,2BAA2B;IAC3B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -19,11 +19,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.*/
22
- function arrayBufferToHex(buffer) {
23
- return [...new Uint8Array(buffer)]
24
- .map((x) => x.toString(16).padStart(2, "0"))
25
- .join("");
26
- }
22
+ import { arrayBufferToHex } from "./array-buffer-to-hex.js";
27
23
  /**
28
24
  * Converts an ArrayBuffer to a hash using SHA-256.
29
25
  */
@@ -1 +1 @@
1
- {"version":3,"file":"buffer-to-hash.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/buffer-to-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,SAAS,gBAAgB,CAAC,MAAmB;IAC3C,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAmB;IACpD,OAAO,gBAAgB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"buffer-to-hash.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/buffer-to-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAmB;IACpD,OAAO,gBAAgB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC"}
@@ -21,75 +21,332 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.*/
22
22
  import { blobToHash } from "./blob-to-hash.js";
23
23
  import { jsonToHash } from "./json-to-hash.js";
24
- import { describe, expect, it } from "vitest";
24
+ import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
25
25
  describe("test hashing", () => {
26
- it("blobToHash should avoid collisions based on content and type", async () => {
27
- const blobs = [
28
- new Blob([
29
- new Uint8Array([
30
- 45, 255, 128, 0, 1, 33, 33, 85, 129, 250, 245, 12, 33, 89, 7,
31
- ]),
32
- ]),
33
- new Blob([
34
- new Uint8Array([
35
- 45, 255, 128, 0, 1, 33, 33, 85, 129, 250, 245, 12, 33, 89, 8,
36
- ]),
37
- ]),
38
- new Blob(["long text sample here"]),
39
- new Blob(["long text sample here."]),
40
- new Blob(["a"]),
41
- new Blob(["b"]),
42
- new Blob(["a"], { type: "octet/binary" }),
43
- new Blob(["a"], { type: "text/plain" }),
44
- // empty blobs should work
45
- new Blob([""]),
46
- new Blob([""], { type: "octet/binary" }),
47
- new Blob([""], { type: "text/plain" }),
48
- ];
49
- const hashPromises = blobs.map((blob) => blobToHash(blob));
50
- const hashes = await Promise.all(hashPromises);
51
- const unique = new Set(hashes);
52
- const collisions = hashes.length - unique.size;
53
- expect(collisions).toBe(0);
26
+ let originalCrypto;
27
+ beforeEach(() => {
28
+ // Store original crypto for restoration
29
+ originalCrypto = crypto;
54
30
  });
55
- it("blobToHash should generate consistent hashes", async () => {
56
- const blobs = [
57
- new Blob(["long text sample here"], { type: "text/plain" }),
58
- new Blob(["long text sample here"], { type: "text/plain" }),
59
- new Blob(["long text sample here"], { type: "text/plain" }),
60
- ];
61
- const hashPromises = blobs.map((blob) => blobToHash(blob));
62
- const hashes = await Promise.all(hashPromises);
63
- const unique = new Set(hashes);
64
- expect(unique.size).toBe(1);
31
+ afterEach(() => {
32
+ // Restore original crypto
33
+ Object.defineProperty(window, 'crypto', {
34
+ value: originalCrypto,
35
+ writable: true,
36
+ configurable: true
37
+ });
38
+ vi.restoreAllMocks();
65
39
  });
66
- it("jsonToHash should avoid collisions", async () => {
67
- const values = [
68
- "foo",
69
- { a: 1 },
70
- {},
71
- [],
72
- { a: 2 },
73
- null,
74
- "",
75
- { alpha: "bravo" },
76
- ];
77
- const hashPromises = values.map((value) => jsonToHash(value));
78
- const hashes = await Promise.all(hashPromises);
79
- const unique = new Set(hashes);
80
- const collisions = hashes.length - unique.size;
81
- expect(collisions).toBe(0);
40
+ describe("blobToHash", () => {
41
+ it("should avoid collisions based on content and type", async () => {
42
+ const blobs = [
43
+ new Blob([
44
+ new Uint8Array([
45
+ 45, 255, 128, 0, 1, 33, 33, 85, 129, 250, 245, 12, 33, 89, 7,
46
+ ]),
47
+ ]),
48
+ new Blob([
49
+ new Uint8Array([
50
+ 45, 255, 128, 0, 1, 33, 33, 85, 129, 250, 245, 12, 33, 89, 8,
51
+ ]),
52
+ ]),
53
+ new Blob(["long text sample here"]),
54
+ new Blob(["long text sample here."]),
55
+ new Blob(["a"]),
56
+ new Blob(["b"]),
57
+ new Blob(["a"], { type: "octet/binary" }),
58
+ new Blob(["a"], { type: "text/plain" }),
59
+ // empty blobs should work
60
+ new Blob([""]),
61
+ new Blob([""], { type: "octet/binary" }),
62
+ new Blob([""], { type: "text/plain" }),
63
+ ];
64
+ const hashPromises = blobs.map((blob) => blobToHash(blob));
65
+ const hashes = await Promise.all(hashPromises);
66
+ const unique = new Set(hashes);
67
+ const collisions = hashes.length - unique.size;
68
+ expect(collisions).toBe(0);
69
+ });
70
+ it("should generate consistent hashes", async () => {
71
+ const blobs = [
72
+ new Blob(["long text sample here"], { type: "text/plain" }),
73
+ new Blob(["long text sample here"], { type: "text/plain" }),
74
+ new Blob(["long text sample here"], { type: "text/plain" }),
75
+ ];
76
+ const hashPromises = blobs.map((blob) => blobToHash(blob));
77
+ const hashes = await Promise.all(hashPromises);
78
+ const unique = new Set(hashes);
79
+ expect(unique.size).toBe(1);
80
+ });
81
+ it("should handle large blobs efficiently", async () => {
82
+ // Create a large blob (1MB) to test streaming performance
83
+ const largeData = new Uint8Array(1024 * 1024);
84
+ for (let i = 0; i < largeData.length; i++) {
85
+ largeData[i] = i % 256;
86
+ }
87
+ const largeBlob = new Blob([largeData], { type: "application/octet-stream" });
88
+ const startTime = performance.now();
89
+ const hash = await blobToHash(largeBlob);
90
+ const endTime = performance.now();
91
+ expect(hash).toBeDefined();
92
+ expect(hash.length).toBe(64); // SHA-256 hex string length
93
+ expect(endTime - startTime).toBeLessThan(5000); // Should complete within 5 seconds
94
+ });
95
+ it("should handle blobs with complex MIME types", async () => {
96
+ const complexTypes = [
97
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
98
+ "image/svg+xml; charset=utf-8",
99
+ "text/html; charset=ISO-8859-1",
100
+ "application/json; version=2.0",
101
+ "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
102
+ ];
103
+ const blobs = complexTypes.map(type => new Blob(["test content"], { type }));
104
+ const hashPromises = blobs.map((blob) => blobToHash(blob));
105
+ const hashes = await Promise.all(hashPromises);
106
+ // All should be unique due to different MIME types
107
+ const unique = new Set(hashes);
108
+ expect(unique.size).toBe(complexTypes.length);
109
+ });
110
+ it("should handle empty MIME types", async () => {
111
+ const emptyTypeBlob = new Blob(["content"], { type: "" });
112
+ const hash = await blobToHash(emptyTypeBlob);
113
+ expect(hash).toBeDefined();
114
+ expect(hash.length).toBe(64);
115
+ });
116
+ it("should handle unicode MIME types", async () => {
117
+ const unicodeTypes = [
118
+ "text/plain; charset=utf-8",
119
+ "application/json; charset=utf-16",
120
+ "text/html; charset=iso-8859-1"
121
+ ];
122
+ const blobs = unicodeTypes.map(type => new Blob(["test content"], { type }));
123
+ const hashPromises = blobs.map((blob) => blobToHash(blob));
124
+ const hashes = await Promise.all(hashPromises);
125
+ // All should be unique
126
+ const unique = new Set(hashes);
127
+ expect(unique.size).toBe(unicodeTypes.length);
128
+ });
129
+ it("should handle very large MIME types", async () => {
130
+ // Test with extremely long MIME type
131
+ const longMimeType = "application/" + "x".repeat(1000) + "; charset=utf-8";
132
+ const blob = new Blob(["test content"], { type: longMimeType });
133
+ const hash = await blobToHash(blob);
134
+ expect(hash).toBeDefined();
135
+ expect(hash.length).toBe(64);
136
+ });
137
+ it("should handle blobs with special characters in MIME type", async () => {
138
+ const specialMimeTypes = [
139
+ "text/plain; charset=utf-8; boundary=\"----=_NextPart_000_0001_01C12345.ABCDEF12\"",
140
+ "application/json; version=\"2.0\"; encoding=\"utf-8\"",
141
+ "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW; charset=utf-8"
142
+ ];
143
+ const blobs = specialMimeTypes.map(type => new Blob(["test content"], { type }));
144
+ const hashPromises = blobs.map((blob) => blobToHash(blob));
145
+ const hashes = await Promise.all(hashPromises);
146
+ // All should be unique
147
+ const unique = new Set(hashes);
148
+ expect(unique.size).toBe(specialMimeTypes.length);
149
+ });
150
+ describe("streaming path (DigestStream)", () => {
151
+ it("should use DigestStream when available", async () => {
152
+ // Mock DigestStream to verify it's being used
153
+ const mockDigestStream = {
154
+ writable: {
155
+ getWriter: vi.fn().mockReturnValue({
156
+ write: vi.fn().mockResolvedValue(undefined),
157
+ close: vi.fn().mockResolvedValue(undefined)
158
+ })
159
+ },
160
+ digest: Promise.resolve(new ArrayBuffer(32))
161
+ };
162
+ const mockCrypto = {
163
+ ...originalCrypto,
164
+ DigestStream: vi.fn().mockImplementation(() => mockDigestStream)
165
+ };
166
+ Object.defineProperty(window, 'crypto', {
167
+ value: mockCrypto,
168
+ writable: true,
169
+ configurable: true
170
+ });
171
+ const blob = new Blob(["test content"], { type: "text/plain" });
172
+ await blobToHash(blob);
173
+ expect(mockCrypto.DigestStream).toHaveBeenCalledWith("SHA-256");
174
+ expect(mockDigestStream.writable.getWriter).toHaveBeenCalled();
175
+ });
176
+ it("should handle streaming errors gracefully", async () => {
177
+ const mockDigestStream = {
178
+ writable: {
179
+ getWriter: vi.fn().mockReturnValue({
180
+ write: vi.fn().mockRejectedValue(new Error("Stream write error")),
181
+ close: vi.fn().mockResolvedValue(undefined)
182
+ })
183
+ },
184
+ digest: Promise.resolve(new ArrayBuffer(32))
185
+ };
186
+ const mockCrypto = {
187
+ ...originalCrypto,
188
+ DigestStream: vi.fn().mockImplementation(() => mockDigestStream)
189
+ };
190
+ Object.defineProperty(window, 'crypto', {
191
+ value: mockCrypto,
192
+ writable: true,
193
+ configurable: true
194
+ });
195
+ const blob = new Blob(["test content"], { type: "text/plain" });
196
+ await expect(blobToHash(blob)).rejects.toThrow("Stream write error");
197
+ });
198
+ it("should handle DigestStream digest errors", async () => {
199
+ const mockDigestStream = {
200
+ writable: {
201
+ getWriter: vi.fn().mockReturnValue({
202
+ write: vi.fn().mockResolvedValue(undefined),
203
+ close: vi.fn().mockResolvedValue(undefined)
204
+ })
205
+ },
206
+ get digest() {
207
+ return Promise.reject(new Error("Digest error"));
208
+ }
209
+ };
210
+ const mockCrypto = {
211
+ ...originalCrypto,
212
+ DigestStream: vi.fn().mockImplementation(() => mockDigestStream)
213
+ };
214
+ Object.defineProperty(window, 'crypto', {
215
+ value: mockCrypto,
216
+ writable: true,
217
+ configurable: true
218
+ });
219
+ const blob = new Blob(["test content"], { type: "text/plain" });
220
+ // Handle the unhandled rejection by catching it
221
+ try {
222
+ await blobToHash(blob);
223
+ // If we get here, the test should fail
224
+ expect(true).toBe(false);
225
+ }
226
+ catch (error) {
227
+ expect(error).toBeInstanceOf(Error);
228
+ expect(error.message).toBe("Digest error");
229
+ }
230
+ });
231
+ });
232
+ describe("fallback path (buffer-based)", () => {
233
+ it("should fall back to buffer-based approach when DigestStream unavailable", async () => {
234
+ // Remove DigestStream from crypto but keep subtle
235
+ const mockCrypto = {
236
+ ...originalCrypto,
237
+ subtle: originalCrypto.subtle
238
+ };
239
+ delete mockCrypto.DigestStream;
240
+ Object.defineProperty(window, 'crypto', {
241
+ value: mockCrypto,
242
+ writable: true,
243
+ configurable: true
244
+ });
245
+ const blob = new Blob(["test content"], { type: "text/plain" });
246
+ const hash = await blobToHash(blob);
247
+ expect(hash).toBeDefined();
248
+ expect(hash.length).toBe(64);
249
+ });
250
+ it("should handle buffer-based approach with large blobs", async () => {
251
+ // Remove DigestStream from crypto but keep subtle
252
+ const mockCrypto = {
253
+ ...originalCrypto,
254
+ subtle: originalCrypto.subtle
255
+ };
256
+ delete mockCrypto.DigestStream;
257
+ Object.defineProperty(window, 'crypto', {
258
+ value: mockCrypto,
259
+ writable: true,
260
+ configurable: true
261
+ });
262
+ // Create a moderately large blob
263
+ const data = new Uint8Array(100 * 1024); // 100KB
264
+ for (let i = 0; i < data.length; i++) {
265
+ data[i] = i % 256;
266
+ }
267
+ const blob = new Blob([data], { type: "application/octet-stream" });
268
+ const hash = await blobToHash(blob);
269
+ expect(hash).toBeDefined();
270
+ expect(hash.length).toBe(64);
271
+ });
272
+ });
273
+ it("should produce same hash regardless of path used", async () => {
274
+ const testBlob = new Blob(["test content"], { type: "text/plain" });
275
+ // Test with streaming path (if available)
276
+ const streamingHash = await blobToHash(testBlob);
277
+ // Test with fallback path
278
+ const mockCrypto = {
279
+ ...originalCrypto,
280
+ subtle: originalCrypto.subtle
281
+ };
282
+ delete mockCrypto.DigestStream;
283
+ Object.defineProperty(window, 'crypto', {
284
+ value: mockCrypto,
285
+ writable: true,
286
+ configurable: true
287
+ });
288
+ const fallbackHash = await blobToHash(testBlob);
289
+ // Both should produce the same hash for the same input
290
+ expect(streamingHash).toBe(fallbackHash);
291
+ });
292
+ it("should produce identical hashes for multiple test cases", async () => {
293
+ const testCases = [
294
+ { content: "simple text", type: "text/plain" },
295
+ { content: "complex content with special chars: !@#$%^&*()", type: "application/json" },
296
+ { content: "", type: "text/plain" },
297
+ { content: "a", type: "" },
298
+ { content: "very long content ".repeat(100), type: "text/html; charset=utf-8" }
299
+ ];
300
+ for (const testCase of testCases) {
301
+ const blob = new Blob([testCase.content], { type: testCase.type });
302
+ // Get streaming hash
303
+ const streamingHash = await blobToHash(blob);
304
+ // Get fallback hash
305
+ const mockCrypto = {
306
+ ...originalCrypto,
307
+ subtle: originalCrypto.subtle
308
+ };
309
+ delete mockCrypto.DigestStream;
310
+ Object.defineProperty(window, 'crypto', {
311
+ value: mockCrypto,
312
+ writable: true,
313
+ configurable: true
314
+ });
315
+ const fallbackHash = await blobToHash(blob);
316
+ // Verify they match
317
+ expect(streamingHash).toBe(fallbackHash);
318
+ }
319
+ });
82
320
  });
83
- it("jsonToHash should generate consistent hashes", async () => {
84
- const values = [
85
- { a: 1, b: 2, foo: "bar" },
86
- { a: 1, b: 2, foo: "bar" },
87
- { a: 1, b: 2, foo: "bar" },
88
- ];
89
- const hashPromises = values.map((value) => jsonToHash(value));
90
- const hashes = await Promise.all(hashPromises);
91
- const unique = new Set(hashes);
92
- expect(unique.size).toBe(1);
321
+ describe("jsonToHash", () => {
322
+ it("should avoid collisions", async () => {
323
+ const values = [
324
+ "foo",
325
+ { a: 1 },
326
+ {},
327
+ [],
328
+ { a: 2 },
329
+ null,
330
+ "",
331
+ { alpha: "bravo" },
332
+ ];
333
+ const hashPromises = values.map((value) => jsonToHash(value));
334
+ const hashes = await Promise.all(hashPromises);
335
+ const unique = new Set(hashes);
336
+ const collisions = hashes.length - unique.size;
337
+ expect(collisions).toBe(0);
338
+ });
339
+ it("should generate consistent hashes", async () => {
340
+ const values = [
341
+ { a: 1, b: 2, foo: "bar" },
342
+ { a: 1, b: 2, foo: "bar" },
343
+ { a: 1, b: 2, foo: "bar" },
344
+ ];
345
+ const hashPromises = values.map((value) => jsonToHash(value));
346
+ const hashes = await Promise.all(hashPromises);
347
+ const unique = new Set(hashes);
348
+ expect(unique.size).toBe(1);
349
+ });
93
350
  });
94
351
  });
95
352
  //# sourceMappingURL=hashing.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hashing.test.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/hashing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hashing.test.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/hashing.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,cAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,wCAAwC;QACxC,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B;QAC1B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;YACtC,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,KAAK,GAAG;gBACZ,IAAI,IAAI,CAAC;oBACP,IAAI,UAAU,CAAC;wBACb,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;qBAC7D,CAAC;iBACH,CAAC;gBACF,IAAI,IAAI,CAAC;oBACP,IAAI,UAAU,CAAC;wBACb,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;qBAC7D,CAAC;iBACH,CAAC;gBACF,IAAI,IAAI,CAAC,CAAC,uBAAuB,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,CAAC,wBAAwB,CAAC,CAAC;gBACpC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBACvC,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aACvC,CAAC;YACF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,KAAK,GAAG;gBACZ,IAAI,IAAI,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC3D,IAAI,IAAI,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC3D,IAAI,IAAI,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aAC5D,CAAC;YACF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,0DAA0D;YAC1D,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACzB,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAE9E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;YAC1D,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,YAAY,GAAG;gBACnB,mEAAmE;gBACnE,8BAA8B;gBAC9B,+BAA+B;gBAC/B,+BAA+B;gBAC/B,qEAAqE;aACtE,CAAC;YAEF,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACpC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CACrC,CAAC;YAEF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE/C,mDAAmD;YACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,YAAY,GAAG;gBACnB,2BAA2B;gBAC3B,kCAAkC;gBAClC,+BAA+B;aAChC,CAAC;YAEF,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACpC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CACrC,CAAC;YAEF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE/C,uBAAuB;YACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,qCAAqC;YACrC,MAAM,YAAY,GAAG,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC;YAC3E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,gBAAgB,GAAG;gBACvB,mFAAmF;gBACnF,uDAAuD;gBACvD,oFAAoF;aACrF,CAAC;YAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACxC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CACrC,CAAC;YAEF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE/C,uBAAuB;YACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACtD,8CAA8C;gBAC9C,MAAM,gBAAgB,GAAG;oBACvB,QAAQ,EAAE;wBACR,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;4BACjC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;4BAC3C,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;yBAC5C,CAAC;qBACH;oBACD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;iBAC7C,CAAC;gBAEF,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;iBACjE,CAAC;gBAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAChE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEvB,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBAChE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,gBAAgB,GAAG;oBACvB,QAAQ,EAAE;wBACR,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;4BACjC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;4BACjE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;yBAC5C,CAAC;qBACH;oBACD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;iBAC7C,CAAC;gBAEF,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;iBACjE,CAAC;gBAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAEhE,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,gBAAgB,GAAG;oBACvB,QAAQ,EAAE;wBACR,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;4BACjC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;4BAC3C,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;yBAC5C,CAAC;qBACH;oBACD,IAAI,MAAM;wBACR,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;oBACnD,CAAC;iBACF,CAAC;gBAEF,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;iBACjE,CAAC;gBAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAEhE,gDAAgD;gBAChD,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;oBACvB,uCAAuC;oBACvC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;YAC5C,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACvF,kDAAkD;gBAClD,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAC;gBACF,OAAQ,UAAkB,CAAC,YAAY,CAAC;gBAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEpC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBACpE,kDAAkD;gBAClD,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAC;gBACF,OAAQ,UAAkB,CAAC,YAAY,CAAC;gBAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,iCAAiC;gBACjC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ;gBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACpB,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBAEpE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEpE,0CAA0C;YAC1C,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEjD,0BAA0B;YAC1B,MAAM,UAAU,GAAG;gBACjB,GAAG,cAAc;gBACjB,MAAM,EAAE,cAAc,CAAC,MAAM;aAC9B,CAAC;YACF,OAAQ,UAAkB,CAAC,YAAY,CAAC;YAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;gBACtC,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEhD,uDAAuD;YACvD,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,SAAS,GAAG;gBAChB,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE;gBAC9C,EAAE,OAAO,EAAE,gDAAgD,EAAE,IAAI,EAAE,kBAAkB,EAAE;gBACvF,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBACnC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC1B,EAAE,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE;aAChF,CAAC;YAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEnE,qBAAqB;gBACrB,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBAE7C,oBAAoB;gBACpB,MAAM,UAAU,GAAG;oBACjB,GAAG,cAAc;oBACjB,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAC;gBACF,OAAQ,UAAkB,CAAC,YAAY,CAAC;gBAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;gBAE5C,oBAAoB;gBACpB,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,MAAM,GAAG;gBACb,KAAK;gBACL,EAAE,CAAC,EAAE,CAAC,EAAE;gBACR,EAAE;gBACF,EAAE;gBACF,EAAE,CAAC,EAAE,CAAC,EAAE;gBACR,IAAI;gBACJ,EAAE;gBACF,EAAE,KAAK,EAAE,OAAO,EAAE;aACnB,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,MAAM,GAAG;gBACb,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE;gBAC1B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE;gBAC1B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE;aAC3B,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,13 +3,18 @@ import { Entity } from "../entity.js";
3
3
  import { Table, ReadonlyTable } from "../../table/index.js";
4
4
  export type EntityInsertValues<C> = Omit<C, "id">;
5
5
  export type ArchetypeId = number;
6
- interface BaseArchetype<C> {
6
+ interface BaseArchetype {
7
7
  readonly id: ArchetypeId;
8
8
  readonly components: ReadonlySet<string>;
9
9
  }
10
- export interface ReadonlyArchetype<C extends CoreComponents> extends BaseArchetype<C>, ReadonlyTable<C> {
10
+ export interface ReadonlyArchetype<C extends CoreComponents> extends BaseArchetype, ReadonlyTable<C> {
11
11
  }
12
- export interface Archetype<C extends CoreComponents = CoreComponents> extends BaseArchetype<C>, Table<C> {
12
+ export interface Archetype<C extends CoreComponents = CoreComponents> extends BaseArchetype, Table<C> {
13
13
  insert: (rowData: EntityInsertValues<C>) => Entity;
14
14
  }
15
+ export type FromArchetype<T> = T extends ReadonlyArchetype<infer C> ? {
16
+ readonly [K in keyof C]: C[K];
17
+ } : T extends Archetype<infer C> ? {
18
+ readonly [K in keyof C]: C[K];
19
+ } : never;
15
20
  export {};