@xyo-network/hash 3.4.1 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/BrowserObjectHasher.d.ts +12 -0
- package/dist/browser/BrowserObjectHasher.d.ts.map +1 -0
- package/dist/browser/NodePayloadHasher.d.ts +6 -2
- package/dist/browser/NodePayloadHasher.d.ts.map +1 -1
- package/dist/{neutral/PayloadHasher.d.ts → browser/ObjectHasher.d.ts} +6 -4
- package/dist/browser/ObjectHasher.d.ts.map +1 -0
- package/dist/browser/index-browser.d.ts +2 -1
- package/dist/browser/index-browser.d.ts.map +1 -1
- package/dist/browser/index-browser.mjs +17 -15
- package/dist/browser/index-browser.mjs.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/worker/subtleHash-bundle.mjs +41 -41
- package/dist/browser/worker/wasmHash-bundle.mjs +50 -48
- package/dist/neutral/BrowserObjectHasher.d.ts +12 -0
- package/dist/neutral/BrowserObjectHasher.d.ts.map +1 -0
- package/dist/neutral/NodePayloadHasher.d.ts +6 -2
- package/dist/neutral/NodePayloadHasher.d.ts.map +1 -1
- package/dist/{node/PayloadHasher.d.ts → neutral/ObjectHasher.d.ts} +6 -4
- package/dist/neutral/ObjectHasher.d.ts.map +1 -0
- package/dist/neutral/index-browser.d.ts +2 -1
- package/dist/neutral/index-browser.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +1 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +15 -13
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/BrowserObjectHasher.d.ts +12 -0
- package/dist/node/BrowserObjectHasher.d.ts.map +1 -0
- package/dist/node/NodePayloadHasher.d.ts +6 -2
- package/dist/node/NodePayloadHasher.d.ts.map +1 -1
- package/dist/{browser/PayloadHasher.d.ts → node/ObjectHasher.d.ts} +6 -4
- package/dist/node/ObjectHasher.d.ts.map +1 -0
- package/dist/node/index-browser.d.ts +2 -1
- package/dist/node/index-browser.d.ts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.mjs +15 -13
- package/dist/node/index.mjs.map +1 -1
- package/package.json +13 -11
- package/src/{BrowserPayloadHasher.ts → BrowserObjectHasher.ts} +9 -4
- package/src/NodePayloadHasher.ts +8 -3
- package/src/{PayloadHasher.ts → ObjectHasher.ts} +8 -10
- package/src/index-browser.ts +2 -1
- package/src/index.ts +1 -0
- package/dist/browser/BrowserPayloadHasher.d.ts +0 -8
- package/dist/browser/BrowserPayloadHasher.d.ts.map +0 -1
- package/dist/browser/PayloadHasher.d.ts.map +0 -1
- package/dist/neutral/BrowserPayloadHasher.d.ts +0 -8
- package/dist/neutral/BrowserPayloadHasher.d.ts.map +0 -1
- package/dist/neutral/PayloadHasher.d.ts.map +0 -1
- package/dist/node/BrowserPayloadHasher.d.ts +0 -8
- package/dist/node/BrowserPayloadHasher.d.ts.map +0 -1
- package/dist/node/PayloadHasher.d.ts.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object';
|
|
2
|
+
import { ObjectHasher } from './ObjectHasher.ts';
|
|
3
|
+
export declare class BrowserObjectHasher<T extends EmptyObject = EmptyObject> extends ObjectHasher<T> {
|
|
4
|
+
static createBrowserWorker: (url?: URL) => import("@xylabs/threads/master").WorkerImplementation | undefined;
|
|
5
|
+
static createNodeWorker: (func?: () => unknown) => import("@xylabs/threads/master").WorkerImplementation | undefined;
|
|
6
|
+
static subtleHashWorkerUrl: import("url").URL | undefined;
|
|
7
|
+
static wasmHashWorkerUrl: import("url").URL | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** @deprecated use BrowserObjectHasher instead */
|
|
10
|
+
export declare class BrowserPayloadHasher<T extends EmptyObject = EmptyObject> extends BrowserObjectHasher<T> {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=BrowserObjectHasher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserObjectHasher.d.ts","sourceRoot":"","sources":["../../src/BrowserObjectHasher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAIjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAOhD,qBAAa,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAC3F,OAAgB,mBAAmB,mFAAsB;IACzD,OAAgB,gBAAgB,8FAAmB;IACnD,OAAgB,mBAAmB,gCAM/B;IAEJ,OAAgB,iBAAiB,gCAM7B;CACL;AAED,kDAAkD;AAClD,qBAAa,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;CAAG"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object';
|
|
2
|
+
import { ObjectHasher } from './ObjectHasher.ts';
|
|
3
|
+
export declare class NodeObjectHasher<T extends EmptyObject = EmptyObject> extends ObjectHasher<T> {
|
|
3
4
|
static createNodeWorker: (func?: () => unknown) => import("@xylabs/threads/master").WorkerImplementation | undefined;
|
|
4
5
|
}
|
|
6
|
+
/** @deprecated use NodeObjectHasher instead */
|
|
7
|
+
export declare class NodePayloadHasher<T extends EmptyObject = EmptyObject> extends NodeObjectHasher<T> {
|
|
8
|
+
}
|
|
5
9
|
//# sourceMappingURL=NodePayloadHasher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodePayloadHasher.d.ts","sourceRoot":"","sources":["../../src/NodePayloadHasher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodePayloadHasher.d.ts","sourceRoot":"","sources":["../../src/NodePayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIhD,qBAAa,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACxF,OAAgB,gBAAgB,8FAAmB;CACpD;AAED,+CAA+C;AAC/C,qBAAa,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;CAAG"}
|
|
@@ -3,11 +3,11 @@ import type { EmptyObject } from '@xylabs/object';
|
|
|
3
3
|
import { ObjectWrapper } from '@xylabs/object';
|
|
4
4
|
import type { Worker } from '@xylabs/threads';
|
|
5
5
|
import { WasmSupport } from '@xyo-network/wasm';
|
|
6
|
-
export type WorkerFunction = ((...args:
|
|
6
|
+
export type WorkerFunction = ((...args: unknown[]) => unknown) | (() => unknown);
|
|
7
7
|
export type WorkerModule<Keys extends string> = {
|
|
8
8
|
[key in Keys]: WorkerFunction;
|
|
9
9
|
};
|
|
10
|
-
export declare class
|
|
10
|
+
export declare class ObjectHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {
|
|
11
11
|
static allowHashPooling: boolean;
|
|
12
12
|
static allowSubtle: boolean;
|
|
13
13
|
static createBrowserWorker?: (url?: URL) => Worker | undefined;
|
|
@@ -18,7 +18,6 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
18
18
|
static wasmHashWorkerUrl?: URL;
|
|
19
19
|
static readonly wasmInitialized: Promise<void>;
|
|
20
20
|
static readonly wasmSupport: WasmSupport;
|
|
21
|
-
private static _jsHashPool?;
|
|
22
21
|
private static _subtleHashPool?;
|
|
23
22
|
private static _wasmHashPool?;
|
|
24
23
|
private static get subtleHashPool();
|
|
@@ -67,4 +66,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
67
66
|
*/
|
|
68
67
|
json(meta?: boolean): T;
|
|
69
68
|
}
|
|
70
|
-
|
|
69
|
+
/** @deprecated use PayloadBuilder or ObjectHasher instead */
|
|
70
|
+
export declare class PayloadHasher<T extends object> extends ObjectHasher<T> {
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ObjectHasher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectHasher.d.ts","sourceRoot":"","sources":["../../src/ObjectHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { BrowserObjectHasher as ObjectHasher } from './BrowserObjectHasher.ts';
|
|
2
|
+
export { BrowserPayloadHasher as PayloadHasher } from './BrowserObjectHasher.ts';
|
|
2
3
|
export * from './removeEmptyFields.ts';
|
|
3
4
|
export * from './sortFields.ts';
|
|
4
5
|
//# sourceMappingURL=index-browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAChF,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA"}
|
|
@@ -30,7 +30,7 @@ var createNodeWorker = (func) => {
|
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
// src/
|
|
33
|
+
// src/ObjectHasher.ts
|
|
34
34
|
import { assertEx } from "@xylabs/assert";
|
|
35
35
|
import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
|
|
36
36
|
import { ObjectWrapper, omitBy } from "@xylabs/object";
|
|
@@ -94,13 +94,13 @@ var wasmHashFunc = () => {
|
|
|
94
94
|
});
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
// src/
|
|
97
|
+
// src/ObjectHasher.ts
|
|
98
98
|
var wasmSupportStatic = new WasmSupport(["bigInt"]);
|
|
99
99
|
var omitByPredicate = (prefix) => (_, key) => {
|
|
100
100
|
assertEx(typeof key === "string", () => `Invalid key type [${String(key)}, ${typeof key}]`);
|
|
101
101
|
return String(key).startsWith(prefix);
|
|
102
102
|
};
|
|
103
|
-
var
|
|
103
|
+
var ObjectHasher = class _ObjectHasher extends ObjectWrapper {
|
|
104
104
|
static allowHashPooling = true;
|
|
105
105
|
static allowSubtle = true;
|
|
106
106
|
static createBrowserWorker;
|
|
@@ -116,9 +116,6 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
116
116
|
static wasmHashWorkerUrl;
|
|
117
117
|
static wasmInitialized = wasmSupportStatic.initialize();
|
|
118
118
|
static wasmSupport = wasmSupportStatic;
|
|
119
|
-
// These get set to null if they fail to create and then we just don't use workers - needed for storybook
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
-
static _jsHashPool;
|
|
122
119
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
120
|
static _subtleHashPool;
|
|
124
121
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -169,14 +166,14 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
169
166
|
*/
|
|
170
167
|
static async hash(obj) {
|
|
171
168
|
const stringToHash = this.stringifyHashFields(obj);
|
|
172
|
-
if (
|
|
169
|
+
if (_ObjectHasher.allowSubtle) {
|
|
173
170
|
try {
|
|
174
171
|
const enc = new TextEncoder();
|
|
175
172
|
const data = enc.encode(stringToHash);
|
|
176
173
|
const hashArray = await this.subtleHash(data);
|
|
177
174
|
return hexFromArrayBuffer(hashArray, { bitLength: 256 });
|
|
178
175
|
} catch {
|
|
179
|
-
|
|
176
|
+
_ObjectHasher.allowSubtle = false;
|
|
180
177
|
}
|
|
181
178
|
}
|
|
182
179
|
await this.wasmInitialized;
|
|
@@ -198,7 +195,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
198
195
|
* @returns An array of payload/hash tuples
|
|
199
196
|
*/
|
|
200
197
|
static async hashPairs(objs) {
|
|
201
|
-
return await Promise.all(objs.map(async (obj) => [obj, await
|
|
198
|
+
return await Promise.all(objs.map(async (obj) => [obj, await PayloadHasher.hash(obj)]));
|
|
202
199
|
}
|
|
203
200
|
/**
|
|
204
201
|
* Creates an array of payload hashes based on the payloads passed in
|
|
@@ -239,7 +236,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
239
236
|
return Pool(createFunc, size);
|
|
240
237
|
}
|
|
241
238
|
async hash() {
|
|
242
|
-
return await
|
|
239
|
+
return await PayloadHasher.hash(this.obj);
|
|
243
240
|
}
|
|
244
241
|
/**
|
|
245
242
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -247,14 +244,16 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
247
244
|
* @returns Returns a clone of the payload that is JSON safe
|
|
248
245
|
*/
|
|
249
246
|
json(meta = false) {
|
|
250
|
-
return
|
|
247
|
+
return PayloadHasher.json(this.obj, meta);
|
|
251
248
|
}
|
|
252
249
|
};
|
|
250
|
+
var PayloadHasher = class extends ObjectHasher {
|
|
251
|
+
};
|
|
253
252
|
|
|
254
|
-
// src/
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
var
|
|
253
|
+
// src/BrowserObjectHasher.ts
|
|
254
|
+
ObjectHasher.createBrowserWorker = createBrowserWorker;
|
|
255
|
+
ObjectHasher.createNodeWorker = createNodeWorker;
|
|
256
|
+
var BrowserObjectHasher = class extends ObjectHasher {
|
|
258
257
|
static createBrowserWorker = createBrowserWorker;
|
|
259
258
|
static createNodeWorker = createNodeWorker;
|
|
260
259
|
static subtleHashWorkerUrl = (() => {
|
|
@@ -272,7 +271,10 @@ var BrowserPayloadHasher = class extends PayloadHasher {
|
|
|
272
271
|
}
|
|
273
272
|
})();
|
|
274
273
|
};
|
|
274
|
+
var BrowserPayloadHasher = class extends BrowserObjectHasher {
|
|
275
|
+
};
|
|
275
276
|
export {
|
|
277
|
+
BrowserObjectHasher as ObjectHasher,
|
|
276
278
|
BrowserPayloadHasher as PayloadHasher,
|
|
277
279
|
removeEmptyFields,
|
|
278
280
|
sortFields
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserPayloadHasher.ts"],"sourcesContent":["import { Worker } from '@xylabs/threads'\n\nexport const createBrowserWorker = (url?: URL) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Worker(url as any)\n } catch {\n return\n }\n}\n","import { Worker } from '@xylabs/threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n return new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asHash, hexFromArrayBuffer } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { ObjectWrapper, omitBy } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport type { ModuleThread, Worker } from '@xylabs/threads'\nimport { Pool, spawn } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\n\nimport { removeEmptyFields } from './removeEmptyFields.ts'\nimport { sortFields } from './sortFields.ts'\nimport { subtleHashFunc, wasmHashFunc } from './worker/index.ts'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerFunction = ((...args: any[]) => any) | (() => any)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = <T extends object>(prefix: string) => (_: T[keyof T], key: keyof T) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${String(key)}, ${typeof key}]`)\n return String(key).startsWith(prefix)\n}\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n })()\n\n static subtleHashWorkerUrl?: URL\n\n static warnIfUsingJsHash = true\n\n static wasmHashWorkerUrl?: URL\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n // These get set to null if they fail to create and then we just don't use workers - needed for storybook\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _jsHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _wasmHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null\n\n private static get subtleHashPool() {\n if (!this.allowHashPooling || this._subtleHashPool === null) {\n return null\n }\n try {\n return (this._subtleHashPool\n = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null))\n } catch {\n console.warn('Creating subtle hash worker failed')\n this._subtleHashPool = null\n return null\n }\n }\n\n private static get wasmHashPool() {\n if (!this.allowHashPooling || this._wasmHashPool === null) {\n return null\n }\n try {\n return (this._wasmHashPool\n = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null))\n } catch {\n console.warn('Creating wasm hash worker failed')\n this._wasmHashPool = null\n return null\n }\n }\n\n static createWorker(url?: URL, func?: () => unknown) {\n if (url) console.debug(`createWorker: ${url}`)\n return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), () => 'Unable to create worker')\n }\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map(pair => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map(pair => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n throw new Error('No wasm hashing available')\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async obj => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map(obj => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async thread => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async thread => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n json(meta = false): T {\n return PayloadHasher.json(this.obj, meta)\n }\n}\n","import type { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null) return obj\n\n if (Array.isArray(obj)) {\n return obj.map(value => (typeof value === 'object' ? removeEmptyFields(value) : value)) as T\n }\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import type { AnyObject, EmptyObject } from '@xylabs/object'\nimport { isObject } from '@xylabs/object'\n\n// if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-require-imports */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-require-imports */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createBrowserWorker } from './createBrowserWorker.ts'\nimport { createNodeWorker } from './createNodeWorker.ts'\nimport { PayloadHasher } from './PayloadHasher.ts'\n\n// We put both in here so that things will work in jsdom/jest\n\nPayloadHasher.createBrowserWorker = createBrowserWorker\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class BrowserPayloadHasher extends PayloadHasher {\n static override createBrowserWorker = createBrowserWorker\n static override createNodeWorker = createNodeWorker\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('@xyo-network/hash/worker/subtleHash-bundle.mjs', import.meta.url)\n } catch {\n return\n }\n })()\n\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('@xyo-network/hash/worker/wasmHash-bundle.mjs', import.meta.url)\n } catch {\n return\n }\n })()\n}\n"],"mappings":"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","names":["Worker","subtle","sha256","asHash"]}
|
|
1
|
+
{"version":3,"sources":["../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/ObjectHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserObjectHasher.ts"],"sourcesContent":["import { Worker } from '@xylabs/threads'\n\nexport const createBrowserWorker = (url?: URL) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Worker(url as any)\n } catch {\n return\n }\n}\n","import { Worker } from '@xylabs/threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n return new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { asHash, hexFromArrayBuffer } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { ObjectWrapper, omitBy } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport type { ModuleThread, Worker } from '@xylabs/threads'\nimport { Pool, spawn } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\n\nimport { removeEmptyFields } from './removeEmptyFields.ts'\nimport { sortFields } from './sortFields.ts'\nimport { subtleHashFunc, wasmHashFunc } from './worker/index.ts'\n\nexport type WorkerFunction = ((...args: unknown[]) => unknown) | (() => unknown)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = <T extends EmptyObject>(prefix: string) => (_: T[keyof T], key: keyof T) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${String(key)}, ${typeof key}]`)\n return String(key).startsWith(prefix)\n}\n\nexport class ObjectHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n })()\n\n static subtleHashWorkerUrl?: URL\n\n static warnIfUsingJsHash = true\n\n static wasmHashWorkerUrl?: URL\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _wasmHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null\n\n private static get subtleHashPool() {\n if (!this.allowHashPooling || this._subtleHashPool === null) {\n return null\n }\n try {\n return (this._subtleHashPool\n = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null))\n } catch {\n console.warn('Creating subtle hash worker failed')\n this._subtleHashPool = null\n return null\n }\n }\n\n private static get wasmHashPool() {\n if (!this.allowHashPooling || this._wasmHashPool === null) {\n return null\n }\n try {\n return (this._wasmHashPool\n = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null))\n } catch {\n console.warn('Creating wasm hash worker failed')\n this._wasmHashPool = null\n return null\n }\n }\n\n static createWorker(url?: URL, func?: () => unknown) {\n if (url) console.debug(`createWorker: ${url}`)\n return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), () => 'Unable to create worker')\n }\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map(pair => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map(pair => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (ObjectHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n ObjectHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n throw new Error('No wasm hashing available')\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async obj => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map(obj => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async thread => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async thread => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n json(meta = false): T {\n return PayloadHasher.json(this.obj, meta)\n }\n}\n\n/** @deprecated use PayloadBuilder or ObjectHasher instead */\nexport class PayloadHasher<T extends object> extends ObjectHasher<T> {}\n","import type { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null) return obj\n\n if (Array.isArray(obj)) {\n return obj.map(value => (typeof value === 'object' ? removeEmptyFields(value) : value)) as T\n }\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import type { AnyObject, EmptyObject } from '@xylabs/object'\nimport { isObject } from '@xylabs/object'\n\n// if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-require-imports */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-require-imports */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import type { EmptyObject } from '@xylabs/object'\n\nimport { createBrowserWorker } from './createBrowserWorker.ts'\nimport { createNodeWorker } from './createNodeWorker.ts'\nimport { ObjectHasher } from './ObjectHasher.ts'\n\n// We put both in here so that things will work in jsdom/jest\n\nObjectHasher.createBrowserWorker = createBrowserWorker\nObjectHasher.createNodeWorker = createNodeWorker\n\nexport class BrowserObjectHasher<T extends EmptyObject = EmptyObject> extends ObjectHasher<T> {\n static override createBrowserWorker = createBrowserWorker\n static override createNodeWorker = createNodeWorker\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('@xyo-network/hash/worker/subtleHash-bundle.mjs', import.meta.url)\n } catch {\n return\n }\n })()\n\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('@xyo-network/hash/worker/wasmHash-bundle.mjs', import.meta.url)\n } catch {\n return\n }\n })()\n}\n\n/** @deprecated use BrowserObjectHasher instead */\nexport class BrowserPayloadHasher<T extends EmptyObject = EmptyObject> extends BrowserObjectHasher<T> {}\n"],"mappings":"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","names":["Worker","subtle","sha256","asHash"]}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3E,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,gBAAgB,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3E,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA"}
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
));
|
|
29
29
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
30
30
|
|
|
31
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
31
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/serializers.js
|
|
32
32
|
var require_serializers = __commonJS({
|
|
33
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
33
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/serializers.js"(exports) {
|
|
34
34
|
"use strict";
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.DefaultSerializer = void 0;
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
78
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/common.js
|
|
79
79
|
var require_common = __commonJS({
|
|
80
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
80
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/common.js"(exports) {
|
|
81
81
|
"use strict";
|
|
82
82
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
83
83
|
exports.registerSerializer = registerSerializer;
|
|
@@ -97,9 +97,9 @@
|
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
100
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/get-bundle-url.browser.js
|
|
101
101
|
var require_get_bundle_url_browser = __commonJS({
|
|
102
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
102
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/get-bundle-url.browser.js"(exports) {
|
|
103
103
|
"use strict";
|
|
104
104
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
105
105
|
exports.getBundleURL = getBundleURLCached;
|
|
@@ -127,9 +127,9 @@
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
130
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/implementation.browser.js
|
|
131
131
|
var require_implementation_browser = __commonJS({
|
|
132
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
132
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/implementation.browser.js"(exports) {
|
|
133
133
|
"use strict";
|
|
134
134
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
135
135
|
exports.defaultPoolSize = void 0;
|
|
@@ -1761,9 +1761,9 @@
|
|
|
1761
1761
|
}
|
|
1762
1762
|
});
|
|
1763
1763
|
|
|
1764
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1764
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/ponyfills.js
|
|
1765
1765
|
var require_ponyfills = __commonJS({
|
|
1766
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1766
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/ponyfills.js"(exports) {
|
|
1767
1767
|
"use strict";
|
|
1768
1768
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1769
1769
|
exports.allSettled = allSettled;
|
|
@@ -1786,9 +1786,9 @@
|
|
|
1786
1786
|
}
|
|
1787
1787
|
});
|
|
1788
1788
|
|
|
1789
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1789
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/pool-types.js
|
|
1790
1790
|
var require_pool_types = __commonJS({
|
|
1791
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1791
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/pool-types.js"(exports) {
|
|
1792
1792
|
"use strict";
|
|
1793
1793
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1794
1794
|
exports.PoolEventType = void 0;
|
|
@@ -1806,9 +1806,9 @@
|
|
|
1806
1806
|
}
|
|
1807
1807
|
});
|
|
1808
1808
|
|
|
1809
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1809
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/symbols.js
|
|
1810
1810
|
var require_symbols3 = __commonJS({
|
|
1811
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1811
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/symbols.js"(exports) {
|
|
1812
1812
|
"use strict";
|
|
1813
1813
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1814
1814
|
exports.$worker = exports.$transferable = exports.$terminate = exports.$events = exports.$errors = void 0;
|
|
@@ -1820,9 +1820,9 @@
|
|
|
1820
1820
|
}
|
|
1821
1821
|
});
|
|
1822
1822
|
|
|
1823
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1823
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/thread.js
|
|
1824
1824
|
var require_thread = __commonJS({
|
|
1825
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1825
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/thread.js"(exports) {
|
|
1826
1826
|
"use strict";
|
|
1827
1827
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1828
1828
|
exports.Thread = void 0;
|
|
@@ -1844,9 +1844,9 @@
|
|
|
1844
1844
|
}
|
|
1845
1845
|
});
|
|
1846
1846
|
|
|
1847
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1847
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/pool.js
|
|
1848
1848
|
var require_pool = __commonJS({
|
|
1849
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
1849
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/pool.js"(exports) {
|
|
1850
1850
|
"use strict";
|
|
1851
1851
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
1852
1852
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
@@ -2108,9 +2108,9 @@
|
|
|
2108
2108
|
}
|
|
2109
2109
|
});
|
|
2110
2110
|
|
|
2111
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2111
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/promise.js
|
|
2112
2112
|
var require_promise = __commonJS({
|
|
2113
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2113
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/promise.js"(exports) {
|
|
2114
2114
|
"use strict";
|
|
2115
2115
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2116
2116
|
exports.createPromiseWithResolver = createPromiseWithResolver;
|
|
@@ -2136,9 +2136,9 @@
|
|
|
2136
2136
|
}
|
|
2137
2137
|
});
|
|
2138
2138
|
|
|
2139
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2139
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/types/master.js
|
|
2140
2140
|
var require_master = __commonJS({
|
|
2141
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2141
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/types/master.js"(exports) {
|
|
2142
2142
|
"use strict";
|
|
2143
2143
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2144
2144
|
exports.WorkerEventType = void 0;
|
|
@@ -2151,9 +2151,9 @@
|
|
|
2151
2151
|
}
|
|
2152
2152
|
});
|
|
2153
2153
|
|
|
2154
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2154
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/observable-promise.js
|
|
2155
2155
|
var require_observable_promise = __commonJS({
|
|
2156
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2156
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/observable-promise.js"(exports) {
|
|
2157
2157
|
"use strict";
|
|
2158
2158
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2159
2159
|
exports.ObservablePromise = void 0;
|
|
@@ -2285,9 +2285,9 @@
|
|
|
2285
2285
|
}
|
|
2286
2286
|
});
|
|
2287
2287
|
|
|
2288
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2288
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/transferable.js
|
|
2289
2289
|
var require_transferable = __commonJS({
|
|
2290
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2290
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/transferable.js"(exports) {
|
|
2291
2291
|
"use strict";
|
|
2292
2292
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2293
2293
|
exports.isTransferDescriptor = isTransferDescriptor;
|
|
@@ -2316,9 +2316,9 @@
|
|
|
2316
2316
|
}
|
|
2317
2317
|
});
|
|
2318
2318
|
|
|
2319
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2319
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/types/messages.js
|
|
2320
2320
|
var require_messages = __commonJS({
|
|
2321
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2321
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/types/messages.js"(exports) {
|
|
2322
2322
|
"use strict";
|
|
2323
2323
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2324
2324
|
exports.WorkerMessageType = exports.MasterMessageType = void 0;
|
|
@@ -2338,9 +2338,9 @@
|
|
|
2338
2338
|
}
|
|
2339
2339
|
});
|
|
2340
2340
|
|
|
2341
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2341
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/invocation-proxy.js
|
|
2342
2342
|
var require_invocation_proxy = __commonJS({
|
|
2343
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2343
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/invocation-proxy.js"(exports) {
|
|
2344
2344
|
"use strict";
|
|
2345
2345
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
2346
2346
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
@@ -2459,9 +2459,9 @@
|
|
|
2459
2459
|
}
|
|
2460
2460
|
});
|
|
2461
2461
|
|
|
2462
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2462
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/spawn.js
|
|
2463
2463
|
var require_spawn = __commonJS({
|
|
2464
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2464
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/spawn.js"(exports) {
|
|
2465
2465
|
"use strict";
|
|
2466
2466
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
2467
2467
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
@@ -2572,9 +2572,9 @@
|
|
|
2572
2572
|
}
|
|
2573
2573
|
});
|
|
2574
2574
|
|
|
2575
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2575
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/index.js
|
|
2576
2576
|
var require_master2 = __commonJS({
|
|
2577
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2577
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/master/index.js"(exports) {
|
|
2578
2578
|
"use strict";
|
|
2579
2579
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2580
2580
|
exports.isWorkerRuntime = exports.Worker = exports.BlobWorker = exports.Thread = exports.spawn = exports.Pool = void 0;
|
|
@@ -2619,9 +2619,9 @@
|
|
|
2619
2619
|
}
|
|
2620
2620
|
});
|
|
2621
2621
|
|
|
2622
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2622
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/worker/implementation.browser.js
|
|
2623
2623
|
var require_implementation_browser2 = __commonJS({
|
|
2624
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2624
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/worker/implementation.browser.js"(exports) {
|
|
2625
2625
|
"use strict";
|
|
2626
2626
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2627
2627
|
var isWorkerRuntime = function isWorkerRuntime2() {
|
|
@@ -2649,9 +2649,9 @@
|
|
|
2649
2649
|
}
|
|
2650
2650
|
});
|
|
2651
2651
|
|
|
2652
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2652
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/worker/index.js
|
|
2653
2653
|
var require_worker = __commonJS({
|
|
2654
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2654
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/worker/index.js"(exports) {
|
|
2655
2655
|
"use strict";
|
|
2656
2656
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
2657
2657
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
@@ -2827,9 +2827,9 @@
|
|
|
2827
2827
|
}
|
|
2828
2828
|
});
|
|
2829
2829
|
|
|
2830
|
-
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2830
|
+
// ../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/index.js
|
|
2831
2831
|
var require_esm = __commonJS({
|
|
2832
|
-
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.
|
|
2832
|
+
"../../../../../../node_modules/.store/@xylabs-threads-npm-4.4.4-abf01d65a1/package/dist/esm/index.js"(exports) {
|
|
2833
2833
|
"use strict";
|
|
2834
2834
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
2835
2835
|
if (k2 === void 0) k2 = k;
|
|
@@ -2869,7 +2869,7 @@
|
|
|
2869
2869
|
}
|
|
2870
2870
|
});
|
|
2871
2871
|
|
|
2872
|
-
// ../../../../../../node_modules/.store/@xylabs-platform-npm-4.
|
|
2872
|
+
// ../../../../../../node_modules/.store/@xylabs-platform-npm-4.4.4-f67271ed67/package/dist/browser/index.mjs
|
|
2873
2873
|
var subtle = globalThis.crypto.subtle;
|
|
2874
2874
|
|
|
2875
2875
|
// src/worker/subtleHash.ts
|