@xyo-network/hash 2.90.19 → 2.90.21
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/PayloadHasher.d.cts.map +1 -1
- package/dist/browser/PayloadHasher.d.mts.map +1 -1
- package/dist/browser/PayloadHasher.d.ts.map +1 -1
- package/dist/browser/index-browser.cjs +9 -4
- package/dist/browser/index-browser.cjs.map +1 -1
- package/dist/browser/index-browser.js +9 -4
- package/dist/browser/index-browser.js.map +1 -1
- package/dist/node/PayloadHasher.d.cts.map +1 -1
- package/dist/node/PayloadHasher.d.mts.map +1 -1
- package/dist/node/PayloadHasher.d.ts.map +1 -1
- package/dist/node/index.cjs +9 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +9 -4
- package/dist/node/index.js.map +1 -1
- package/package.json +2 -2
- package/src/PayloadHasher.ts +9 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -208,7 +208,7 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
208
208
|
return null;
|
|
209
209
|
}
|
|
210
210
|
try {
|
|
211
|
-
return this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null;
|
|
211
|
+
return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
|
|
212
212
|
} catch {
|
|
213
213
|
console.warn("Creating js hash worker failed");
|
|
214
214
|
this._jsHashPool = null;
|
|
@@ -220,7 +220,7 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
220
220
|
return null;
|
|
221
221
|
}
|
|
222
222
|
try {
|
|
223
|
-
return this._subtleHashPool = this._subtleHashPool ?? this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null;
|
|
223
|
+
return this._subtleHashPool = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null);
|
|
224
224
|
} catch {
|
|
225
225
|
console.warn("Creating subtle hash worker failed");
|
|
226
226
|
this._subtleHashPool = null;
|
|
@@ -232,7 +232,7 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
232
232
|
return null;
|
|
233
233
|
}
|
|
234
234
|
try {
|
|
235
|
-
return this._wasmHashPool = this._wasmHashPool ?? this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null;
|
|
235
|
+
return this._wasmHashPool = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null);
|
|
236
236
|
} catch {
|
|
237
237
|
console.warn("Creating wasm hash worker failed");
|
|
238
238
|
this._wasmHashPool = null;
|
|
@@ -240,6 +240,8 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
static createWorker(url, func) {
|
|
243
|
+
if (url)
|
|
244
|
+
console.debug(`createWorker: ${url}`);
|
|
243
245
|
return (0, import_assert2.assertEx)(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), "Unable to create worker");
|
|
244
246
|
}
|
|
245
247
|
static async filterExcludeByHash(objs = [], hash) {
|
|
@@ -349,7 +351,10 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
349
351
|
}
|
|
350
352
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
351
353
|
static createWorkerPool(url, func, size = 8) {
|
|
352
|
-
|
|
354
|
+
if (url)
|
|
355
|
+
console.debug(`createWorkerPool: ${url}`);
|
|
356
|
+
const createFunc = /* @__PURE__ */ __name(() => (0, import_threads3.spawn)(this.createWorker(url, func)), "createFunc");
|
|
357
|
+
return (0, import_threads3.Pool)(createFunc, size);
|
|
353
358
|
}
|
|
354
359
|
async hash() {
|
|
355
360
|
return await _PayloadHasher.hash(this.obj);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index-browser.ts","../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserPayloadHasher.ts"],"sourcesContent":["export { BrowserPayloadHasher as PayloadHasher } from './BrowserPayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { Worker } from '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 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 // 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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null)\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 = 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 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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 return Pool(() => spawn<T>(this.createWorker(url, func)), size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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'\nimport { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\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 jsHashWorkerUrl = (() => {\n try {\n return new URL('worker/jsHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n}\n"],"mappings":"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","names":["createBrowserWorker","url","Worker","import_threads","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_assert","import_object","import_threads","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowHashPooling","allowSubtle","createBrowserWorker","createNodeWorker","initialized","globalThis","xyo","hashing","console","warn","jsHashWorkerUrl","subtleHashWorkerUrl","warnIfUsingJsHash","wasmHashWorkerUrl","wasmInitialized","initialize","wasmSupport","_jsHashPool","_subtleHashPool","_wasmHashPool","jsHashPool","createWorkerPool","jsHashFunc","subtleHashPool","subtleHashFunc","wasmHashPool","wasmHashFunc","createWorker","url","func","assertEx","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","Pool","spawn","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index-browser.ts","../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserPayloadHasher.ts"],"sourcesContent":["export { BrowserPayloadHasher as PayloadHasher } from './BrowserPayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { Worker } from '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 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null))\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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'\nimport { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\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 jsHashWorkerUrl = (() => {\n try {\n return new URL('worker/jsHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n}\n"],"mappings":"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","names":["createBrowserWorker","url","Worker","import_threads","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_assert","import_object","import_threads","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowHashPooling","allowSubtle","createBrowserWorker","createNodeWorker","initialized","globalThis","xyo","hashing","console","warn","jsHashWorkerUrl","subtleHashWorkerUrl","warnIfUsingJsHash","wasmHashWorkerUrl","wasmInitialized","initialize","wasmSupport","_jsHashPool","_subtleHashPool","_wasmHashPool","jsHashPool","createWorkerPool","jsHashFunc","subtleHashPool","subtleHashFunc","wasmHashPool","wasmHashFunc","createWorker","url","func","debug","assertEx","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","createFunc","spawn","Pool","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
|
|
@@ -176,7 +176,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
176
176
|
return null;
|
|
177
177
|
}
|
|
178
178
|
try {
|
|
179
|
-
return this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null;
|
|
179
|
+
return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
|
|
180
180
|
} catch {
|
|
181
181
|
console.warn("Creating js hash worker failed");
|
|
182
182
|
this._jsHashPool = null;
|
|
@@ -188,7 +188,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
188
188
|
return null;
|
|
189
189
|
}
|
|
190
190
|
try {
|
|
191
|
-
return this._subtleHashPool = this._subtleHashPool ?? this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null;
|
|
191
|
+
return this._subtleHashPool = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null);
|
|
192
192
|
} catch {
|
|
193
193
|
console.warn("Creating subtle hash worker failed");
|
|
194
194
|
this._subtleHashPool = null;
|
|
@@ -200,7 +200,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
200
200
|
return null;
|
|
201
201
|
}
|
|
202
202
|
try {
|
|
203
|
-
return this._wasmHashPool = this._wasmHashPool ?? this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null;
|
|
203
|
+
return this._wasmHashPool = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null);
|
|
204
204
|
} catch {
|
|
205
205
|
console.warn("Creating wasm hash worker failed");
|
|
206
206
|
this._wasmHashPool = null;
|
|
@@ -208,6 +208,8 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
static createWorker(url, func) {
|
|
211
|
+
if (url)
|
|
212
|
+
console.debug(`createWorker: ${url}`);
|
|
211
213
|
return assertEx2(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), "Unable to create worker");
|
|
212
214
|
}
|
|
213
215
|
static async filterExcludeByHash(objs = [], hash) {
|
|
@@ -317,7 +319,10 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
317
319
|
}
|
|
318
320
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
319
321
|
static createWorkerPool(url, func, size = 8) {
|
|
320
|
-
|
|
322
|
+
if (url)
|
|
323
|
+
console.debug(`createWorkerPool: ${url}`);
|
|
324
|
+
const createFunc = /* @__PURE__ */ __name(() => spawn(this.createWorker(url, func)), "createFunc");
|
|
325
|
+
return Pool(createFunc, size);
|
|
321
326
|
}
|
|
322
327
|
async hash() {
|
|
323
328
|
return await _PayloadHasher.hash(this.obj);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserPayloadHasher.ts"],"sourcesContent":["import { Worker } from '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 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 // 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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null)\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 = 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 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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 return Pool(() => spawn<T>(this.createWorker(url, func)), size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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'\nimport { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\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 jsHashWorkerUrl = (() => {\n try {\n return new URL('worker/jsHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n}\n"],"mappings":"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","names":["Worker","createBrowserWorker","url","Worker","Worker","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","assertEx","asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","Pool","spawn","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowHashPooling","allowSubtle","createBrowserWorker","createNodeWorker","initialized","globalThis","xyo","hashing","console","warn","jsHashWorkerUrl","subtleHashWorkerUrl","warnIfUsingJsHash","wasmHashWorkerUrl","wasmInitialized","initialize","wasmSupport","_jsHashPool","_subtleHashPool","_wasmHashPool","jsHashPool","createWorkerPool","jsHashFunc","subtleHashPool","subtleHashFunc","wasmHashPool","wasmHashFunc","createWorker","url","func","assertEx","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","Pool","spawn","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
|
|
1
|
+
{"version":3,"sources":["../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/BrowserPayloadHasher.ts"],"sourcesContent":["import { Worker } from '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 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null))\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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'\nimport { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\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 jsHashWorkerUrl = (() => {\n try {\n return new URL('worker/jsHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash-bundle.js', import.meta.url)\n } catch {\n return\n }\n })()\n}\n"],"mappings":"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","names":["Worker","createBrowserWorker","url","Worker","Worker","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","assertEx","asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","Pool","spawn","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowHashPooling","allowSubtle","createBrowserWorker","createNodeWorker","initialized","globalThis","xyo","hashing","console","warn","jsHashWorkerUrl","subtleHashWorkerUrl","warnIfUsingJsHash","wasmHashWorkerUrl","wasmInitialized","initialize","wasmSupport","_jsHashPool","_subtleHashPool","_wasmHashPool","jsHashPool","createWorkerPool","jsHashFunc","subtleHashPool","subtleHashFunc","wasmHashPool","wasmHashFunc","createWorker","url","func","debug","assertEx","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","createFunc","spawn","Pool","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAA6B,MAAM,EAAE,MAAM,SAAS,CAAA;AAW3D,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,UAAO;IAC9B,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtE,MAAM,CAAC,WAAW,OAMd;IAEJ,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;IAEhC,MAAM,CAAC,iBAAiB,UAAO;IAE/B,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAA;IAE9B,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;IAI/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAA8C;
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -176,7 +176,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
176
176
|
return null;
|
|
177
177
|
}
|
|
178
178
|
try {
|
|
179
|
-
return this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null;
|
|
179
|
+
return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
|
|
180
180
|
} catch {
|
|
181
181
|
console.warn("Creating js hash worker failed");
|
|
182
182
|
this._jsHashPool = null;
|
|
@@ -188,7 +188,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
188
188
|
return null;
|
|
189
189
|
}
|
|
190
190
|
try {
|
|
191
|
-
return this._subtleHashPool = this._subtleHashPool ?? this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null;
|
|
191
|
+
return this._subtleHashPool = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null);
|
|
192
192
|
} catch {
|
|
193
193
|
console.warn("Creating subtle hash worker failed");
|
|
194
194
|
this._subtleHashPool = null;
|
|
@@ -200,7 +200,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
200
200
|
return null;
|
|
201
201
|
}
|
|
202
202
|
try {
|
|
203
|
-
return this._wasmHashPool = this._wasmHashPool ?? this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null;
|
|
203
|
+
return this._wasmHashPool = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null);
|
|
204
204
|
} catch {
|
|
205
205
|
console.warn("Creating wasm hash worker failed");
|
|
206
206
|
this._wasmHashPool = null;
|
|
@@ -209,6 +209,8 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
209
209
|
}
|
|
210
210
|
static createWorker(url, func) {
|
|
211
211
|
var _a, _b;
|
|
212
|
+
if (url)
|
|
213
|
+
console.debug(`createWorker: ${url}`);
|
|
212
214
|
return (0, import_assert2.assertEx)(((_a = this.createBrowserWorker) == null ? void 0 : _a.call(this, url)) ?? ((_b = this.createNodeWorker) == null ? void 0 : _b.call(this, func)), "Unable to create worker");
|
|
213
215
|
}
|
|
214
216
|
static async filterExcludeByHash(objs = [], hash) {
|
|
@@ -321,7 +323,10 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
321
323
|
}
|
|
322
324
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
323
325
|
static createWorkerPool(url, func, size = 8) {
|
|
324
|
-
|
|
326
|
+
if (url)
|
|
327
|
+
console.debug(`createWorkerPool: ${url}`);
|
|
328
|
+
const createFunc = /* @__PURE__ */ __name(() => (0, import_threads2.spawn)(this.createWorker(url, func)), "createFunc");
|
|
329
|
+
return (0, import_threads2.Pool)(createFunc, size);
|
|
325
330
|
}
|
|
326
331
|
async hash() {
|
|
327
332
|
return await _PayloadHasher.hash(this.obj);
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts"],"sourcesContent":["export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { Worker } from 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 // 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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null)\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 = 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 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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 return Pool(() => spawn<T>(this.createWorker(url, func)), size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n"],"mappings":"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","names":["createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_assert","import_object","import_threads","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","assertEx","createBrowserWorker","createNodeWorker","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","warnIfUsingJsHash","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","Pool","spawn","initialized","globalThis","xyo","hashing","initialize","PayloadHasher","createNodeWorker","NodePayloadHasher"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts"],"sourcesContent":["export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { Worker } from 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null))\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n"],"mappings":"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","names":["createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_assert","import_object","import_threads","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","debug","assertEx","createBrowserWorker","createNodeWorker","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","warnIfUsingJsHash","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","createFunc","spawn","Pool","initialized","globalThis","xyo","hashing","initialize","PayloadHasher","createNodeWorker","NodePayloadHasher"]}
|
package/dist/node/index.js
CHANGED
|
@@ -144,7 +144,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
144
144
|
return null;
|
|
145
145
|
}
|
|
146
146
|
try {
|
|
147
|
-
return this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null;
|
|
147
|
+
return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
|
|
148
148
|
} catch {
|
|
149
149
|
console.warn("Creating js hash worker failed");
|
|
150
150
|
this._jsHashPool = null;
|
|
@@ -156,7 +156,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
156
156
|
return null;
|
|
157
157
|
}
|
|
158
158
|
try {
|
|
159
|
-
return this._subtleHashPool = this._subtleHashPool ?? this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null;
|
|
159
|
+
return this._subtleHashPool = this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null);
|
|
160
160
|
} catch {
|
|
161
161
|
console.warn("Creating subtle hash worker failed");
|
|
162
162
|
this._subtleHashPool = null;
|
|
@@ -168,7 +168,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
168
168
|
return null;
|
|
169
169
|
}
|
|
170
170
|
try {
|
|
171
|
-
return this._wasmHashPool = this._wasmHashPool ?? this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null;
|
|
171
|
+
return this._wasmHashPool = this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null);
|
|
172
172
|
} catch {
|
|
173
173
|
console.warn("Creating wasm hash worker failed");
|
|
174
174
|
this._wasmHashPool = null;
|
|
@@ -177,6 +177,8 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
177
177
|
}
|
|
178
178
|
static createWorker(url, func) {
|
|
179
179
|
var _a, _b;
|
|
180
|
+
if (url)
|
|
181
|
+
console.debug(`createWorker: ${url}`);
|
|
180
182
|
return assertEx2(((_a = this.createBrowserWorker) == null ? void 0 : _a.call(this, url)) ?? ((_b = this.createNodeWorker) == null ? void 0 : _b.call(this, func)), "Unable to create worker");
|
|
181
183
|
}
|
|
182
184
|
static async filterExcludeByHash(objs = [], hash) {
|
|
@@ -289,7 +291,10 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
289
291
|
}
|
|
290
292
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
291
293
|
static createWorkerPool(url, func, size = 8) {
|
|
292
|
-
|
|
294
|
+
if (url)
|
|
295
|
+
console.debug(`createWorkerPool: ${url}`);
|
|
296
|
+
const createFunc = /* @__PURE__ */ __name(() => spawn(this.createWorker(url, func)), "createFunc");
|
|
297
|
+
return Pool(createFunc, size);
|
|
293
298
|
}
|
|
294
299
|
async hash() {
|
|
295
300
|
return await _PayloadHasher.hash(this.obj);
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts"],"sourcesContent":["import { Worker } from 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 // 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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null)\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 = 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 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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 return Pool(() => spawn<T>(this.createWorker(url, func)), size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n"],"mappings":"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","names":["Worker","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","assertEx","asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","Pool","spawn","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","assertEx","createBrowserWorker","createNodeWorker","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","warnIfUsingJsHash","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","Pool","spawn","initialized","globalThis","xyo","hashing","initialize","PayloadHasher","createNodeWorker","NodePayloadHasher"]}
|
|
1
|
+
{"version":3,"sources":["../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts"],"sourcesContent":["import { Worker } from 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\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 globalThis.xyo === globalThis.xyo ?? { hashing: PayloadHasher }\n })()\n\n static jsHashWorkerUrl?: URL\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 jsHashPool() {\n if (!this.allowHashPooling || this._jsHashPool === null) {\n return null\n }\n try {\n return (this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null))\n } catch {\n console.warn('Creating js hash worker failed')\n this._jsHashPool = null\n return null\n }\n }\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 return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\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, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\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 static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n const pool = this.jsHashPool\n return pool === null\n ? asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n : await pool.queue(async (thread) => await thread.hash(data))\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 : deepOmitPrefixedFields(payload, '_')))\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 hashSync(): Hash {\n return PayloadHasher.hashSync(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 jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, 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-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('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-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n"],"mappings":"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","names":["Worker","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","assertEx","asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","Pool","spawn","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","debug","assertEx","createBrowserWorker","createNodeWorker","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","warnIfUsingJsHash","pool","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","subtle","sha256","size","createFunc","spawn","Pool","initialized","globalThis","xyo","hashing","initialize","PayloadHasher","createNodeWorker","NodePayloadHasher"]}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"@xylabs/object": "^2.89.2",
|
|
17
17
|
"@xylabs/platform": "^2.14.2",
|
|
18
18
|
"@xylabs/typeof": "^2.14.2",
|
|
19
|
-
"@xyo-network/wasm": "~2.90.
|
|
19
|
+
"@xyo-network/wasm": "~2.90.21",
|
|
20
20
|
"hash-wasm": "^4.11.0",
|
|
21
21
|
"sha.js": "^2.4.11",
|
|
22
22
|
"threads": "^1.7.0"
|
|
@@ -75,6 +75,6 @@
|
|
|
75
75
|
"package-compile": "package-compile-only && yarn bundle"
|
|
76
76
|
},
|
|
77
77
|
"sideEffects": false,
|
|
78
|
-
"version": "2.90.
|
|
78
|
+
"version": "2.90.21",
|
|
79
79
|
"type": "module"
|
|
80
80
|
}
|
package/src/PayloadHasher.ts
CHANGED
|
@@ -43,6 +43,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
43
43
|
// These get set to null if they fail to create and then we just don't use workers - needed for storybook
|
|
44
44
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
45
|
private static _jsHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null
|
|
46
|
+
|
|
46
47
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
48
|
private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>> | null
|
|
48
49
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -53,7 +54,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
53
54
|
return null
|
|
54
55
|
}
|
|
55
56
|
try {
|
|
56
|
-
return (this._jsHashPool = this._jsHashPool ?? this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null)
|
|
57
|
+
return (this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null))
|
|
57
58
|
} catch {
|
|
58
59
|
console.warn('Creating js hash worker failed')
|
|
59
60
|
this._jsHashPool = null
|
|
@@ -67,7 +68,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
67
68
|
}
|
|
68
69
|
try {
|
|
69
70
|
return (this._subtleHashPool =
|
|
70
|
-
this._subtleHashPool ?? this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null)
|
|
71
|
+
this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null))
|
|
71
72
|
} catch {
|
|
72
73
|
console.warn('Creating subtle hash worker failed')
|
|
73
74
|
this._subtleHashPool = null
|
|
@@ -80,7 +81,8 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
80
81
|
return null
|
|
81
82
|
}
|
|
82
83
|
try {
|
|
83
|
-
return (this._wasmHashPool =
|
|
84
|
+
return (this._wasmHashPool =
|
|
85
|
+
this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null))
|
|
84
86
|
} catch {
|
|
85
87
|
console.warn('Creating wasm hash worker failed')
|
|
86
88
|
this._wasmHashPool = null
|
|
@@ -89,6 +91,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
static createWorker(url?: URL, func?: () => unknown) {
|
|
94
|
+
if (url) console.debug(`createWorker: ${url}`)
|
|
92
95
|
return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), 'Unable to create worker')
|
|
93
96
|
}
|
|
94
97
|
|
|
@@ -208,7 +211,9 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
208
211
|
|
|
209
212
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
210
213
|
private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {
|
|
211
|
-
|
|
214
|
+
if (url) console.debug(`createWorkerPool: ${url}`)
|
|
215
|
+
const createFunc = () => spawn<T>(this.createWorker(url, func))
|
|
216
|
+
return Pool(createFunc, size)
|
|
212
217
|
}
|
|
213
218
|
|
|
214
219
|
async hash(): Promise<Hash> {
|