@xyo-network/hash 2.90.10 → 2.90.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/browser/BrowserPayloadHasher.d.cts +9 -0
  2. package/dist/browser/BrowserPayloadHasher.d.cts.map +1 -0
  3. package/dist/browser/BrowserPayloadHasher.d.mts +9 -0
  4. package/dist/browser/BrowserPayloadHasher.d.mts.map +1 -0
  5. package/dist/browser/BrowserPayloadHasher.d.ts +9 -0
  6. package/dist/browser/BrowserPayloadHasher.d.ts.map +1 -0
  7. package/dist/browser/NodePayloadHasher.d.cts +5 -0
  8. package/dist/browser/NodePayloadHasher.d.cts.map +1 -0
  9. package/dist/browser/NodePayloadHasher.d.mts +5 -0
  10. package/dist/browser/NodePayloadHasher.d.mts.map +1 -0
  11. package/dist/browser/NodePayloadHasher.d.ts +5 -0
  12. package/dist/browser/NodePayloadHasher.d.ts.map +1 -0
  13. package/dist/browser/PayloadHasher.d.cts +14 -10
  14. package/dist/browser/PayloadHasher.d.cts.map +1 -1
  15. package/dist/browser/PayloadHasher.d.mts +14 -10
  16. package/dist/browser/PayloadHasher.d.mts.map +1 -1
  17. package/dist/browser/PayloadHasher.d.ts +14 -10
  18. package/dist/browser/PayloadHasher.d.ts.map +1 -1
  19. package/dist/browser/createBrowserWorker.d.cts +2 -0
  20. package/dist/browser/createBrowserWorker.d.cts.map +1 -0
  21. package/dist/browser/createBrowserWorker.d.mts +2 -0
  22. package/dist/browser/createBrowserWorker.d.mts.map +1 -0
  23. package/dist/browser/createBrowserWorker.d.ts +2 -0
  24. package/dist/browser/createBrowserWorker.d.ts.map +1 -0
  25. package/dist/browser/createNodeWorker.d.cts +2 -0
  26. package/dist/browser/createNodeWorker.d.cts.map +1 -0
  27. package/dist/browser/createNodeWorker.d.mts +2 -0
  28. package/dist/browser/createNodeWorker.d.mts.map +1 -0
  29. package/dist/browser/createNodeWorker.d.ts +2 -0
  30. package/dist/browser/createNodeWorker.d.ts.map +1 -0
  31. package/dist/browser/index-browser.cjs +96 -104
  32. package/dist/browser/index-browser.cjs.map +1 -1
  33. package/dist/browser/index-browser.d.cts +1 -1
  34. package/dist/browser/index-browser.d.cts.map +1 -1
  35. package/dist/browser/index-browser.d.mts +1 -1
  36. package/dist/browser/index-browser.d.mts.map +1 -1
  37. package/dist/browser/index-browser.d.ts +1 -1
  38. package/dist/browser/index-browser.d.ts.map +1 -1
  39. package/dist/browser/index-browser.js +95 -103
  40. package/dist/browser/index-browser.js.map +1 -1
  41. package/dist/browser/index.d.cts +1 -1
  42. package/dist/browser/index.d.cts.map +1 -1
  43. package/dist/browser/index.d.mts +1 -1
  44. package/dist/browser/index.d.mts.map +1 -1
  45. package/dist/browser/index.d.ts +1 -1
  46. package/dist/browser/index.d.ts.map +1 -1
  47. package/dist/node/BrowserPayloadHasher.d.cts +9 -0
  48. package/dist/node/BrowserPayloadHasher.d.cts.map +1 -0
  49. package/dist/node/BrowserPayloadHasher.d.mts +9 -0
  50. package/dist/node/BrowserPayloadHasher.d.mts.map +1 -0
  51. package/dist/node/BrowserPayloadHasher.d.ts +9 -0
  52. package/dist/node/BrowserPayloadHasher.d.ts.map +1 -0
  53. package/dist/node/NodePayloadHasher.d.cts +5 -0
  54. package/dist/node/NodePayloadHasher.d.cts.map +1 -0
  55. package/dist/node/NodePayloadHasher.d.mts +5 -0
  56. package/dist/node/NodePayloadHasher.d.mts.map +1 -0
  57. package/dist/node/NodePayloadHasher.d.ts +5 -0
  58. package/dist/node/NodePayloadHasher.d.ts.map +1 -0
  59. package/dist/node/PayloadHasher.d.cts +14 -10
  60. package/dist/node/PayloadHasher.d.cts.map +1 -1
  61. package/dist/node/PayloadHasher.d.mts +14 -10
  62. package/dist/node/PayloadHasher.d.mts.map +1 -1
  63. package/dist/node/PayloadHasher.d.ts +14 -10
  64. package/dist/node/PayloadHasher.d.ts.map +1 -1
  65. package/dist/node/createBrowserWorker.d.cts +2 -0
  66. package/dist/node/createBrowserWorker.d.cts.map +1 -0
  67. package/dist/node/createBrowserWorker.d.mts +2 -0
  68. package/dist/node/createBrowserWorker.d.mts.map +1 -0
  69. package/dist/node/createBrowserWorker.d.ts +2 -0
  70. package/dist/node/createBrowserWorker.d.ts.map +1 -0
  71. package/dist/node/createNodeWorker.d.cts +2 -0
  72. package/dist/node/createNodeWorker.d.cts.map +1 -0
  73. package/dist/node/createNodeWorker.d.mts +2 -0
  74. package/dist/node/createNodeWorker.d.mts.map +1 -0
  75. package/dist/node/createNodeWorker.d.ts +2 -0
  76. package/dist/node/createNodeWorker.d.ts.map +1 -0
  77. package/dist/node/index-browser.d.cts +1 -1
  78. package/dist/node/index-browser.d.cts.map +1 -1
  79. package/dist/node/index-browser.d.mts +1 -1
  80. package/dist/node/index-browser.d.mts.map +1 -1
  81. package/dist/node/index-browser.d.ts +1 -1
  82. package/dist/node/index-browser.d.ts.map +1 -1
  83. package/dist/node/index.cjs +60 -86
  84. package/dist/node/index.cjs.map +1 -1
  85. package/dist/node/index.d.cts +1 -1
  86. package/dist/node/index.d.cts.map +1 -1
  87. package/dist/node/index.d.mts +1 -1
  88. package/dist/node/index.d.mts.map +1 -1
  89. package/dist/node/index.d.ts +1 -1
  90. package/dist/node/index.d.ts.map +1 -1
  91. package/dist/node/index.js +60 -86
  92. package/dist/node/index.js.map +1 -1
  93. package/package.json +2 -3
  94. package/src/BrowserPayloadHasher.ts +34 -0
  95. package/src/NodePayloadHasher.ts +8 -0
  96. package/src/PayloadHasher.ts +40 -82
  97. package/src/createBrowserWorker.ts +10 -0
  98. package/src/createNodeWorker.ts +15 -0
  99. package/src/index-browser.ts +1 -1
  100. package/src/index.ts +1 -1
  101. package/dist/browser/PayloadHasher-browser.d.cts +0 -69
  102. package/dist/browser/PayloadHasher-browser.d.cts.map +0 -1
  103. package/dist/browser/PayloadHasher-browser.d.mts +0 -69
  104. package/dist/browser/PayloadHasher-browser.d.mts.map +0 -1
  105. package/dist/browser/PayloadHasher-browser.d.ts +0 -69
  106. package/dist/browser/PayloadHasher-browser.d.ts.map +0 -1
  107. package/dist/node/PayloadHasher-browser.d.cts +0 -69
  108. package/dist/node/PayloadHasher-browser.d.cts.map +0 -1
  109. package/dist/node/PayloadHasher-browser.d.mts +0 -69
  110. package/dist/node/PayloadHasher-browser.d.mts.map +0 -1
  111. package/dist/node/PayloadHasher-browser.d.ts +0 -69
  112. package/dist/node/PayloadHasher-browser.d.ts.map +0 -1
  113. package/src/PayloadHasher-browser.ts +0 -248
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index-browser.ts","../../src/PayloadHasher-browser.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.ts"],"sourcesContent":["export * from './PayloadHasher-browser'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { Semaphore } from 'async-mutex'\nimport shajs from 'sha.js'\nimport { spawn, Worker } from 'threads'\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'])\nconst maxHashThreads = 8\nconst maxListenersPerThread = 1\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly jsHashThreads: any[] = []\n static readonly jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n\n static lastJsThreadUsed: number\n static lastSubtleThreadUsed: number\n static lastWasmThreadUsed: number\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly subtleHashThreads: any[] = []\n static readonly subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static warnIfUsingJsHash = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly wasmHashThreads: any[] = []\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static readonly wasmSupport = wasmSupportStatic\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 await this.jsSemaphore.acquire()\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n try {\n if (this.jsHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/jsHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = jsHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.jsHashThreads.push(worker)\n }\n let threadToUse = this.lastJsThreadUsed === undefined ? 0 : this.lastJsThreadUsed + 1\n if (threadToUse >= this.jsHashThreads.length) {\n threadToUse = 0\n }\n this.lastJsThreadUsed = threadToUse\n\n return await this.jsHashThreads[threadToUse].hash(data)\n } finally {\n this.jsSemaphore.release()\n }\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 await this.subtleSemaphore.acquire()\n try {\n if (this.subtleHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/subtleHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = subtleHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.subtleHashThreads.push(worker)\n }\n let threadToUse = this.lastSubtleThreadUsed === undefined ? 0 : this.lastSubtleThreadUsed + 1\n if (threadToUse >= this.subtleHashThreads.length) {\n threadToUse = 0\n }\n this.lastSubtleThreadUsed = threadToUse\n\n return await this.subtleHashThreads[threadToUse].hash(data)\n } finally {\n this.subtleSemaphore.release()\n }\n }\n\n static async wasmHash(data: string) {\n await this.wasmSemaphore.acquire()\n try {\n if (this.wasmHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/wasmHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = wasmHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.wasmHashThreads.push(worker)\n }\n let threadToUse = this.lastWasmThreadUsed === undefined ? 0 : this.lastWasmThreadUsed + 1\n if (threadToUse >= this.wasmHashThreads.length) {\n threadToUse = 0\n }\n this.lastWasmThreadUsed = threadToUse\n\n return await this.wasmHashThreads[threadToUse].hash(data)\n } finally {\n this.wasmSemaphore.release()\n }\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"],"mappings":"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","names":["import_object","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","maxHashThreads","maxListenersPerThread","PayloadHasher","ObjectWrapper","allowSubtle","jsHashThreads","jsSemaphore","Semaphore","lastJsThreadUsed","lastSubtleThreadUsed","lastWasmThreadUsed","subtleHashThreads","subtleSemaphore","warnIfUsingJsHash","wasmHashThreads","wasmInitialized","initialize","wasmSemaphore","wasmSupport","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","acquire","console","warn","length","w","Worker","URL","url","code","jsHashFunc","slice","fromSource","worker","spawn","push","threadToUse","release","json","payload","meta","jsonPayload","JSON","stringify","subtleHashFunc","wasmHashFunc"]}
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/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.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 { WasmSupport } from '@xyo-network/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 allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _jsHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _wasmHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n\n private static get jsHashPool() {\n return (this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc))\n }\n\n private static get subtleHashPool() {\n return (this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc))\n }\n\n private static get wasmHashPool() {\n return (this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc))\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 return await this.jsHashPool.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 return await this.subtleHashPool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n return await this.wasmHashPool.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.ts', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash.ts', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash.ts', 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","allowSubtle","createBrowserWorker","createNodeWorker","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","console","warn","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","size","Pool","spawn","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher-browser';
1
+ export { BrowserPayloadHasher as PayloadHasher } from './BrowserPayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC9E,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher-browser';
1
+ export { BrowserPayloadHasher as PayloadHasher } from './BrowserPayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC9E,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher-browser';
1
+ export { BrowserPayloadHasher as PayloadHasher } from './BrowserPayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC9E,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -8,13 +8,41 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
8
8
  throw Error('Dynamic require of "' + x + '" is not supported');
9
9
  });
10
10
 
11
- // src/PayloadHasher-browser.ts
11
+ // src/createBrowserWorker.ts
12
+ import { Worker } from "threads";
13
+ var createBrowserWorker = /* @__PURE__ */ __name((url) => {
14
+ try {
15
+ return new Worker(url);
16
+ } catch {
17
+ return;
18
+ }
19
+ }, "createBrowserWorker");
20
+
21
+ // src/createNodeWorker.ts
22
+ import { Worker as Worker2 } from "threads";
23
+ var createNodeWorker = /* @__PURE__ */ __name((func) => {
24
+ try {
25
+ const code = func?.toString().slice(6) ?? "";
26
+ const w = new Worker2(
27
+ code,
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ {
30
+ fromSource: true
31
+ }
32
+ );
33
+ return w;
34
+ } catch {
35
+ return;
36
+ }
37
+ }, "createNodeWorker");
38
+
39
+ // src/PayloadHasher.ts
40
+ import { assertEx as assertEx2 } from "@xylabs/assert";
12
41
  import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
13
42
  import { ObjectWrapper } from "@xylabs/object";
14
43
  import { WasmSupport } from "@xyo-network/wasm";
15
- import { Semaphore } from "async-mutex";
16
44
  import shajs from "sha.js";
17
- import { spawn, Worker } from "threads";
45
+ import { Pool, spawn } from "threads";
18
46
 
19
47
  // src/removeEmptyFields.ts
20
48
  import { typeOf } from "@xylabs/typeof";
@@ -109,32 +137,41 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
109
137
  });
110
138
  }, "wasmHashFunc");
111
139
 
112
- // src/PayloadHasher-browser.ts
140
+ // src/PayloadHasher.ts
113
141
  var wasmSupportStatic = new WasmSupport([
114
142
  "bigInt"
115
143
  ]);
116
- var maxHashThreads = 8;
117
- var maxListenersPerThread = 1;
118
144
  var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
119
145
  static {
120
146
  __name(this, "PayloadHasher");
121
147
  }
122
148
  static allowSubtle = true;
123
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
124
- static jsHashThreads = [];
125
- static jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread);
126
- static lastJsThreadUsed;
127
- static lastSubtleThreadUsed;
128
- static lastWasmThreadUsed;
129
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
- static subtleHashThreads = [];
131
- static subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread);
149
+ static createBrowserWorker;
150
+ static createNodeWorker;
151
+ static jsHashWorkerUrl;
152
+ static subtleHashWorkerUrl;
132
153
  static warnIfUsingJsHash = true;
133
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
- static wasmHashThreads = [];
154
+ static wasmHashWorkerUrl;
135
155
  static wasmInitialized = wasmSupportStatic.initialize();
136
- static wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread);
137
156
  static wasmSupport = wasmSupportStatic;
157
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
+ static _jsHashPool;
159
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
+ static _subtleHashPool;
161
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
+ static _wasmHashPool;
163
+ static get jsHashPool() {
164
+ return this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc);
165
+ }
166
+ static get subtleHashPool() {
167
+ return this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc);
168
+ }
169
+ static get wasmHashPool() {
170
+ return this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc);
171
+ }
172
+ static createWorker(url, func) {
173
+ return assertEx2(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), "Unable to create worker");
174
+ }
138
175
  static async filterExcludeByHash(objs = [], hash) {
139
176
  const hashes = Array.isArray(hash) ? hash : [
140
177
  hash
@@ -210,37 +247,10 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
210
247
  return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
211
248
  }
212
249
  static async jsHash(data) {
213
- await this.jsSemaphore.acquire();
214
250
  if (_PayloadHasher.warnIfUsingJsHash) {
215
251
  console.warn("Using jsHash [No subtle or wasm?]");
216
252
  }
217
- try {
218
- if (this.jsHashThreads.length < maxHashThreads) {
219
- let w;
220
- try {
221
- w = new Worker(new URL("worker/jsHash.js", import.meta.url));
222
- } catch {
223
- const code = jsHashFunc.toString().slice(6);
224
- w = new Worker(
225
- code,
226
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
- {
228
- fromSource: true
229
- }
230
- );
231
- }
232
- const worker = await spawn(w);
233
- this.jsHashThreads.push(worker);
234
- }
235
- let threadToUse = this.lastJsThreadUsed === void 0 ? 0 : this.lastJsThreadUsed + 1;
236
- if (threadToUse >= this.jsHashThreads.length) {
237
- threadToUse = 0;
238
- }
239
- this.lastJsThreadUsed = threadToUse;
240
- return await this.jsHashThreads[threadToUse].hash(data);
241
- } finally {
242
- this.jsSemaphore.release();
243
- }
253
+ return await this.jsHashPool.queue(async (thread) => await thread.hash(data));
244
254
  }
245
255
  /**
246
256
  * Returns a clone of the payload that is JSON safe
@@ -259,64 +269,14 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
259
269
  return JSON.stringify(this.hashFields(obj));
260
270
  }
261
271
  static async subtleHash(data) {
262
- await this.subtleSemaphore.acquire();
263
- try {
264
- if (this.subtleHashThreads.length < maxHashThreads) {
265
- let w;
266
- try {
267
- w = new Worker(new URL("worker/subtleHash.js", import.meta.url));
268
- } catch {
269
- const code = subtleHashFunc.toString().slice(6);
270
- w = new Worker(
271
- code,
272
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
273
- {
274
- fromSource: true
275
- }
276
- );
277
- }
278
- const worker = await spawn(w);
279
- this.subtleHashThreads.push(worker);
280
- }
281
- let threadToUse = this.lastSubtleThreadUsed === void 0 ? 0 : this.lastSubtleThreadUsed + 1;
282
- if (threadToUse >= this.subtleHashThreads.length) {
283
- threadToUse = 0;
284
- }
285
- this.lastSubtleThreadUsed = threadToUse;
286
- return await this.subtleHashThreads[threadToUse].hash(data);
287
- } finally {
288
- this.subtleSemaphore.release();
289
- }
272
+ return await this.subtleHashPool.queue(async (thread) => await thread.hash(data));
290
273
  }
291
274
  static async wasmHash(data) {
292
- await this.wasmSemaphore.acquire();
293
- try {
294
- if (this.wasmHashThreads.length < maxHashThreads) {
295
- let w;
296
- try {
297
- w = new Worker(new URL("worker/wasmHash.js", import.meta.url));
298
- } catch {
299
- const code = wasmHashFunc.toString().slice(6);
300
- w = new Worker(
301
- code,
302
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
303
- {
304
- fromSource: true
305
- }
306
- );
307
- }
308
- const worker = await spawn(w);
309
- this.wasmHashThreads.push(worker);
310
- }
311
- let threadToUse = this.lastWasmThreadUsed === void 0 ? 0 : this.lastWasmThreadUsed + 1;
312
- if (threadToUse >= this.wasmHashThreads.length) {
313
- threadToUse = 0;
314
- }
315
- this.lastWasmThreadUsed = threadToUse;
316
- return await this.wasmHashThreads[threadToUse].hash(data);
317
- } finally {
318
- this.wasmSemaphore.release();
319
- }
275
+ return await this.wasmHashPool.queue(async (thread) => await thread.hash(data));
276
+ }
277
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
278
+ static createWorkerPool(url, func, size = 8) {
279
+ return Pool(() => spawn(this.createWorker(url, func)), size);
320
280
  }
321
281
  async hash() {
322
282
  return await _PayloadHasher.hash(this.obj);
@@ -333,8 +293,40 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
333
293
  return _PayloadHasher.jsonPayload(this.obj, meta);
334
294
  }
335
295
  };
296
+
297
+ // src/BrowserPayloadHasher.ts
298
+ PayloadHasher.createBrowserWorker = createBrowserWorker;
299
+ PayloadHasher.createNodeWorker = createNodeWorker;
300
+ var BrowserPayloadHasher = class extends PayloadHasher {
301
+ static {
302
+ __name(this, "BrowserPayloadHasher");
303
+ }
304
+ static createBrowserWorker = createBrowserWorker;
305
+ static createNodeWorker = createNodeWorker;
306
+ static jsHashWorkerUrl = (() => {
307
+ try {
308
+ return new URL("worker/jsHash.ts", import.meta.url);
309
+ } catch {
310
+ return;
311
+ }
312
+ })();
313
+ static subtleHashWorkerUrl = (() => {
314
+ try {
315
+ return new URL("worker/subtleHash.ts", import.meta.url);
316
+ } catch {
317
+ return;
318
+ }
319
+ })();
320
+ static wasmHashWorkerUrl = (() => {
321
+ try {
322
+ return new URL("worker/wasmHash.ts", import.meta.url);
323
+ } catch {
324
+ return;
325
+ }
326
+ })();
327
+ };
336
328
  export {
337
- PayloadHasher,
329
+ BrowserPayloadHasher as PayloadHasher,
338
330
  deepBy,
339
331
  deepOmitPrefixedFields,
340
332
  deepPickUnderscoreFields,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PayloadHasher-browser.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { Semaphore } from 'async-mutex'\nimport shajs from 'sha.js'\nimport { spawn, Worker } from 'threads'\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'])\nconst maxHashThreads = 8\nconst maxListenersPerThread = 1\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly jsHashThreads: any[] = []\n static readonly jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n\n static lastJsThreadUsed: number\n static lastSubtleThreadUsed: number\n static lastWasmThreadUsed: number\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly subtleHashThreads: any[] = []\n static readonly subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static warnIfUsingJsHash = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly wasmHashThreads: any[] = []\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static readonly wasmSupport = wasmSupportStatic\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 await this.jsSemaphore.acquire()\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n try {\n if (this.jsHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/jsHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = jsHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.jsHashThreads.push(worker)\n }\n let threadToUse = this.lastJsThreadUsed === undefined ? 0 : this.lastJsThreadUsed + 1\n if (threadToUse >= this.jsHashThreads.length) {\n threadToUse = 0\n }\n this.lastJsThreadUsed = threadToUse\n\n return await this.jsHashThreads[threadToUse].hash(data)\n } finally {\n this.jsSemaphore.release()\n }\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 await this.subtleSemaphore.acquire()\n try {\n if (this.subtleHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/subtleHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = subtleHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.subtleHashThreads.push(worker)\n }\n let threadToUse = this.lastSubtleThreadUsed === undefined ? 0 : this.lastSubtleThreadUsed + 1\n if (threadToUse >= this.subtleHashThreads.length) {\n threadToUse = 0\n }\n this.lastSubtleThreadUsed = threadToUse\n\n return await this.subtleHashThreads[threadToUse].hash(data)\n } finally {\n this.subtleSemaphore.release()\n }\n }\n\n static async wasmHash(data: string) {\n await this.wasmSemaphore.acquire()\n try {\n if (this.wasmHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/wasmHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = wasmHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.wasmHashThreads.push(worker)\n }\n let threadToUse = this.lastWasmThreadUsed === undefined ? 0 : this.lastWasmThreadUsed + 1\n if (threadToUse >= this.wasmHashThreads.length) {\n threadToUse = 0\n }\n this.lastWasmThreadUsed = threadToUse\n\n return await this.wasmHashThreads[threadToUse].hash(data)\n } finally {\n this.wasmSemaphore.release()\n }\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"],"mappings":";;;;;;;;;;;AAAA,SAASA,QAAcC,0BAA0B;AACjD,SAAsBC,qBAAqB;AAC3C,SAASC,mBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,OAAOC,WAAW;AAClB,SAASC,OAAOC,cAAc;;;ACJ9B,SAASC,cAAc;AAEhB,IAAMC,oBAAoB,wBAAwBC,QAAAA;AACvD,MAAIA,QAAQ,QAAQC,MAAMC,QAAQF,GAAAA;AAAM,WAAOA;AAE/C,QAAMG,YAAuB,CAAC;AAC9B,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQP,GAAAA,GAAM;AAC9C,QAAIQ,OAAOH,KAAAA,MAAW,UAAU;AAC9BF,gBAAUC,GAAAA,IAAOL,kBAAkBM,KAAAA;IACrC,WAAWA,UAAUI,QAAW;AAC9BN,gBAAUC,GAAAA,IAAOC;IACnB;EACF;AACA,SAAOF;AACT,GAZiC;;;ACHjC,SAASO,gBAAgB;AACzB,SAASC,WAAWC,OAAOC,QAAQC,cAAc;AACjD,SAAsBC,gBAAgB;AAI/B,IAAMC,SAAS,wBAAwBC,KAAQC,WAAgCC,SAAAA;AACpF,MAAIC,MAAMC,QAAQJ,GAAAA,GAAM;AACtB,WAAOA;EACT;AAGA,QAAMK,cAAcC,OAAUN,KAAKO,QAAAA;AAGnC,QAAMC,aAAaF,OAAUN,KAAK,CAACS,UAAU,CAACF,SAASE,KAAAA,CAAAA;AAEvD,QAAMC,gBAAgBC,OAAON,aAAaJ,SAAAA;AAC1C,QAAMW,mBAAmBD,OAAOH,YAAYP,SAAAA;AAE5C,QAAMY,mBAAmBC,UAAUJ,eAAe,CAACV,SAAWD,OAAOC,MAAKC,WAAWC,IAAAA,CAAAA;AAErF,SAAOa,MAAM,CAAC,GAAGH,kBAAkBC,gBAAAA;AACrC,GAjBsB;AAmBf,IAAMG,yBAAyB,wBAAwBhB,KAAQiB,WAAAA;AACpE,SAAOlB,OACLC,KACA,CAACkB,GAAGC,QAAAA;AACFC,aAAS,OAAOD,QAAQ,UAAU,MAAM,qBAAqBA,GAAAA,KAAQ,OAAOA,GAAAA,GAAM;AAClF,WAAOA,IAAIE,WAAWJ,MAAAA;EACxB,GACAN,MAAAA;AAEJ,GATsC;AAW/B,IAAMW,2BAA2B,wBAAwBtB,QAAAA;AAC9D,SAAOD,OACLC,KACA,CAACkB,GAAGC,QAAAA;AACFC,aAAS,OAAOD,QAAQ,UAAU,MAAM,qBAAqBA,GAAAA,KAAQ,OAAOA,GAAAA,GAAM;AAClF,WAAOA,IAAIE,WAAW,GAAA;EACxB,GACAf,MAAAA;AAEJ,GATwC;;;ACpCxC,SAAiCiB,YAAAA,iBAAgB;AAGjD,IAAMC,UAAU,wBAACC,UAAAA;AACf,SAAOC,UAASD,KAAAA,IAASE,WAAWF,KAAAA,IAASA;AAC/C,GAFgB;AAIT,IAAME,aAAa,wBAAwBC,QAAAA;AAChD,QAAMC,SAAoB,CAAC;AAC3B,QAAMC,OAAOC,OAAOD,KAAKF,GAAAA;AACzB,aAAWI,OAAOF,KAAKG,KAAI,GAAI;AAC7BJ,WAAOG,GAAAA,IAAOR,QAAQI,IAAII,GAAAA,CAAI;EAChC;AACA,SAAOH;AACT,GAP0B;;;ACNnB,IAAMK,aAAa,6BAAA;AACxB,QAAMC,SAAQC,UAAQ,QAAA;AACtB,QAAM,EAAEC,QAAAA,QAAM,IAAKD,UAAQ,aAAA;AAE3B,QAAM,EAAEE,OAAM,IAAKF,UAAQ,gBAAA;AAE3BE,SAAO;IACLC,KAAKC,MAAY;AACf,aAAOH,QAAOF,OAAM,QAAA,EAAUM,OAAOD,IAAAA,EAAME,OAAM,EAAGC,SAAS,KAAA,GAAQ,IAAA;IACvE;EACF,CAAA;AACF,GAX0B;;;ACAnB,IAAMC,iBAAiB,6BAAA;AAC5B,QAAM,EAAEC,OAAM,IAAKC,UAAQ,kBAAA;AAE3B,QAAM,EAAEC,OAAM,IAAKD,UAAQ,gBAAA;AAE3BC,SAAO;IACL,MAAMC,KAAKC,MAAiB;AAC1B,aAAO,MAAMJ,OAAOK,OAAO,WAAWD,IAAAA;IACxC;EACF,CAAA;AACF,GAV8B;;;ACAvB,IAAME,eAAe,6BAAA;AAC1B,QAAM,EAAEC,OAAM,IAAKC,UAAQ,WAAA;AAC3B,QAAM,EAAEC,QAAAA,QAAM,IAAKD,UAAQ,aAAA;AAE3B,QAAM,EAAEE,OAAM,IAAKF,UAAQ,gBAAA;AAE3BE,SAAO;IACL,MAAMC,KAAKC,MAAY;AACrB,aAAOH,QAAO,MAAMF,OAAOK,IAAAA,GAAO,IAAA;IACpC;EACF,CAAA;AACF,GAX4B;;;ANW5B,IAAMC,oBAAoB,IAAIC,YAAY;EAAC;CAAS;AACpD,IAAMC,iBAAiB;AACvB,IAAMC,wBAAwB;AAEvB,IAAMC,gBAAN,MAAMA,uBAA2DC,cAAAA;EAhBxE,OAgBwEA;;;EACtE,OAAOC,cAAc;;EAGrB,OAAgBC,gBAAuB,CAAA;EACvC,OAAgBC,cAAc,IAAIC,UAAUP,iBAAiBC,qBAAAA;EAE7D,OAAOO;EACP,OAAOC;EACP,OAAOC;;EAGP,OAAgBC,oBAA2B,CAAA;EAC3C,OAAgBC,kBAAkB,IAAIL,UAAUP,iBAAiBC,qBAAAA;EACjE,OAAOY,oBAAoB;;EAE3B,OAAgBC,kBAAyB,CAAA;EAEzC,OAAgBC,kBAAkBjB,kBAAkBkB,WAAU;EAC9D,OAAgBC,gBAAgB,IAAIV,UAAUP,iBAAiBC,qBAAAA;EAC/D,OAAgBiB,cAAcpB;EAE9B,aAAaqB,oBAA2CC,OAAY,CAAA,GAAIC,MAAmC;AACzG,UAAMC,SAASC,MAAMC,QAAQH,IAAAA,IAAQA,OAAO;MAACA;;AAC7C,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOM,OAAO,CAAC,CAACC,GAAGC,OAAAA,MAAa,CAACN,OAAOO,SAASD,OAAAA,CAAAA,GAAWE,IAAI,CAACC,SAASA,KAAK,CAAA,CAAE;EAChH;EAEA,aAAaC,oBAA2CZ,OAAY,CAAA,GAAIC,MAAmC;AACzG,UAAMC,SAASC,MAAMC,QAAQH,IAAAA,IAAQA,OAAO;MAACA;;AAC7C,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOM,OAAO,CAAC,CAACC,GAAGC,OAAAA,MAAaN,OAAOO,SAASD,OAAAA,CAAAA,GAAWE,IAAI,CAACC,SAASA,KAAK,CAAA,CAAE;EAC/G;EAEA,aAAaE,WAAkCb,OAAY,CAAA,GAAIC,MAAoC;AACjG,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOc,KAAK,CAAC,CAACP,GAAGC,OAAAA,MAAaA,YAAYP,IAAAA,IAAQ,CAAA;EACjF;;;;;;EAOA,aAAaA,KAA4Bc,KAAuB;AAC9D,UAAMC,eAAe,KAAKC,oBAAoBF,GAAAA;AAE9C,QAAIjC,eAAcE,aAAa;AAC7B,UAAI;AACF,cAAMkC,MAAM,IAAIC,YAAAA;AAChB,cAAMC,OAAOF,IAAIG,OAAOL,YAAAA;AACxB,cAAMM,YAAY,MAAM,KAAKC,WAAWH,IAAAA;AACxC,eAAOI,mBAAmBF,WAAW;UAAEG,WAAW;QAAI,CAAA;MACxD,QAAQ;AACN3C,uBAAcE,cAAc;MAC9B;IACF;AAEA,UAAM,KAAKW;AACX,QAAI,KAAKG,YAAY4B,YAAY;AAC/B,UAAI;AACF,eAAO,KAAKC,SAASX,YAAAA;MACvB,QAAQ;AACN,aAAKlB,YAAY8B,YAAY;MAC/B;IACF;AACA,WAAO,MAAM,KAAKC,OAAOb,YAAAA;EAC3B;EAEA,OAAOc,WAAkCf,KAAW;AAClD,WAAOgB,WAAWC,kBAAkBC,uBAAuBlB,KAAK,GAAA,CAAA,CAAA;EAClE;;;;;;EAOA,aAAaV,UAAiCL,MAAiC;AAC7E,WAAO,MAAMkC,QAAQC,IAAInC,KAAKU,IAA0B,OAAOK,QAAQ;MAACA;MAAK,MAAMjC,eAAcmB,KAAKc,GAAAA;KAAK,CAAA;EAC7G;;;;;;EAOA,OAAOqB,SAAgCrB,KAAc;AACnD,WAAOsB,OAAOC,MAAM,QAAA,EAAUC,OAAO,KAAKtB,oBAAoBF,GAAAA,CAAAA,EAAMyB,OAAM,EAAGC,SAAS,KAAA,GAAQ,IAAA;EAChG;;;;;;EAOA,aAAavC,OAA8BF,MAAyC;AAClF,WAAOA,OAAO,MAAMkC,QAAQC,IAAInC,KAAKU,IAAI,CAACK,QAAQ,KAAKd,KAAKc,GAAAA,CAAAA,CAAAA,IAAS2B;EACvE;EAEA,aAAab,OAAOT,MAAc;AAChC,UAAM,KAAKlC,YAAYyD,QAAO;AAC9B,QAAI7D,eAAcW,mBAAmB;AACnCmD,cAAQC,KAAK,mCAAA;IACf;AACA,QAAI;AACF,UAAI,KAAK5D,cAAc6D,SAASlE,gBAAgB;AAC9C,YAAImE;AACJ,YAAI;AAEFA,cAAI,IAAIC,OAAO,IAAIC,IAAI,oBAAoB,YAAYC,GAAG,CAAA;QAC5D,QAAQ;AAEN,gBAAMC,OAAOC,WAAWX,SAAQ,EAAGY,MAAM,CAAA;AACzCN,cAAI,IAAIC;YACNG;;YAEA;cAAEG,YAAY;YAAK;UAAA;QAEvB;AACA,cAAMC,SAAS,MAAMC,MAAMT,CAAAA;AAC3B,aAAK9D,cAAcwE,KAAKF,MAAAA;MAC1B;AACA,UAAIG,cAAc,KAAKtE,qBAAqBsD,SAAY,IAAI,KAAKtD,mBAAmB;AACpF,UAAIsE,eAAe,KAAKzE,cAAc6D,QAAQ;AAC5CY,sBAAc;MAChB;AACA,WAAKtE,mBAAmBsE;AAExB,aAAO,MAAM,KAAKzE,cAAcyE,WAAAA,EAAazD,KAAKmB,IAAAA;IACpD,UAAA;AACE,WAAKlC,YAAYyE,QAAO;IAC1B;EACF;;;;;;;EAQA,OAAOC,KAA4BC,SAAYC,OAAO,OAAU;AAC9D,WAAO/B,WAAWC,kBAAkB8B,OAAOD,UAAU5B,uBAAuB4B,SAAS,GAAA,CAAA,CAAA;EACvF;;EAGA,OAAOE,YAAmCF,SAAYC,OAAO,OAAU;AACrE,WAAO,KAAKF,KAAKC,SAASC,IAAAA;EAC5B;EAEA,OAAO7C,oBAA2CF,KAAQ;AACxD,WAAOiD,KAAKC,UAAU,KAAKnC,WAAWf,GAAAA,CAAAA;EACxC;EAEA,aAAaQ,WAAWH,MAAwC;AAC9D,UAAM,KAAK5B,gBAAgBmD,QAAO;AAClC,QAAI;AACF,UAAI,KAAKpD,kBAAkBuD,SAASlE,gBAAgB;AAClD,YAAImE;AACJ,YAAI;AAEFA,cAAI,IAAIC,OAAO,IAAIC,IAAI,wBAAwB,YAAYC,GAAG,CAAA;QAChE,QAAQ;AAEN,gBAAMC,OAAOe,eAAezB,SAAQ,EAAGY,MAAM,CAAA;AAC7CN,cAAI,IAAIC;YACNG;;YAEA;cAAEG,YAAY;YAAK;UAAA;QAEvB;AACA,cAAMC,SAAS,MAAMC,MAAMT,CAAAA;AAC3B,aAAKxD,kBAAkBkE,KAAKF,MAAAA;MAC9B;AACA,UAAIG,cAAc,KAAKrE,yBAAyBqD,SAAY,IAAI,KAAKrD,uBAAuB;AAC5F,UAAIqE,eAAe,KAAKnE,kBAAkBuD,QAAQ;AAChDY,sBAAc;MAChB;AACA,WAAKrE,uBAAuBqE;AAE5B,aAAO,MAAM,KAAKnE,kBAAkBmE,WAAAA,EAAazD,KAAKmB,IAAAA;IACxD,UAAA;AACE,WAAK5B,gBAAgBmE,QAAO;IAC9B;EACF;EAEA,aAAahC,SAASP,MAAc;AAClC,UAAM,KAAKvB,cAAc8C,QAAO;AAChC,QAAI;AACF,UAAI,KAAKjD,gBAAgBoD,SAASlE,gBAAgB;AAChD,YAAImE;AACJ,YAAI;AAEFA,cAAI,IAAIC,OAAO,IAAIC,IAAI,sBAAsB,YAAYC,GAAG,CAAA;QAC9D,QAAQ;AAEN,gBAAMC,OAAOgB,aAAa1B,SAAQ,EAAGY,MAAM,CAAA;AAC3CN,cAAI,IAAIC;YACNG;;YAEA;cAAEG,YAAY;YAAK;UAAA;QAEvB;AACA,cAAMC,SAAS,MAAMC,MAAMT,CAAAA;AAC3B,aAAKrD,gBAAgB+D,KAAKF,MAAAA;MAC5B;AACA,UAAIG,cAAc,KAAKpE,uBAAuBoD,SAAY,IAAI,KAAKpD,qBAAqB;AACxF,UAAIoE,eAAe,KAAKhE,gBAAgBoD,QAAQ;AAC9CY,sBAAc;MAChB;AACA,WAAKpE,qBAAqBoE;AAE1B,aAAO,MAAM,KAAKhE,gBAAgBgE,WAAAA,EAAazD,KAAKmB,IAAAA;IACtD,UAAA;AACE,WAAKvB,cAAc8D,QAAO;IAC5B;EACF;EAEA,MAAM1D,OAAsB;AAC1B,WAAO,MAAMnB,eAAcmB,KAAK,KAAKc,GAAG;EAC1C;EAEAqB,WAAiB;AACf,WAAOtD,eAAcsD,SAAS,KAAKrB,GAAG;EACxC;;;;;;EAOAgD,YAAYD,OAAO,OAAU;AAC3B,WAAOhF,eAAciF,YAAY,KAAKhD,KAAK+C,IAAAA;EAC7C;AACF;","names":["asHash","hexFromArrayBuffer","ObjectWrapper","WasmSupport","Semaphore","shajs","spawn","Worker","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","maxHashThreads","maxListenersPerThread","PayloadHasher","ObjectWrapper","allowSubtle","jsHashThreads","jsSemaphore","Semaphore","lastJsThreadUsed","lastSubtleThreadUsed","lastWasmThreadUsed","subtleHashThreads","subtleSemaphore","warnIfUsingJsHash","wasmHashThreads","wasmInitialized","initialize","wasmSemaphore","wasmSupport","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","acquire","console","warn","length","w","Worker","URL","url","code","jsHashFunc","slice","fromSource","worker","spawn","push","threadToUse","release","json","payload","meta","jsonPayload","JSON","stringify","subtleHashFunc","wasmHashFunc"]}
1
+ {"version":3,"sources":["../../src/createBrowserWorker.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.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 { WasmSupport } from '@xyo-network/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 allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _jsHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _wasmHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n\n private static get jsHashPool() {\n return (this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc))\n }\n\n private static get subtleHashPool() {\n return (this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc))\n }\n\n private static get wasmHashPool() {\n return (this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc))\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 return await this.jsHashPool.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 return await this.subtleHashPool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n return await this.wasmHashPool.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.ts', import.meta.url)\n } catch {\n return\n }\n })()\n static override subtleHashWorkerUrl = (() => {\n try {\n return new URL('worker/subtleHash.ts', import.meta.url)\n } catch {\n return\n }\n })()\n static override wasmHashWorkerUrl = (() => {\n try {\n return new URL('worker/wasmHash.ts', 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","WasmSupport","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","allowSubtle","createBrowserWorker","createNodeWorker","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","console","warn","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","size","Pool","spawn","PayloadHasher","createBrowserWorker","createNodeWorker","BrowserPayloadHasher","jsHashWorkerUrl","URL","url","subtleHashWorkerUrl","wasmHashWorkerUrl"]}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher';
1
+ export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher';
1
+ export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './PayloadHasher';
1
+ export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher';
2
2
  export * from './removeEmptyFields';
3
3
  export * from './removeFields';
4
4
  export * from './sortFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { PayloadHasher } from './PayloadHasher';
2
+ export declare class BrowserPayloadHasher extends PayloadHasher {
3
+ static createBrowserWorker: (url?: URL | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
4
+ static createNodeWorker: (func?: (() => unknown) | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
5
+ static jsHashWorkerUrl: URL | undefined;
6
+ static subtleHashWorkerUrl: URL | undefined;
7
+ static wasmHashWorkerUrl: URL | undefined;
8
+ }
9
+ //# sourceMappingURL=BrowserPayloadHasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserPayloadHasher.d.ts","sourceRoot":"","sources":["../../src/BrowserPayloadHasher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAO/C,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAgB,mBAAmB,kGAAsB;IACzD,OAAgB,gBAAgB,+GAAmB;IACnD,OAAgB,eAAe,kBAM3B;IACJ,OAAgB,mBAAmB,kBAM/B;IACJ,OAAgB,iBAAiB,kBAM7B;CACL"}
@@ -0,0 +1,9 @@
1
+ import { PayloadHasher } from './PayloadHasher';
2
+ export declare class BrowserPayloadHasher extends PayloadHasher {
3
+ static createBrowserWorker: (url?: URL | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
4
+ static createNodeWorker: (func?: (() => unknown) | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
5
+ static jsHashWorkerUrl: URL | undefined;
6
+ static subtleHashWorkerUrl: URL | undefined;
7
+ static wasmHashWorkerUrl: URL | undefined;
8
+ }
9
+ //# sourceMappingURL=BrowserPayloadHasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserPayloadHasher.d.ts","sourceRoot":"","sources":["../../src/BrowserPayloadHasher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAO/C,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAgB,mBAAmB,kGAAsB;IACzD,OAAgB,gBAAgB,+GAAmB;IACnD,OAAgB,eAAe,kBAM3B;IACJ,OAAgB,mBAAmB,kBAM/B;IACJ,OAAgB,iBAAiB,kBAM7B;CACL"}
@@ -0,0 +1,9 @@
1
+ import { PayloadHasher } from './PayloadHasher';
2
+ export declare class BrowserPayloadHasher extends PayloadHasher {
3
+ static createBrowserWorker: (url?: URL | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
4
+ static createNodeWorker: (func?: (() => unknown) | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
5
+ static jsHashWorkerUrl: URL | undefined;
6
+ static subtleHashWorkerUrl: URL | undefined;
7
+ static wasmHashWorkerUrl: URL | undefined;
8
+ }
9
+ //# sourceMappingURL=BrowserPayloadHasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserPayloadHasher.d.ts","sourceRoot":"","sources":["../../src/BrowserPayloadHasher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAO/C,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAgB,mBAAmB,kGAAsB;IACzD,OAAgB,gBAAgB,+GAAmB;IACnD,OAAgB,eAAe,kBAM3B;IACJ,OAAgB,mBAAmB,kBAM/B;IACJ,OAAgB,iBAAiB,kBAM7B;CACL"}
@@ -0,0 +1,5 @@
1
+ import { PayloadHasher } from './PayloadHasher';
2
+ export declare class NodePayloadHasher extends PayloadHasher {
3
+ static createNodeWorker: (func?: (() => unknown) | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
4
+ }
5
+ //# sourceMappingURL=NodePayloadHasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodePayloadHasher.d.ts","sourceRoot":"","sources":["../../src/NodePayloadHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAI/C,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAgB,gBAAgB,+GAAmB;CACpD"}
@@ -0,0 +1,5 @@
1
+ import { PayloadHasher } from './PayloadHasher';
2
+ export declare class NodePayloadHasher extends PayloadHasher {
3
+ static createNodeWorker: (func?: (() => unknown) | undefined) => import("threads/dist/types/master").WorkerImplementation | undefined;
4
+ }
5
+ //# sourceMappingURL=NodePayloadHasher.d.ts.map