@fulmenhq/tsfulmen 0.3.3 → 0.4.1

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 (123) hide show
  1. package/CHANGELOG.md +76 -1
  2. package/README.md +30 -1
  3. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  4. package/dist/appidentity/index.js +9 -2209
  5. package/dist/appidentity/index.js.map +1 -1
  6. package/dist/assets/index.d.ts +184 -0
  7. package/dist/assets/index.js +4 -0
  8. package/dist/assets/index.js.map +1 -0
  9. package/dist/bin/prometheus-cli.js +15 -9139
  10. package/dist/bin/prometheus-cli.js.map +1 -1
  11. package/dist/bin/schema-cli.js +4 -6098
  12. package/dist/bin/schema-cli.js.map +1 -1
  13. package/dist/bin/signals-cli.js +15 -1910
  14. package/dist/bin/signals-cli.js.map +1 -1
  15. package/dist/chunk-24BAF63H.js +194 -0
  16. package/dist/chunk-24BAF63H.js.map +1 -0
  17. package/dist/chunk-3HISR2XI.js +36 -0
  18. package/dist/chunk-3HISR2XI.js.map +1 -0
  19. package/dist/chunk-56F2EEAG.js +328 -0
  20. package/dist/chunk-56F2EEAG.js.map +1 -0
  21. package/dist/chunk-5HZEJGZ5.js +725 -0
  22. package/dist/chunk-5HZEJGZ5.js.map +1 -0
  23. package/dist/chunk-7YWACZEJ.js +837 -0
  24. package/dist/chunk-7YWACZEJ.js.map +1 -0
  25. package/dist/chunk-BCO3FUUO.js +682 -0
  26. package/dist/chunk-BCO3FUUO.js.map +1 -0
  27. package/dist/chunk-GOTEQYAD.js +410 -0
  28. package/dist/chunk-GOTEQYAD.js.map +1 -0
  29. package/dist/chunk-HY6JQOFN.js +32 -0
  30. package/dist/chunk-HY6JQOFN.js.map +1 -0
  31. package/dist/chunk-LMNAUTW7.js +43 -0
  32. package/dist/chunk-LMNAUTW7.js.map +1 -0
  33. package/dist/chunk-LWAH2UG7.js +103 -0
  34. package/dist/chunk-LWAH2UG7.js.map +1 -0
  35. package/dist/chunk-OHE2AOH4.js +273 -0
  36. package/dist/chunk-OHE2AOH4.js.map +1 -0
  37. package/dist/chunk-P3DNOZOG.js +1488 -0
  38. package/dist/chunk-P3DNOZOG.js.map +1 -0
  39. package/dist/chunk-PQ6TKPUN.js +27 -0
  40. package/dist/chunk-PQ6TKPUN.js.map +1 -0
  41. package/dist/chunk-QCCN6POA.js +211 -0
  42. package/dist/chunk-QCCN6POA.js.map +1 -0
  43. package/dist/chunk-QGTNV4U2.js +985 -0
  44. package/dist/chunk-QGTNV4U2.js.map +1 -0
  45. package/dist/chunk-RSLFR4TO.js +631 -0
  46. package/dist/chunk-RSLFR4TO.js.map +1 -0
  47. package/dist/chunk-SNV5WG5V.js +9412 -0
  48. package/dist/chunk-SNV5WG5V.js.map +1 -0
  49. package/dist/chunk-UP2VWCW5.js +33 -0
  50. package/dist/chunk-UP2VWCW5.js.map +1 -0
  51. package/dist/chunk-VJIGX7MH.js +208 -0
  52. package/dist/chunk-VJIGX7MH.js.map +1 -0
  53. package/dist/chunk-WCCMRVZF.js +130 -0
  54. package/dist/chunk-WCCMRVZF.js.map +1 -0
  55. package/dist/chunk-WSMVLWLB.js +269 -0
  56. package/dist/chunk-WSMVLWLB.js.map +1 -0
  57. package/dist/config/index.js +6 -1220
  58. package/dist/config/index.js.map +1 -1
  59. package/dist/crucible/fulpack/index.js +2 -25
  60. package/dist/crucible/fulpack/index.js.map +1 -1
  61. package/dist/crucible/index.js +13 -1129
  62. package/dist/crucible/index.js.map +1 -1
  63. package/dist/docscribe/index.js +2 -680
  64. package/dist/docscribe/index.js.map +1 -1
  65. package/dist/errors/index.js +5 -1831
  66. package/dist/errors/index.js.map +1 -1
  67. package/dist/errors-D7KXV3QW.js +4 -0
  68. package/dist/errors-D7KXV3QW.js.map +1 -0
  69. package/dist/errors-R7ZODJXS.js +8 -0
  70. package/dist/errors-R7ZODJXS.js.map +1 -0
  71. package/dist/export-EA3RNQNS.js +6 -0
  72. package/dist/export-EA3RNQNS.js.map +1 -0
  73. package/dist/foundry/index.js +340 -3949
  74. package/dist/foundry/index.js.map +1 -1
  75. package/dist/foundry/similarity/index.js +3 -134
  76. package/dist/foundry/similarity/index.js.map +1 -1
  77. package/dist/fulencode/index.js +3 -319
  78. package/dist/fulencode/index.js.map +1 -1
  79. package/dist/fulhash/index.js +3 -611
  80. package/dist/fulhash/index.js.map +1 -1
  81. package/dist/fulpack/index.js +3 -1515
  82. package/dist/fulpack/index.js.map +1 -1
  83. package/dist/hash-YOJYVOWH.js +4 -0
  84. package/dist/hash-YOJYVOWH.js.map +1 -0
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.js +14 -4395
  87. package/dist/index.js.map +1 -1
  88. package/dist/loader-VP2ZIC4O.js +9 -0
  89. package/dist/loader-VP2ZIC4O.js.map +1 -0
  90. package/dist/logging/index.js +2 -723
  91. package/dist/logging/index.js.map +1 -1
  92. package/dist/pathfinder/index.js +18 -2341
  93. package/dist/pathfinder/index.js.map +1 -1
  94. package/dist/prom-client-PNEBGD3G.js +4801 -0
  95. package/dist/prom-client-PNEBGD3G.js.map +1 -0
  96. package/dist/reports/license-inventory.csv +1 -1
  97. package/dist/schema/index.d.ts +19 -6
  98. package/dist/schema/index.js +4 -6148
  99. package/dist/schema/index.js.map +1 -1
  100. package/dist/signals/index.js +8 -2767
  101. package/dist/signals/index.js.map +1 -1
  102. package/dist/similarity/index.js +3 -134
  103. package/dist/similarity/index.js.map +1 -1
  104. package/dist/telemetry/http/index.js +9 -930
  105. package/dist/telemetry/http/index.js.map +1 -1
  106. package/dist/telemetry/index.js +4 -1561
  107. package/dist/telemetry/index.js.map +1 -1
  108. package/dist/telemetry/prometheus/index.js +7 -8422
  109. package/dist/telemetry/prometheus/index.js.map +1 -1
  110. package/dist/validator-I3ASDVDB.js +6 -0
  111. package/dist/validator-I3ASDVDB.js.map +1 -0
  112. package/package.json +5 -1
  113. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  114. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +1 -1
  115. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +13 -13
  116. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +2 -2
  117. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +1 -1
  118. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +2 -2
  119. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +3 -3
  120. package/schemas/crucible-ts/upstream/3leaps/crucible/PROVENANCE.md +3 -3
  121. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/catalog/classifiers/README.md +1 -1
  122. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/classifiers-framework.md +1 -1
  123. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/data-sensitivity-classification.md +1 -1
@@ -0,0 +1,269 @@
1
+ import { UnsupportedAlgorithmError, Algorithm, Digest, createHasher2, createHasher, FulHashError, DigestStateError } from './chunk-OHE2AOH4.js';
2
+ import { createHash } from 'crypto';
3
+ import { createXXHash128 } from 'hash-wasm';
4
+
5
+ var isWasmReady = false;
6
+ var initPromise = null;
7
+ async function initializeWasm() {
8
+ if (isWasmReady) {
9
+ return;
10
+ }
11
+ if (initPromise) {
12
+ return initPromise;
13
+ }
14
+ initPromise = createXXHash128().then(() => {
15
+ isWasmReady = true;
16
+ }).catch((error) => {
17
+ initPromise = null;
18
+ throw new FulHashError(`Failed to initialize hash-wasm XXH3-128 module: ${error.message}`);
19
+ });
20
+ return initPromise;
21
+ }
22
+ async function createHasher3() {
23
+ if (!isWasmReady) {
24
+ throw new FulHashError("WASM not initialized. Call initializeWasm() first.");
25
+ }
26
+ return createXXHash128();
27
+ }
28
+
29
+ // src/fulhash/stream.ts
30
+ function intToBytes(crc) {
31
+ const bytes = new Uint8Array(4);
32
+ const unsigned = crc >>> 0;
33
+ bytes[0] = unsigned >>> 24 & 255;
34
+ bytes[1] = unsigned >>> 16 & 255;
35
+ bytes[2] = unsigned >>> 8 & 255;
36
+ bytes[3] = unsigned & 255;
37
+ return bytes;
38
+ }
39
+ var BaseStreamHasher = class {
40
+ state = "initial" /* INITIAL */;
41
+ algorithm;
42
+ constructor(algorithm) {
43
+ this.algorithm = algorithm;
44
+ }
45
+ ensureNotFinalized() {
46
+ if (this.state === "finalized" /* FINALIZED */) {
47
+ throw new DigestStateError("Cannot update after digest(). Call reset() to reuse hasher.");
48
+ }
49
+ }
50
+ ensureUpdating() {
51
+ if (this.state !== "updating" /* UPDATING */ && this.state !== "initial" /* INITIAL */) {
52
+ throw new DigestStateError("Invalid state for digest(). Hasher may have been finalized.");
53
+ }
54
+ }
55
+ markUpdating() {
56
+ this.state = "updating" /* UPDATING */;
57
+ }
58
+ markFinalized() {
59
+ this.state = "finalized" /* FINALIZED */;
60
+ }
61
+ markInitial() {
62
+ this.state = "initial" /* INITIAL */;
63
+ }
64
+ };
65
+ var SHA256StreamHasher = class extends BaseStreamHasher {
66
+ hasher;
67
+ constructor() {
68
+ super("sha256" /* SHA256 */);
69
+ this.hasher = createHash("sha256");
70
+ }
71
+ update(data) {
72
+ this.ensureNotFinalized();
73
+ this.markUpdating();
74
+ if (typeof data === "string") {
75
+ this.hasher.update(data, "utf8");
76
+ } else {
77
+ this.hasher.update(data);
78
+ }
79
+ return this;
80
+ }
81
+ digest() {
82
+ this.ensureUpdating();
83
+ this.markFinalized();
84
+ const bytes = new Uint8Array(this.hasher.digest());
85
+ return new Digest(this.algorithm, bytes);
86
+ }
87
+ reset() {
88
+ this.hasher = createHash("sha256");
89
+ this.markInitial();
90
+ return this;
91
+ }
92
+ };
93
+ var XXH3StreamHasher = class extends BaseStreamHasher {
94
+ hasher;
95
+ constructor(hasher) {
96
+ super("xxh3-128" /* XXH3_128 */);
97
+ this.hasher = hasher;
98
+ this.hasher.init();
99
+ }
100
+ update(data) {
101
+ this.ensureNotFinalized();
102
+ this.markUpdating();
103
+ if (typeof data === "string") {
104
+ const encoder = new TextEncoder();
105
+ this.hasher.update(encoder.encode(data));
106
+ } else {
107
+ this.hasher.update(data);
108
+ }
109
+ return this;
110
+ }
111
+ digest() {
112
+ this.ensureUpdating();
113
+ this.markFinalized();
114
+ const bytes = this.hasher.digest("binary");
115
+ return new Digest(this.algorithm, bytes);
116
+ }
117
+ reset() {
118
+ this.hasher.init();
119
+ this.markInitial();
120
+ return this;
121
+ }
122
+ };
123
+ var CRC32StreamHasher = class extends BaseStreamHasher {
124
+ hasher = null;
125
+ constructor() {
126
+ super("crc32" /* CRC32 */);
127
+ }
128
+ async init() {
129
+ this.hasher = await createHasher();
130
+ this.hasher.init();
131
+ }
132
+ update(data) {
133
+ this.ensureNotFinalized();
134
+ this.markUpdating();
135
+ if (!this.hasher) {
136
+ throw new Error("Hasher not initialized");
137
+ }
138
+ if (typeof data === "string") {
139
+ const encoder = new TextEncoder();
140
+ this.hasher.update(encoder.encode(data));
141
+ } else {
142
+ this.hasher.update(data);
143
+ }
144
+ return this;
145
+ }
146
+ digest() {
147
+ this.ensureUpdating();
148
+ this.markFinalized();
149
+ if (!this.hasher) throw new Error("Hasher not initialized");
150
+ const hex = this.hasher.digest();
151
+ const bytes = intToBytes(parseInt(hex, 16));
152
+ return new Digest(this.algorithm, bytes);
153
+ }
154
+ reset() {
155
+ if (!this.hasher) throw new Error("Hasher not initialized");
156
+ this.hasher.init();
157
+ this.markInitial();
158
+ return this;
159
+ }
160
+ };
161
+ var CRC32CStreamHasher = class extends BaseStreamHasher {
162
+ hasher = null;
163
+ constructor() {
164
+ super("crc32c" /* CRC32C */);
165
+ }
166
+ async init() {
167
+ this.hasher = await createHasher2();
168
+ this.hasher.init();
169
+ }
170
+ update(data) {
171
+ this.ensureNotFinalized();
172
+ this.markUpdating();
173
+ if (!this.hasher) throw new Error("Hasher not initialized");
174
+ if (typeof data === "string") {
175
+ const encoder = new TextEncoder();
176
+ this.hasher.update(encoder.encode(data));
177
+ } else {
178
+ this.hasher.update(data);
179
+ }
180
+ return this;
181
+ }
182
+ digest() {
183
+ this.ensureUpdating();
184
+ this.markFinalized();
185
+ if (!this.hasher) throw new Error("Hasher not initialized");
186
+ const hex = this.hasher.digest();
187
+ const bytes = intToBytes(parseInt(hex, 16));
188
+ return new Digest(this.algorithm, bytes);
189
+ }
190
+ reset() {
191
+ if (!this.hasher) throw new Error("Hasher not initialized");
192
+ this.hasher.init();
193
+ this.markInitial();
194
+ return this;
195
+ }
196
+ };
197
+ async function createStreamHasher(options = {}) {
198
+ const algorithm = options.algorithm ?? "xxh3-128" /* XXH3_128 */;
199
+ switch (algorithm) {
200
+ case "sha256" /* SHA256 */:
201
+ return new SHA256StreamHasher();
202
+ case "xxh3-128" /* XXH3_128 */: {
203
+ await initializeWasm();
204
+ const wasmHasher = await createHasher3();
205
+ return new XXH3StreamHasher(wasmHasher);
206
+ }
207
+ case "crc32" /* CRC32 */: {
208
+ const hasher = new CRC32StreamHasher();
209
+ await hasher.init();
210
+ return hasher;
211
+ }
212
+ case "crc32c" /* CRC32C */: {
213
+ const hasher = new CRC32CStreamHasher();
214
+ await hasher.init();
215
+ return hasher;
216
+ }
217
+ default:
218
+ throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));
219
+ }
220
+ }
221
+
222
+ // src/fulhash/convenience.ts
223
+ async function multiHash(input, algorithms, encoding = "utf8") {
224
+ const uniqueAlgorithms = [...new Set(algorithms)];
225
+ const hashers = await Promise.all(
226
+ uniqueAlgorithms.map((algo) => createStreamHasher({ algorithm: algo }))
227
+ );
228
+ if (typeof input === "string") {
229
+ if (encoding !== "utf8") {
230
+ const buf = Buffer.from(input, encoding);
231
+ for (const hasher of hashers) {
232
+ hasher.update(buf);
233
+ }
234
+ } else {
235
+ for (const hasher of hashers) {
236
+ hasher.update(input);
237
+ }
238
+ }
239
+ } else if (input instanceof Uint8Array) {
240
+ for (const hasher of hashers) {
241
+ hasher.update(input);
242
+ }
243
+ } else {
244
+ for await (const chunk of input) {
245
+ for (const hasher of hashers) {
246
+ hasher.update(chunk);
247
+ }
248
+ }
249
+ }
250
+ const result = {};
251
+ for (let i = 0; i < uniqueAlgorithms.length; i++) {
252
+ result[uniqueAlgorithms[i]] = hashers[i].digest();
253
+ }
254
+ return result;
255
+ }
256
+ async function verify(input, checksum, encoding = "utf8") {
257
+ const expected = Digest.parse(checksum);
258
+ const result = await multiHash(input, [expected.algorithm], encoding);
259
+ const actual = result[expected.algorithm];
260
+ if (!actual) return false;
261
+ return actual.algorithm === expected.algorithm && actual.hex === expected.hex;
262
+ }
263
+
264
+ // src/fulhash/index.ts
265
+ var VERSION = "1.0.0";
266
+
267
+ export { VERSION, createStreamHasher, multiHash, verify };
268
+ //# sourceMappingURL=chunk-WSMVLWLB.js.map
269
+ //# sourceMappingURL=chunk-WSMVLWLB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fulhash/wasm-loader.ts","../src/fulhash/stream.ts","../src/fulhash/convenience.ts","../src/fulhash/index.ts"],"names":["createHasher"],"mappings":";;;;AAIA,IAAI,WAAA,GAAc,KAAA;AAClB,IAAI,WAAA,GAAoC,IAAA;AAExC,eAAsB,cAAA,GAAgC;AACpD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,WAAA,GAAc,eAAA,EAAgB,CAC3B,IAAA,CAAK,MAAM;AACV,IAAA,WAAA,GAAc,IAAA;AAAA,EAChB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,gDAAA,EAAmD,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EAC3F,CAAC,CAAA;AAEH,EAAA,OAAO,WAAA;AACT;AAMA,eAAsBA,aAAAA,GAAiC;AACrD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,eAAA,EAAgB;AACzB;;;ACrBA,SAAS,WAAW,GAAA,EAAyB;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,EAAA,MAAM,WAAW,GAAA,KAAQ,CAAA;AACzB,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,QAAA,KAAa,EAAA,GAAM,GAAA;AAC/B,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,QAAA,KAAa,EAAA,GAAM,GAAA;AAC/B,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,QAAA,KAAa,CAAA,GAAK,GAAA;AAC9B,EAAA,KAAA,CAAM,CAAC,IAAI,QAAA,GAAW,GAAA;AACtB,EAAA,OAAO,KAAA;AACT;AAwBA,IAAe,mBAAf,MAAwD;AAAA,EAC5C,KAAA,GAAe,SAAA;AAAA,EACN,SAAA;AAAA,EAEnB,YAAY,SAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA,EAMU,kBAAA,GAA2B;AACnC,IAAA,IAAI,IAAA,CAAK,UAAU,WAAA,kBAAiB;AAClC,MAAA,MAAM,IAAI,iBAAiB,6DAA6D,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA,EAEU,cAAA,GAAuB;AAC/B,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,UAAA,mBAAkB,IAAA,CAAK,UAAU,SAAA,gBAAe;AACjE,MAAA,MAAM,IAAI,iBAAiB,6DAA6D,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA,EAEU,YAAA,GAAqB;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AAAA,EACf;AAAA,EAEU,aAAA,GAAsB;AAC9B,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AAAA,EACf;AAAA,EAEU,WAAA,GAAoB;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,EACf;AACF,CAAA;AAEA,IAAM,kBAAA,GAAN,cAAiC,gBAAA,CAAiB;AAAA,EACxC,MAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,KAAA,CAAA,QAAA,cAAsB;AACtB,IAAA,IAAA,CAAK,MAAA,GAAS,WAAW,QAAQ,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,IAAA,EAAyC;AAC9C,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IACzB;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,QAAQ,IAAI,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AACjD,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,KAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,MAAA,GAAS,WAAW,QAAQ,CAAA;AACjC,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,gBAAA,GAAN,cAA+B,gBAAA,CAAiB;AAAA,EACtC,MAAA;AAAA,EAER,YAAY,MAAA,EAAiB;AAC3B,IAAA,KAAA,CAAA,UAAA,gBAAwB;AACxB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EACnB;AAAA,EAEA,OAAO,IAAA,EAAyC;AAC9C,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IACzB;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACzC,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,KAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,iBAAA,GAAN,cAAgC,gBAAA,CAAiB;AAAA,EACvC,MAAA,GAA6B,IAAA;AAAA,EAErC,WAAA,GAAc;AACZ,IAAA,KAAA,CAAA,OAAA,aAAqB;AAAA,EACvB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAY,YAAA,EAAa;AACvC,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EACnB;AAAA,EAEA,OAAO,IAAA,EAAyC;AAC9C,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAIhB,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IACzB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAE1D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO;AAC/B,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1C,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,KAAA,GAAsB;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,kBAAA,GAAN,cAAiC,gBAAA,CAAiB;AAAA,EACxC,MAAA,GAA6B,IAAA;AAAA,EAErC,WAAA,GAAc;AACZ,IAAA,KAAA,CAAA,QAAA,cAAsB;AAAA,EACxB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAaA,aAAAA,EAAa;AACxC,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EACnB;AAAA,EAEA,OAAO,IAAA,EAAyC;AAC9C,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAE1D,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IACzB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAE1D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO;AAC/B,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1C,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,KAAA,GAAsB;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,eAAsB,kBAAA,CAAmB,OAAA,GAA+B,EAAC,EAA0B;AACjG,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,IAAA,UAAA;AAE1B,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAA,QAAA;AACE,MAAA,OAAO,IAAI,kBAAA,EAAmB;AAAA,IAChC,KAAA,UAAA,iBAAyB;AACvB,MAAA,MAAM,cAAA,EAAe;AACrB,MAAA,MAAM,UAAA,GAAa,MAAMA,aAAAA,EAAiB;AAC1C,MAAA,OAAO,IAAI,iBAAiB,UAAU,CAAA;AAAA,IACxC;AAAA,IACA,KAAA,OAAA,cAAsB;AACpB,MAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,EAAkB;AACrC,MAAA,MAAM,OAAO,IAAA,EAAK;AAClB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAA,QAAA,eAAuB;AACrB,MAAA,MAAM,MAAA,GAAS,IAAI,kBAAA,EAAmB;AACtC,MAAA,MAAM,OAAO,IAAA,EAAK;AAClB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA;AACE,MAAA,MAAM,IAAI,yBAAA,CAA0B,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA;AAE7E;;;AC1QA,eAAsB,SAAA,CACpB,KAAA,EACA,UAAA,EACA,QAAA,GAA2B,MAAA,EACD;AAC1B,EAAA,MAAM,mBAAmB,CAAC,GAAG,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;AAChD,EAAA,MAAM,OAAA,GAA0B,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5C,gBAAA,CAAiB,IAAI,CAAC,IAAA,KAAS,mBAAmB,EAAE,SAAA,EAAW,IAAA,EAAM,CAAC;AAAA,GACxE;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,aAAa,MAAA,EAAQ;AAGvB,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AACvC,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,MACnB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,iBAAiB,UAAA,EAAY;AACtC,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,WAAA,MAAiB,SAAS,KAAA,EAAO;AAM/B,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,gBAAA,CAAiB,QAAQ,CAAA,EAAA,EAAK;AAChD,IAAA,MAAA,CAAO,iBAAiB,CAAC,CAAC,IAAI,OAAA,CAAQ,CAAC,EAAE,MAAA,EAAO;AAAA,EAClD;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,eAAsB,MAAA,CACpB,KAAA,EACA,QAAA,EACA,QAAA,GAA2B,MAAA,EACT;AAClB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,EAAO,CAAC,QAAA,CAAS,SAAS,GAAG,QAAQ,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA;AAExC,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,OAAO,SAAA,KAAc,QAAA,CAAS,SAAA,IAAa,MAAA,CAAO,QAAQ,QAAA,CAAS,GAAA;AAC5E;;;ACrEO,IAAM,OAAA,GAAU","file":"chunk-WSMVLWLB.js","sourcesContent":["import type { IHasher } from \"hash-wasm\";\nimport { createXXHash128 } from \"hash-wasm\";\nimport { FulHashError } from \"./errors.js\";\n\nlet isWasmReady = false;\nlet initPromise: Promise<void> | null = null;\n\nexport async function initializeWasm(): Promise<void> {\n if (isWasmReady) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = createXXHash128()\n .then(() => {\n isWasmReady = true;\n })\n .catch((error) => {\n initPromise = null;\n throw new FulHashError(`Failed to initialize hash-wasm XXH3-128 module: ${error.message}`);\n });\n\n return initPromise;\n}\n\nexport function isInitialized(): boolean {\n return isWasmReady;\n}\n\nexport async function createHasher(): Promise<IHasher> {\n if (!isWasmReady) {\n throw new FulHashError(\"WASM not initialized. Call initializeWasm() first.\");\n }\n return createXXHash128();\n}\n","import { createHash } from \"node:crypto\";\nimport type { IHasher } from \"hash-wasm\";\nimport { Algorithm } from \"../crucible/fulhash/types.js\";\nimport * as crc32 from \"./algorithms/crc32.js\";\nimport * as crc32c from \"./algorithms/crc32c.js\";\nimport type { StreamHasher, StreamHasherOptions } from \"./definitions.js\";\nimport { Digest } from \"./digest.js\";\nimport { DigestStateError, UnsupportedAlgorithmError } from \"./errors.js\";\nimport { createHasher as createXXH3Hasher, initializeWasm } from \"./wasm-loader.js\";\n\nenum State {\n INITIAL = \"initial\",\n UPDATING = \"updating\",\n FINALIZED = \"finalized\",\n}\n\nfunction intToBytes(crc: number): Uint8Array {\n const bytes = new Uint8Array(4);\n const unsigned = crc >>> 0;\n bytes[0] = (unsigned >>> 24) & 0xff;\n bytes[1] = (unsigned >>> 16) & 0xff;\n bytes[2] = (unsigned >>> 8) & 0xff;\n bytes[3] = unsigned & 0xff;\n return bytes;\n}\n\ntype IDataType =\n | string\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array\n | DataView\n | ArrayBuffer\n | SharedArrayBuffer;\n\n// Helper to define local interface for CRC hashers returned by our modules\ninterface CRC32Hasher extends IHasher {\n // We only use the update method with Uint8Array in our wrapper,\n // but we declare it compatible with IHasher to avoid TS complaints if possible,\n // or cast it. hash-wasm's IHasher expects IDataType (string | Buffer | TypedArray).\n update(data: IDataType): IHasher;\n}\n\nabstract class BaseStreamHasher implements StreamHasher {\n protected state: State = State.INITIAL;\n protected readonly algorithm: Algorithm;\n\n constructor(algorithm: Algorithm) {\n this.algorithm = algorithm;\n }\n\n abstract update(data: string | Uint8Array): StreamHasher;\n abstract digest(): Digest;\n abstract reset(): StreamHasher;\n\n protected ensureNotFinalized(): void {\n if (this.state === State.FINALIZED) {\n throw new DigestStateError(\"Cannot update after digest(). Call reset() to reuse hasher.\");\n }\n }\n\n protected ensureUpdating(): void {\n if (this.state !== State.UPDATING && this.state !== State.INITIAL) {\n throw new DigestStateError(\"Invalid state for digest(). Hasher may have been finalized.\");\n }\n }\n\n protected markUpdating(): void {\n this.state = State.UPDATING;\n }\n\n protected markFinalized(): void {\n this.state = State.FINALIZED;\n }\n\n protected markInitial(): void {\n this.state = State.INITIAL;\n }\n}\n\nclass SHA256StreamHasher extends BaseStreamHasher {\n private hasher: ReturnType<typeof createHash>;\n\n constructor() {\n super(Algorithm.SHA256);\n this.hasher = createHash(\"sha256\");\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n this.hasher.update(data, \"utf8\");\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = new Uint8Array(this.hasher.digest());\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher = createHash(\"sha256\");\n this.markInitial();\n return this;\n }\n}\n\nclass XXH3StreamHasher extends BaseStreamHasher {\n private hasher: IHasher;\n\n constructor(hasher: IHasher) {\n super(Algorithm.XXH3_128);\n this.hasher = hasher;\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = this.hasher.digest(\"binary\");\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nclass CRC32StreamHasher extends BaseStreamHasher {\n private hasher: CRC32Hasher | null = null;\n\n constructor() {\n super(Algorithm.CRC32);\n }\n\n async init(): Promise<void> {\n this.hasher = await crc32.createHasher();\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (!this.hasher) {\n // This shouldn't happen if createStreamHasher calls init, but technically\n // synchronous update() can't await. We might need to buffer or assume initialized.\n // However, the Factory createStreamHasher is async, so we can await init there.\n throw new Error(\"Hasher not initialized\");\n }\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n const hex = this.hasher.digest();\n const bytes = intToBytes(parseInt(hex, 16));\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nclass CRC32CStreamHasher extends BaseStreamHasher {\n private hasher: CRC32Hasher | null = null;\n\n constructor() {\n super(Algorithm.CRC32C);\n }\n\n async init(): Promise<void> {\n this.hasher = await crc32c.createHasher();\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n const hex = this.hasher.digest();\n const bytes = intToBytes(parseInt(hex, 16));\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nexport async function createStreamHasher(options: StreamHasherOptions = {}): Promise<StreamHasher> {\n const algorithm = options.algorithm ?? Algorithm.XXH3_128;\n\n switch (algorithm) {\n case Algorithm.SHA256:\n return new SHA256StreamHasher();\n case Algorithm.XXH3_128: {\n await initializeWasm();\n const wasmHasher = await createXXH3Hasher();\n return new XXH3StreamHasher(wasmHasher);\n }\n case Algorithm.CRC32: {\n const hasher = new CRC32StreamHasher();\n await hasher.init();\n return hasher;\n }\n case Algorithm.CRC32C: {\n const hasher = new CRC32CStreamHasher();\n await hasher.init();\n return hasher;\n }\n default:\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n}\n","import type { Algorithm } from \"../crucible/fulhash/types.js\";\nimport type { MultiHashResult, StreamHasher } from \"./definitions.js\";\nimport { Digest } from \"./digest.js\";\nimport { createStreamHasher } from \"./stream.js\";\n\nexport type HashInput = string | Uint8Array | AsyncIterable<string | Uint8Array>;\n\n/**\n * Compute multiple hashes in a single pass over the data.\n * Useful for generating checksums for multiple algorithms (e.g. SHA256 + XXH3)\n * without reading the stream multiple times.\n */\nexport async function multiHash(\n input: HashInput,\n algorithms: Algorithm[],\n encoding: BufferEncoding = \"utf8\",\n): Promise<MultiHashResult> {\n const uniqueAlgorithms = [...new Set(algorithms)];\n const hashers: StreamHasher[] = await Promise.all(\n uniqueAlgorithms.map((algo) => createStreamHasher({ algorithm: algo })),\n );\n\n if (typeof input === \"string\") {\n if (encoding !== \"utf8\") {\n // Manual buffer conversion for non-utf8 encodings, as some stream hashers\n // (like XXH3) might default to UTF-8 for string inputs.\n const buf = Buffer.from(input, encoding);\n for (const hasher of hashers) {\n hasher.update(buf);\n }\n } else {\n for (const hasher of hashers) {\n hasher.update(input);\n }\n }\n } else if (input instanceof Uint8Array) {\n for (const hasher of hashers) {\n hasher.update(input);\n }\n } else {\n // AsyncIterable (Stream)\n for await (const chunk of input) {\n // If chunk is string and encoding is non-utf8, we might have an issue here\n // as the stream chunk doesn't carry encoding info.\n // Standard Node streams yield Buffers or strings (usually utf8).\n // If the user passes an async iterable of strings, we assume they are safe to pass to update().\n // If strict encoding control is needed for streams, the stream should yield Buffers.\n for (const hasher of hashers) {\n hasher.update(chunk);\n }\n }\n }\n\n const result: MultiHashResult = {};\n for (let i = 0; i < uniqueAlgorithms.length; i++) {\n result[uniqueAlgorithms[i]] = hashers[i].digest();\n }\n\n return result;\n}\n\n/**\n * Verify data against a formatted checksum (e.g. \"sha256:abc...\").\n * Automatically selects the algorithm from the checksum prefix.\n */\nexport async function verify(\n input: HashInput,\n checksum: string,\n encoding: BufferEncoding = \"utf8\",\n): Promise<boolean> {\n const expected = Digest.parse(checksum);\n const result = await multiHash(input, [expected.algorithm], encoding);\n const actual = result[expected.algorithm];\n\n if (!actual) return false;\n return actual.algorithm === expected.algorithm && actual.hex === expected.hex;\n}\n","/**\n * FulHash - Consistent hashing API for Fulmen ecosystem\n *\n * Provides block and streaming hashing with XXH3-128, SHA-256, CRC32, and CRC32C algorithms.\n * Cross-language compatible with gofulmen and pyfulmen.\n */\n\nexport const VERSION = \"1.0.0\";\n\nexport * from \"../crucible/fulhash/types.js\";\nexport { type HashInput, multiHash, verify } from \"./convenience.js\";\nexport type {\n HashOptions,\n StreamHasher,\n StreamHasherOptions,\n} from \"./definitions.js\";\nexport { Digest } from \"./digest.js\";\nexport {\n DigestStateError,\n FulHashError,\n InvalidChecksumError,\n InvalidChecksumFormatError,\n UnsupportedAlgorithmError,\n} from \"./errors.js\";\nexport { hash, hashBytes, hashString } from \"./hash.js\";\nexport { createStreamHasher } from \"./stream.js\";\n"]}