@xyo-network/hash 2.110.9 → 2.110.11

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 (175) hide show
  1. package/dist/browser/PayloadHasher.d.cts +0 -4
  2. package/dist/browser/PayloadHasher.d.cts.map +1 -1
  3. package/dist/browser/PayloadHasher.d.mts +0 -4
  4. package/dist/browser/PayloadHasher.d.mts.map +1 -1
  5. package/dist/browser/PayloadHasher.d.ts +0 -4
  6. package/dist/browser/PayloadHasher.d.ts.map +1 -1
  7. package/dist/browser/createNodeWorker.d.cts.map +1 -1
  8. package/dist/browser/createNodeWorker.d.mts.map +1 -1
  9. package/dist/browser/createNodeWorker.d.ts.map +1 -1
  10. package/dist/browser/index-browser.cjs +72 -136
  11. package/dist/browser/index-browser.cjs.map +1 -1
  12. package/dist/browser/index-browser.js +72 -127
  13. package/dist/browser/index-browser.js.map +1 -1
  14. package/dist/browser/removeEmptyFields.d.cts.map +1 -1
  15. package/dist/browser/removeEmptyFields.d.mts.map +1 -1
  16. package/dist/browser/removeEmptyFields.d.ts.map +1 -1
  17. package/dist/browser/worker/index.cjs +4 -18
  18. package/dist/browser/worker/index.cjs.map +1 -1
  19. package/dist/browser/worker/index.d.cts +0 -1
  20. package/dist/browser/worker/index.d.cts.map +1 -1
  21. package/dist/browser/worker/index.d.mts +0 -1
  22. package/dist/browser/worker/index.d.mts.map +1 -1
  23. package/dist/browser/worker/index.d.ts +0 -1
  24. package/dist/browser/worker/index.d.ts.map +1 -1
  25. package/dist/browser/worker/index.js +4 -19
  26. package/dist/browser/worker/index.js.map +1 -1
  27. package/dist/browser/worker/subtleHash-bundle.js +92 -91
  28. package/dist/browser/worker/subtleHash.cjs.map +1 -1
  29. package/dist/browser/worker/subtleHash.js.map +1 -1
  30. package/dist/browser/worker/subtleHashNode.cjs +2 -3
  31. package/dist/browser/worker/subtleHashNode.cjs.map +1 -1
  32. package/dist/browser/worker/subtleHashNode.d.cts.map +1 -1
  33. package/dist/browser/worker/subtleHashNode.d.mts.map +1 -1
  34. package/dist/browser/worker/subtleHashNode.d.ts.map +1 -1
  35. package/dist/browser/worker/subtleHashNode.js +2 -4
  36. package/dist/browser/worker/subtleHashNode.js.map +1 -1
  37. package/dist/browser/worker/wasmHash-bundle.js +94 -93
  38. package/dist/browser/worker/wasmHash.cjs.map +1 -1
  39. package/dist/browser/worker/wasmHash.js.map +1 -1
  40. package/dist/browser/worker/wasmHashNode.cjs +2 -3
  41. package/dist/browser/worker/wasmHashNode.cjs.map +1 -1
  42. package/dist/browser/worker/wasmHashNode.js +2 -4
  43. package/dist/browser/worker/wasmHashNode.js.map +1 -1
  44. package/dist/neutral/PayloadHasher.d.cts +0 -4
  45. package/dist/neutral/PayloadHasher.d.cts.map +1 -1
  46. package/dist/neutral/PayloadHasher.d.mts +0 -4
  47. package/dist/neutral/PayloadHasher.d.mts.map +1 -1
  48. package/dist/neutral/PayloadHasher.d.ts +0 -4
  49. package/dist/neutral/PayloadHasher.d.ts.map +1 -1
  50. package/dist/neutral/createNodeWorker.d.cts.map +1 -1
  51. package/dist/neutral/createNodeWorker.d.mts.map +1 -1
  52. package/dist/neutral/createNodeWorker.d.ts.map +1 -1
  53. package/dist/neutral/index.cjs +72 -136
  54. package/dist/neutral/index.cjs.map +1 -1
  55. package/dist/neutral/index.js +72 -127
  56. package/dist/neutral/index.js.map +1 -1
  57. package/dist/neutral/removeEmptyFields.d.cts.map +1 -1
  58. package/dist/neutral/removeEmptyFields.d.mts.map +1 -1
  59. package/dist/neutral/removeEmptyFields.d.ts.map +1 -1
  60. package/dist/neutral/worker/index.d.cts +0 -1
  61. package/dist/neutral/worker/index.d.cts.map +1 -1
  62. package/dist/neutral/worker/index.d.mts +0 -1
  63. package/dist/neutral/worker/index.d.mts.map +1 -1
  64. package/dist/neutral/worker/index.d.ts +0 -1
  65. package/dist/neutral/worker/index.d.ts.map +1 -1
  66. package/dist/neutral/worker/subtleHashNode.d.cts.map +1 -1
  67. package/dist/neutral/worker/subtleHashNode.d.mts.map +1 -1
  68. package/dist/neutral/worker/subtleHashNode.d.ts.map +1 -1
  69. package/dist/node/PayloadHasher.d.cts +0 -4
  70. package/dist/node/PayloadHasher.d.cts.map +1 -1
  71. package/dist/node/PayloadHasher.d.mts +0 -4
  72. package/dist/node/PayloadHasher.d.mts.map +1 -1
  73. package/dist/node/PayloadHasher.d.ts +0 -4
  74. package/dist/node/PayloadHasher.d.ts.map +1 -1
  75. package/dist/node/createNodeWorker.d.cts.map +1 -1
  76. package/dist/node/createNodeWorker.d.mts.map +1 -1
  77. package/dist/node/createNodeWorker.d.ts.map +1 -1
  78. package/dist/node/index.cjs +97 -161
  79. package/dist/node/index.cjs.map +1 -1
  80. package/dist/node/index.js +97 -152
  81. package/dist/node/index.js.map +1 -1
  82. package/dist/node/removeEmptyFields.d.cts.map +1 -1
  83. package/dist/node/removeEmptyFields.d.mts.map +1 -1
  84. package/dist/node/removeEmptyFields.d.ts.map +1 -1
  85. package/dist/node/worker/index.cjs +4 -19
  86. package/dist/node/worker/index.cjs.map +1 -1
  87. package/dist/node/worker/index.d.cts +0 -1
  88. package/dist/node/worker/index.d.cts.map +1 -1
  89. package/dist/node/worker/index.d.mts +0 -1
  90. package/dist/node/worker/index.d.mts.map +1 -1
  91. package/dist/node/worker/index.d.ts +0 -1
  92. package/dist/node/worker/index.d.ts.map +1 -1
  93. package/dist/node/worker/index.js +4 -19
  94. package/dist/node/worker/index.js.map +1 -1
  95. package/dist/node/worker/subtleHash.cjs.map +1 -1
  96. package/dist/node/worker/subtleHash.js.map +1 -1
  97. package/dist/node/worker/subtleHashNode.cjs +2 -3
  98. package/dist/node/worker/subtleHashNode.cjs.map +1 -1
  99. package/dist/node/worker/subtleHashNode.d.cts.map +1 -1
  100. package/dist/node/worker/subtleHashNode.d.mts.map +1 -1
  101. package/dist/node/worker/subtleHashNode.d.ts.map +1 -1
  102. package/dist/node/worker/subtleHashNode.js +2 -4
  103. package/dist/node/worker/subtleHashNode.js.map +1 -1
  104. package/dist/node/worker/wasmHash.cjs.map +1 -1
  105. package/dist/node/worker/wasmHash.js.map +1 -1
  106. package/dist/node/worker/wasmHashNode.cjs +2 -3
  107. package/dist/node/worker/wasmHashNode.cjs.map +1 -1
  108. package/dist/node/worker/wasmHashNode.js +2 -4
  109. package/dist/node/worker/wasmHashNode.js.map +1 -1
  110. package/package.json +14 -17
  111. package/src/PayloadHasher.ts +2 -40
  112. package/src/createNodeWorker.ts +1 -2
  113. package/src/globals.d.ts +0 -1
  114. package/src/removeEmptyFields.ts +5 -1
  115. package/src/worker/index.ts +0 -1
  116. package/src/worker/subtleHash.ts +0 -1
  117. package/src/worker/subtleHashNode.ts +0 -1
  118. package/src/worker/wasmHash.ts +0 -1
  119. package/src/worker/wasmHashNode.ts +1 -1
  120. package/xy.config.ts +0 -1
  121. package/dist/browser/worker/jsHash-bundle.js +0 -5641
  122. package/dist/browser/worker/jsHash.cjs +0 -34
  123. package/dist/browser/worker/jsHash.cjs.map +0 -1
  124. package/dist/browser/worker/jsHash.d.cts +0 -2
  125. package/dist/browser/worker/jsHash.d.cts.map +0 -1
  126. package/dist/browser/worker/jsHash.d.mts +0 -2
  127. package/dist/browser/worker/jsHash.d.mts.map +0 -1
  128. package/dist/browser/worker/jsHash.d.ts +0 -2
  129. package/dist/browser/worker/jsHash.d.ts.map +0 -1
  130. package/dist/browser/worker/jsHash.js +0 -10
  131. package/dist/browser/worker/jsHash.js.map +0 -1
  132. package/dist/browser/worker/jsHashNode.cjs +0 -37
  133. package/dist/browser/worker/jsHashNode.cjs.map +0 -1
  134. package/dist/browser/worker/jsHashNode.d.cts +0 -2
  135. package/dist/browser/worker/jsHashNode.d.cts.map +0 -1
  136. package/dist/browser/worker/jsHashNode.d.mts +0 -2
  137. package/dist/browser/worker/jsHashNode.d.mts.map +0 -1
  138. package/dist/browser/worker/jsHashNode.d.ts +0 -2
  139. package/dist/browser/worker/jsHashNode.d.ts.map +0 -1
  140. package/dist/browser/worker/jsHashNode.js +0 -24
  141. package/dist/browser/worker/jsHashNode.js.map +0 -1
  142. package/dist/neutral/worker/jsHash.d.cts +0 -2
  143. package/dist/neutral/worker/jsHash.d.cts.map +0 -1
  144. package/dist/neutral/worker/jsHash.d.mts +0 -2
  145. package/dist/neutral/worker/jsHash.d.mts.map +0 -1
  146. package/dist/neutral/worker/jsHash.d.ts +0 -2
  147. package/dist/neutral/worker/jsHash.d.ts.map +0 -1
  148. package/dist/neutral/worker/jsHashNode.d.cts +0 -2
  149. package/dist/neutral/worker/jsHashNode.d.cts.map +0 -1
  150. package/dist/neutral/worker/jsHashNode.d.mts +0 -2
  151. package/dist/neutral/worker/jsHashNode.d.mts.map +0 -1
  152. package/dist/neutral/worker/jsHashNode.d.ts +0 -2
  153. package/dist/neutral/worker/jsHashNode.d.ts.map +0 -1
  154. package/dist/node/worker/jsHash.cjs +0 -34
  155. package/dist/node/worker/jsHash.cjs.map +0 -1
  156. package/dist/node/worker/jsHash.d.cts +0 -2
  157. package/dist/node/worker/jsHash.d.cts.map +0 -1
  158. package/dist/node/worker/jsHash.d.mts +0 -2
  159. package/dist/node/worker/jsHash.d.mts.map +0 -1
  160. package/dist/node/worker/jsHash.d.ts +0 -2
  161. package/dist/node/worker/jsHash.d.ts.map +0 -1
  162. package/dist/node/worker/jsHash.js +0 -10
  163. package/dist/node/worker/jsHash.js.map +0 -1
  164. package/dist/node/worker/jsHashNode.cjs +0 -41
  165. package/dist/node/worker/jsHashNode.cjs.map +0 -1
  166. package/dist/node/worker/jsHashNode.d.cts +0 -2
  167. package/dist/node/worker/jsHashNode.d.cts.map +0 -1
  168. package/dist/node/worker/jsHashNode.d.mts +0 -2
  169. package/dist/node/worker/jsHashNode.d.mts.map +0 -1
  170. package/dist/node/worker/jsHashNode.d.ts +0 -2
  171. package/dist/node/worker/jsHashNode.d.ts.map +0 -1
  172. package/dist/node/worker/jsHashNode.js +0 -24
  173. package/dist/node/worker/jsHashNode.js.map +0 -1
  174. package/src/worker/jsHash.ts +0 -10
  175. package/src/worker/jsHashNode.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/hasEmptyFields.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts","../../src/removeFields.ts"],"sourcesContent":["export * from './hasEmptyFields.js'\nexport { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher.js'\nexport * from './removeEmptyFields.js'\nexport * from './removeFields.js'\nexport * from './sortFields.js'\n","import { EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const hasEmptyFields = <T extends EmptyObject>(obj: T): boolean => {\n if (obj === null || Array.isArray(obj)) return false\n\n if (obj === undefined || Object.keys(obj).length === 0) return true\n\n for (const [value] of Object.values(obj)) {\n if (typeOf(value) === 'object') {\n if (hasEmptyFields(value as Record<string, unknown>)) return true\n } else if (value === undefined) {\n return true\n }\n }\n return false\n}\n","import { Worker } from '@xylabs/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 { omitBy } from '@xylabs/lodash'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { ModuleThread, Pool, spawn, Worker } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields.js'\nimport { sortFields } from './sortFields.js'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker/index.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerFunction = ((...args: any[]) => any) | (() => any)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n 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(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * 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 : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async (thread) => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n 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 json(meta = false): T {\n return PayloadHasher.json(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 { 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('@xylabs/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('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-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('@xylabs/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.js'\nimport { PayloadHasher } from './PayloadHasher.js'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\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"],"mappings":"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","names":["hasEmptyFields","obj","Array","isArray","undefined","Object","keys","length","value","values","typeOf","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_object","import_threads","import_typeof","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","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","omitByPredicate","prefix","_","key","assertEx","startsWith","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","debug","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","omitBy","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","import_assert","import_lodash","import_object","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/hasEmptyFields.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts","../../src/removeFields.ts"],"sourcesContent":["export * from './hasEmptyFields.js'\nexport { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher.js'\nexport * from './removeEmptyFields.js'\nexport * from './removeFields.js'\nexport * from './sortFields.js'\n","import { EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const hasEmptyFields = <T extends EmptyObject>(obj: T): boolean => {\n if (obj === null || Array.isArray(obj)) return false\n\n if (obj === undefined || Object.keys(obj).length === 0) return true\n\n for (const [value] of Object.values(obj)) {\n if (typeOf(value) === 'object') {\n if (hasEmptyFields(value as Record<string, unknown>)) return true\n } else if (value === undefined) {\n return true\n }\n }\n return false\n}\n","import { Worker } from '@xylabs/threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n return new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { omitBy } from '@xylabs/lodash'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { ModuleThread, Pool, spawn, Worker } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\n\nimport { removeEmptyFields } from './removeEmptyFields.js'\nimport { sortFields } from './sortFields.js'\nimport { subtleHashFunc, wasmHashFunc } from './worker/index.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerFunction = ((...args: any[]) => any) | (() => any)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n })()\n\n static 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 subtleHashPool() {\n if (!this.allowHashPooling || this._subtleHashPool === null) {\n return null\n }\n try {\n return (this._subtleHashPool =\n this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null))\n } catch {\n console.warn('Creating subtle hash worker failed')\n this._subtleHashPool = null\n return null\n }\n }\n\n private static get wasmHashPool() {\n if (!this.allowHashPooling || this._wasmHashPool === null) {\n return null\n }\n try {\n return (this._wasmHashPool =\n this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null))\n } catch {\n console.warn('Creating wasm hash worker failed')\n this._wasmHashPool = null\n return null\n }\n }\n\n static createWorker(url?: URL, func?: () => unknown) {\n if (url) console.debug(`createWorker: ${url}`)\n return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), () => 'Unable to create worker')\n }\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n throw new Error('No wasm hashing available')\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async (thread) => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n json(meta = false): T {\n return PayloadHasher.json(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null) return obj\n\n if (Array.isArray(obj)) {\n return obj.map((value) => (typeof value === 'object' ? removeEmptyFields(value) : value)) as T\n }\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { 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 subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker.js'\nimport { PayloadHasher } from './PayloadHasher.js'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAAuB;AAEhB,IAAM,iBAAiB,CAAwB,QAAoB;AACxE,MAAI,QAAQ,QAAQ,MAAM,QAAQ,GAAG,EAAG,QAAO;AAE/C,MAAI,QAAQ,UAAa,OAAO,KAAK,GAAG,EAAE,WAAW,EAAG,QAAO;AAE/D,aAAW,CAAC,KAAK,KAAK,OAAO,OAAO,GAAG,GAAG;AACxC,YAAI,sBAAO,KAAK,MAAM,UAAU;AAC9B,UAAI,eAAe,KAAgC,EAAG,QAAO;AAAA,IAC/D,WAAW,UAAU,QAAW;AAC9B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;AChBA,qBAAuB;AAEhB,IAAM,mBAAmB,CAAC,SAAyB;AACxD,MAAI;AACF,UAAM,QAAO,6BAAM,WAAW,MAAM,OAAM;AAC1C,WAAO,IAAI;AAAA,MACT;AAAA;AAAA,MAEA,EAAE,YAAY,KAAK;AAAA,IACrB;AAAA,EACF,QAAQ;AACN;AAAA,EACF;AACF;;;ACbA,oBAAyB;AACzB,iBAAiD;AACjD,oBAAuB;AACvB,IAAAA,iBAA2C;AAC3C,sBAAuB;AACvB,IAAAC,kBAAkD;AAClD,kBAA4B;AAC5B,uBAAuB;;;ACNvB,IAAAC,iBAAuB;AAEhB,IAAM,oBAAoB,CAAwB,QAAc;AACrE,MAAI,QAAQ,KAAM,QAAO;AAEzB,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,UAAW,OAAO,UAAU,WAAW,kBAAkB,KAAK,IAAI,KAAM;AAAA,EAC1F;AAEA,QAAM,YAAuB,CAAC;AAC9B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAI,uBAAO,KAAK,MAAM,UAAU;AAC9B,gBAAU,GAAG,IAAI,kBAAkB,KAAgC;AAAA,IACrE,WAAW,UAAU,QAAW;AAC9B,gBAAU,GAAG,IAAI;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;;;ACnBA,oBAAiD;AAGjD,IAAM,UAAU,CAAC,UAAmB;AAClC,aAAO,wBAAS,KAAK,IAAI,WAAW,KAAK,IAAI;AAC/C;AAEO,IAAM,aAAa,CAAwB,QAAW;AAC3D,QAAM,SAAoB,CAAC;AAC3B,QAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,aAAW,OAAO,KAAK,KAAK,GAAG;AAC7B,WAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AAAA,EAChC;AACA,SAAO;AACT;;;ACbO,IAAM,iBAAiB,MAAM;AAClC,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,kBAAkB;AAC7C,QAAM,EAAE,OAAO,IAAI,QAAQ,wBAAwB;AAEnD,SAAO;AAAA,IACL,MAAM,KAAK,MAAmB;AAC5B,aAAO,MAAMA,QAAO,OAAO,WAAW,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AACH;;;ACTO,IAAM,eAAe,MAAM;AAChC,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,WAAW;AACtC,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,aAAa;AAExC,QAAM,EAAE,OAAO,IAAI,QAAQ,wBAAwB;AAEnD,SAAO;AAAA,IACL,MAAM,KAAK,MAAc;AACvB,aAAOA,QAAO,MAAMD,QAAO,IAAI,GAAG,IAAI;AAAA,IACxC;AAAA,EACF,CAAC;AACH;;;AJOA,IAAM,oBAAoB,IAAI,wBAAY,CAAC,QAAQ,CAAC;AAEpD,IAAM,kBAAkB,CAAC,WAAmB,CAAC,GAAY,QAAgB;AACvE,8BAAS,OAAO,QAAQ,UAAU,MAAM,qBAAqB,GAAG,KAAK,OAAO,GAAG,GAAG;AAClF,SAAO,IAAI,WAAW,MAAM;AAC9B;AAEO,IAAM,gBAAN,MAAM,uBAA2D,6BAAiB;AAAA,EACvF,OAAO,mBAAmB;AAAA,EAC1B,OAAO,cAAc;AAAA,EACrB,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO,eAAe,MAAM;AAC1B,eAAW,MAAM,WAAW,OAAO,CAAC;AACpC,QAAI,WAAW,IAAI,SAAS;AAC1B,cAAQ,KAAK,gDAAgD;AAAA,IAC/D;AAAA,EACF,GAAG;AAAA,EAEH,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO,oBAAoB;AAAA,EAE3B,OAAO;AAAA,EAEP,OAAgB,kBAAkB,kBAAkB,WAAW;AAAA,EAC/D,OAAgB,cAAc;AAAA;AAAA;AAAA,EAI9B,OAAe;AAAA;AAAA,EAGf,OAAe;AAAA;AAAA,EAEf,OAAe;AAAA,EAEf,WAAmB,iBAAiB;AAClC,QAAI,CAAC,KAAK,oBAAoB,KAAK,oBAAoB,MAAM;AAC3D,aAAO;AAAA,IACT;AACA,QAAI;AACF,aAAQ,KAAK,kBACX,KAAK,oBAAoB,KAAK,sBAAsB,KAAK,iBAAiB,KAAK,qBAAqB,cAAc,IAAI;AAAA,IAC1H,QAAQ;AACN,cAAQ,KAAK,oCAAoC;AACjD,WAAK,kBAAkB;AACvB,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,WAAmB,eAAe;AAChC,QAAI,CAAC,KAAK,oBAAoB,KAAK,kBAAkB,MAAM;AACzD,aAAO;AAAA,IACT;AACA,QAAI;AACF,aAAQ,KAAK,gBACX,KAAK,kBAAkB,KAAK,oBAAoB,KAAK,iBAAiB,KAAK,mBAAmB,YAAY,IAAI;AAAA,IAClH,QAAQ;AACN,cAAQ,KAAK,kCAAkC;AAC/C,WAAK,gBAAgB;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,aAAa,KAAW,MAAsB;AAtFvD;AAuFI,QAAI,IAAK,SAAQ,MAAM,iBAAiB,GAAG,EAAE;AAC7C,eAAO,0BAAS,UAAK,wBAAL,8BAA2B,WAAQ,UAAK,qBAAL,8BAAwB,QAAO,MAAM,yBAAyB;AAAA,EACnH;AAAA,EAEA,aAAa,oBAA2C,OAAY,CAAC,GAAG,MAAmC;AA3F7G;AA4FI,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,SAAS,OAAO,CAAC,MAA9E,mBAAiF,IAAI,CAAC,SAAS,KAAK,CAAC;AAAA,EAC/G;AAAA,EAEA,aAAa,oBAA2C,OAAY,CAAC,GAAG,MAAmC;AAhG7G;AAiGI,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,OAAO,SAAS,OAAO,CAAC,MAA7E,mBAAgF,IAAI,CAAC,SAAS,KAAK,CAAC;AAAA,EAC9G;AAAA,EAEA,aAAa,WAAkC,OAAY,CAAC,GAAG,MAAoC;AArGrG;AAsGI,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,OAAO,MAAM,YAAY,IAAI,MAAnE,mBAAuE;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,KAA4B,KAAuB;AAC9D,UAAM,eAAe,KAAK,oBAAoB,GAAG;AAEjD,QAAI,eAAc,aAAa;AAC7B,UAAI;AACF,cAAM,MAAM,IAAI,YAAY;AAC5B,cAAM,OAAO,IAAI,OAAO,YAAY;AACpC,cAAM,YAAY,MAAM,KAAK,WAAW,IAAI;AAC5C,mBAAO,+BAAmB,WAAW,EAAE,WAAW,IAAI,CAAC;AAAA,MACzD,QAAQ;AACN,uBAAc,cAAc;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,KAAK;AACX,QAAI,KAAK,YAAY,YAAY;AAC/B,UAAI;AACF,eAAO,KAAK,SAAS,YAAY;AAAA,MACnC,QAAQ;AACN,aAAK,YAAY,YAAY;AAAA,MAC/B;AAAA,IACF;AACA,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAAA,EAEA,OAAO,WAAkC,KAAW;AAClD,WAAO,WAAW,sBAAkB,sBAAO,KAAK,gBAAgB,GAAG,CAAC,CAAC,CAAC;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,UAAiC,MAAiC;AAC7E,WAAO,MAAM,QAAQ,IAAI,KAAK,IAAwB,OAAO,QAAQ,CAAC,KAAK,MAAM,eAAc,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAA8B,MAAyC;AAClF,WAAO,OAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAA4B,SAAY,OAAO,OAAU;AAC9D,WAAO,WAAW,kBAAkB,OAAO,cAAU,sBAAO,SAAS,gBAAgB,GAAG,CAAC,CAAC,CAAC;AAAA,EAC7F;AAAA;AAAA,EAGA,OAAO,YAAmC,SAAY,OAAO,OAAU;AACrE,WAAO,KAAK,KAAK,SAAS,IAAI;AAAA,EAChC;AAAA,EAEA,OAAO,oBAA2C,KAAQ;AACxD,WAAO,KAAK,UAAU,KAAK,WAAW,GAAG,CAAC;AAAA,EAC5C;AAAA,EAEA,aAAa,WAAW,MAAwC;AAC9D,UAAM,OAAO,KAAK;AAClB,WAAO,SAAS,OAAO,MAAM,uBAAO,OAAO,WAAW,IAAI,IAAI,MAAM,KAAK,MAAM,OAAO,WAAW,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,EAC1H;AAAA,EAEA,aAAa,SAAS,MAAc;AAClC,UAAM,OAAO,KAAK;AAClB,WAAO,SAAS,WAAO,mBAAO,UAAM,yBAAO,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,OAAO,WAAW,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,EAChH;AAAA;AAAA,EAGA,OAAe,iBAA8C,KAAW,MAAsB,OAAO,GAAG;AACtG,QAAI,IAAK,SAAQ,MAAM,qBAAqB,GAAG,EAAE;AACjD,UAAM,aAAa,UAAM,uBAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAC9D,eAAO,sBAAK,YAAY,IAAI;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAsB;AAC1B,WAAO,MAAM,eAAc,KAAK,KAAK,GAAG;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,OAAO,OAAU;AACpB,WAAO,eAAc,KAAK,KAAK,KAAK,IAAI;AAAA,EAC1C;AACF;;;AK1MA,cAAc,mBAAmB;AAE1B,IAAM,oBAAN,cAAgC,cAAc;AAAA,EACnD,OAAgB,mBAAmB;AACrC;;;ACPA,IAAAE,iBAAyB;AACzB,IAAAC,iBAAiD;AACjD,IAAAC,iBAAsC;AAG/B,IAAM,SAAS,CAAwB,KAAQ,WAAgC,SAA2C;AAC/H,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAc,uBAAU,KAAK,uBAAQ;AAG3C,QAAM,iBAAa,uBAAU,KAAK,CAAC,UAAU,KAAC,yBAAS,KAAK,CAAC;AAE7D,QAAM,oBAAgB,uBAAO,aAAa,SAAS;AACnD,QAAM,uBAAmB,uBAAO,YAAY,SAAS;AAErD,QAAM,uBAAmB,0BAAU,eAAe,CAACC,SAAW,OAAOA,MAAK,WAAW,IAAI,CAAC;AAE1F,aAAO,sBAAM,CAAC,GAAG,kBAAkB,gBAAgB;AACrD;AAEO,IAAM,yBAAyB,CAAwB,KAAQ,WAAsB;AAC1F,SAAO;AAAA,IACL;AAAA,IACA,CAAC,GAAG,QAAQ;AACV,mCAAS,OAAO,QAAQ,UAAU,MAAM,qBAAqB,GAAG,KAAK,OAAO,GAAG,GAAG;AAClF,aAAO,IAAI,WAAW,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CAAwB,QAAc;AAC5E,SAAO;AAAA,IACL;AAAA,IACA,CAAC,GAAG,QAAQ;AACV,mCAAS,OAAO,QAAQ,UAAU,MAAM,qBAAqB,GAAG,KAAK,OAAO,GAAG,GAAG;AAClF,aAAO,IAAI,WAAW,GAAG;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AACF;","names":["import_object","import_threads","import_typeof","subtle","sha256","asHash","import_assert","import_lodash","import_object","obj"]}
@@ -1,17 +1,13 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
1
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
5
2
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
6
3
  }) : x)(function(x) {
7
4
  if (typeof require !== "undefined") return require.apply(this, arguments);
8
5
  throw Error('Dynamic require of "' + x + '" is not supported');
9
6
  });
10
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
7
 
12
8
  // src/hasEmptyFields.ts
13
9
  import { typeOf } from "@xylabs/typeof";
14
- var hasEmptyFields = /* @__PURE__ */ __name((obj) => {
10
+ var hasEmptyFields = (obj) => {
15
11
  if (obj === null || Array.isArray(obj)) return false;
16
12
  if (obj === void 0 || Object.keys(obj).length === 0) return true;
17
13
  for (const [value] of Object.values(obj)) {
@@ -22,25 +18,22 @@ var hasEmptyFields = /* @__PURE__ */ __name((obj) => {
22
18
  }
23
19
  }
24
20
  return false;
25
- }, "hasEmptyFields");
21
+ };
26
22
 
27
23
  // src/createNodeWorker.ts
28
24
  import { Worker } from "@xylabs/threads";
29
- var createNodeWorker = /* @__PURE__ */ __name((func) => {
25
+ var createNodeWorker = (func) => {
30
26
  try {
31
27
  const code = (func == null ? void 0 : func.toString().slice(6)) ?? "";
32
- const w = new Worker(
28
+ return new Worker(
33
29
  code,
34
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- {
36
- fromSource: true
37
- }
31
+ { fromSource: true }
38
32
  );
39
- return w;
40
33
  } catch {
41
34
  return;
42
35
  }
43
- }, "createNodeWorker");
36
+ };
44
37
 
45
38
  // src/PayloadHasher.ts
46
39
  import { assertEx } from "@xylabs/assert";
@@ -51,12 +44,14 @@ import { subtle } from "@xylabs/platform";
51
44
  import { Pool, spawn } from "@xylabs/threads";
52
45
  import { WasmSupport } from "@xyo-network/wasm";
53
46
  import { sha256 } from "hash-wasm";
54
- import shajs from "sha.js";
55
47
 
56
48
  // src/removeEmptyFields.ts
57
49
  import { typeOf as typeOf2 } from "@xylabs/typeof";
58
- var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
59
- if (obj === null || Array.isArray(obj)) return obj;
50
+ var removeEmptyFields = (obj) => {
51
+ if (obj === null) return obj;
52
+ if (Array.isArray(obj)) {
53
+ return obj.map((value) => typeof value === "object" ? removeEmptyFields(value) : value);
54
+ }
60
55
  const newObject = {};
61
56
  for (const [key, value] of Object.entries(obj)) {
62
57
  if (typeOf2(value) === "object") {
@@ -66,36 +61,24 @@ var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
66
61
  }
67
62
  }
68
63
  return newObject;
69
- }, "removeEmptyFields");
64
+ };
70
65
 
71
66
  // src/sortFields.ts
72
67
  import { isObject } from "@xylabs/object";
73
- var subSort = /* @__PURE__ */ __name((value) => {
68
+ var subSort = (value) => {
74
69
  return isObject(value) ? sortFields(value) : value;
75
- }, "subSort");
76
- var sortFields = /* @__PURE__ */ __name((obj) => {
70
+ };
71
+ var sortFields = (obj) => {
77
72
  const result = {};
78
73
  const keys = Object.keys(obj);
79
74
  for (const key of keys.sort()) {
80
75
  result[key] = subSort(obj[key]);
81
76
  }
82
77
  return result;
83
- }, "sortFields");
84
-
85
- // src/worker/jsHashNode.ts
86
- var jsHashFunc = /* @__PURE__ */ __name(() => {
87
- const shajs2 = __require("sha.js");
88
- const { asHash: asHash2 } = __require("@xylabs/hex");
89
- const { expose } = __require("@xylabs/threads/worker");
90
- expose({
91
- hash(data) {
92
- return asHash2(shajs2("sha256").update(data).digest().toString("hex"), true);
93
- }
94
- });
95
- }, "jsHashFunc");
78
+ };
96
79
 
97
80
  // src/worker/subtleHashNode.ts
98
- var subtleHashFunc = /* @__PURE__ */ __name(() => {
81
+ var subtleHashFunc = () => {
99
82
  const { subtle: subtle2 } = __require("@xylabs/platform");
100
83
  const { expose } = __require("@xylabs/threads/worker");
101
84
  expose({
@@ -103,10 +86,10 @@ var subtleHashFunc = /* @__PURE__ */ __name(() => {
103
86
  return await subtle2.digest("SHA-256", data);
104
87
  }
105
88
  });
106
- }, "subtleHashFunc");
89
+ };
107
90
 
108
91
  // src/worker/wasmHashNode.ts
109
- var wasmHashFunc = /* @__PURE__ */ __name(() => {
92
+ var wasmHashFunc = () => {
110
93
  const { sha256: sha2562 } = __require("hash-wasm");
111
94
  const { asHash: asHash2 } = __require("@xylabs/hex");
112
95
  const { expose } = __require("@xylabs/threads/worker");
@@ -115,29 +98,38 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
115
98
  return asHash2(await sha2562(data), true);
116
99
  }
117
100
  });
118
- }, "wasmHashFunc");
101
+ };
119
102
 
120
103
  // src/PayloadHasher.ts
121
- var wasmSupportStatic = new WasmSupport([
122
- "bigInt"
123
- ]);
124
- var omitByPredicate = /* @__PURE__ */ __name((prefix) => (_, key) => {
104
+ var wasmSupportStatic = new WasmSupport(["bigInt"]);
105
+ var omitByPredicate = (prefix) => (_, key) => {
125
106
  assertEx(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
126
107
  return key.startsWith(prefix);
127
- }, "omitByPredicate");
128
- var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
129
- static get jsHashPool() {
130
- if (!this.allowHashPooling || this._jsHashPool === null) {
131
- return null;
132
- }
133
- try {
134
- return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
135
- } catch {
136
- console.warn("Creating js hash worker failed");
137
- this._jsHashPool = null;
138
- return null;
108
+ };
109
+ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
110
+ static allowHashPooling = true;
111
+ static allowSubtle = true;
112
+ static createBrowserWorker;
113
+ static createNodeWorker;
114
+ static initialized = (() => {
115
+ globalThis.xyo = globalThis.xyo ?? {};
116
+ if (globalThis.xyo.hashing) {
117
+ console.warn("Two static instances of PayloadHasher detected");
139
118
  }
140
- }
119
+ })();
120
+ static jsHashWorkerUrl;
121
+ static subtleHashWorkerUrl;
122
+ static warnIfUsingJsHash = true;
123
+ static wasmHashWorkerUrl;
124
+ static wasmInitialized = wasmSupportStatic.initialize();
125
+ static wasmSupport = wasmSupportStatic;
126
+ // These get set to null if they fail to create and then we just don't use workers - needed for storybook
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ static _jsHashPool;
129
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
+ static _subtleHashPool;
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ static _wasmHashPool;
141
133
  static get subtleHashPool() {
142
134
  if (!this.allowHashPooling || this._subtleHashPool === null) {
143
135
  return null;
@@ -169,16 +161,12 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
169
161
  }
170
162
  static async filterExcludeByHash(objs = [], hash) {
171
163
  var _a;
172
- const hashes = Array.isArray(hash) ? hash : [
173
- hash
174
- ];
164
+ const hashes = Array.isArray(hash) ? hash : [hash];
175
165
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
176
166
  }
177
167
  static async filterIncludeByHash(objs = [], hash) {
178
168
  var _a;
179
- const hashes = Array.isArray(hash) ? hash : [
180
- hash
181
- ];
169
+ const hashes = Array.isArray(hash) ? hash : [hash];
182
170
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
183
171
  }
184
172
  static async findByHash(objs = [], hash) {
@@ -186,10 +174,10 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
186
174
  return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
187
175
  }
188
176
  /**
189
- * Asynchronously hashes a payload
190
- * @param obj A payload
191
- * @returns The payload hash
192
- */
177
+ * Asynchronously hashes a payload
178
+ * @param obj A payload
179
+ * @returns The payload hash
180
+ */
193
181
  static async hash(obj) {
194
182
  const stringToHash = this.stringifyHashFields(obj);
195
183
  if (_PayloadHasher.allowSubtle) {
@@ -197,9 +185,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
197
185
  const enc = new TextEncoder();
198
186
  const data = enc.encode(stringToHash);
199
187
  const hashArray = await this.subtleHash(data);
200
- return hexFromArrayBuffer(hashArray, {
201
- bitLength: 256
202
- });
188
+ return hexFromArrayBuffer(hashArray, { bitLength: 256 });
203
189
  } catch {
204
190
  _PayloadHasher.allowSubtle = false;
205
191
  }
@@ -212,51 +198,33 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
212
198
  this.wasmSupport.allowWasm = false;
213
199
  }
214
200
  }
215
- return await this.jsHash(stringToHash);
201
+ throw new Error("No wasm hashing available");
216
202
  }
217
203
  static hashFields(obj) {
218
204
  return sortFields(removeEmptyFields(omitBy(obj, omitByPredicate("_"))));
219
205
  }
220
206
  /**
221
- * Creates an array of payload/hash tuples based on the payloads passed in
222
- * @param objs Any array of payloads
223
- * @returns An array of payload/hash tuples
224
- */
207
+ * Creates an array of payload/hash tuples based on the payloads passed in
208
+ * @param objs Any array of payloads
209
+ * @returns An array of payload/hash tuples
210
+ */
225
211
  static async hashPairs(objs) {
226
- return await Promise.all(objs.map(async (obj) => [
227
- obj,
228
- await _PayloadHasher.hash(obj)
229
- ]));
212
+ return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hash(obj)]));
230
213
  }
231
214
  /**
232
- * Synchronously hashes a payload
233
- * @param obj A payload
234
- * @returns The payload hash
235
- */
236
- static hashSync(obj) {
237
- return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
238
- }
239
- /**
240
- * Creates an array of payload hashes based on the payloads passed in
241
- * @param objs Any array of payloads
242
- * @returns An array of payload hashes
243
- */
215
+ * Creates an array of payload hashes based on the payloads passed in
216
+ * @param objs Any array of payloads
217
+ * @returns An array of payload hashes
218
+ */
244
219
  static async hashes(objs) {
245
220
  return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
246
221
  }
247
- static async jsHash(data) {
248
- if (_PayloadHasher.warnIfUsingJsHash) {
249
- console.warn("Using jsHash [No subtle or wasm?]");
250
- }
251
- const pool = this.jsHashPool;
252
- return pool === null ? asHash(shajs("sha256").update(data).digest().toString("hex"), true) : await pool.queue(async (thread) => await thread.hash(data));
253
- }
254
222
  /**
255
- * Returns a clone of the payload that is JSON safe
256
- * @param obj A payload
257
- * @param meta Keeps underscore (meta) fields if set to true
258
- * @returns Returns a clone of the payload that is JSON safe
259
- */
223
+ * Returns a clone of the payload that is JSON safe
224
+ * @param obj A payload
225
+ * @param meta Keeps underscore (meta) fields if set to true
226
+ * @returns Returns a clone of the payload that is JSON safe
227
+ */
260
228
  static json(payload, meta = false) {
261
229
  return sortFields(removeEmptyFields(meta ? payload : omitBy(payload, omitByPredicate("_"))));
262
230
  }
@@ -278,64 +246,33 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
278
246
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
279
247
  static createWorkerPool(url, func, size = 8) {
280
248
  if (url) console.debug(`createWorkerPool: ${url}`);
281
- const createFunc = /* @__PURE__ */ __name(() => spawn(this.createWorker(url, func)), "createFunc");
249
+ const createFunc = () => spawn(this.createWorker(url, func));
282
250
  return Pool(createFunc, size);
283
251
  }
284
252
  async hash() {
285
253
  return await _PayloadHasher.hash(this.obj);
286
254
  }
287
- hashSync() {
288
- return _PayloadHasher.hashSync(this.obj);
289
- }
290
255
  /**
291
- * Returns a clone of the payload that is JSON safe
292
- * @param meta Keeps underscore (meta) fields if set to true
293
- * @returns Returns a clone of the payload that is JSON safe
294
- */
256
+ * Returns a clone of the payload that is JSON safe
257
+ * @param meta Keeps underscore (meta) fields if set to true
258
+ * @returns Returns a clone of the payload that is JSON safe
259
+ */
295
260
  json(meta = false) {
296
261
  return _PayloadHasher.json(this.obj, meta);
297
262
  }
298
263
  };
299
- __name(_PayloadHasher, "PayloadHasher");
300
- __publicField(_PayloadHasher, "allowHashPooling", true);
301
- __publicField(_PayloadHasher, "allowSubtle", true);
302
- __publicField(_PayloadHasher, "createBrowserWorker");
303
- __publicField(_PayloadHasher, "createNodeWorker");
304
- __publicField(_PayloadHasher, "initialized", (() => {
305
- globalThis.xyo = globalThis.xyo ?? {};
306
- if (globalThis.xyo.hashing) {
307
- console.warn("Two static instances of PayloadHasher detected");
308
- }
309
- globalThis.xyo === globalThis.xyo;
310
- })());
311
- __publicField(_PayloadHasher, "jsHashWorkerUrl");
312
- __publicField(_PayloadHasher, "subtleHashWorkerUrl");
313
- __publicField(_PayloadHasher, "warnIfUsingJsHash", true);
314
- __publicField(_PayloadHasher, "wasmHashWorkerUrl");
315
- __publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
316
- __publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
317
- // These get set to null if they fail to create and then we just don't use workers - needed for storybook
318
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
319
- __publicField(_PayloadHasher, "_jsHashPool");
320
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
321
- __publicField(_PayloadHasher, "_subtleHashPool");
322
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
323
- __publicField(_PayloadHasher, "_wasmHashPool");
324
- var PayloadHasher = _PayloadHasher;
325
264
 
326
265
  // src/NodePayloadHasher.ts
327
266
  PayloadHasher.createNodeWorker = createNodeWorker;
328
- var _NodePayloadHasher = class _NodePayloadHasher extends PayloadHasher {
267
+ var NodePayloadHasher = class extends PayloadHasher {
268
+ static createNodeWorker = createNodeWorker;
329
269
  };
330
- __name(_NodePayloadHasher, "NodePayloadHasher");
331
- __publicField(_NodePayloadHasher, "createNodeWorker", createNodeWorker);
332
- var NodePayloadHasher = _NodePayloadHasher;
333
270
 
334
271
  // src/removeFields.ts
335
272
  import { assertEx as assertEx2 } from "@xylabs/assert";
336
273
  import { mapValues, merge, omitBy as omitBy2, pickBy } from "@xylabs/lodash";
337
274
  import { isObject as isObject2 } from "@xylabs/object";
338
- var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
275
+ var deepBy = (obj, predicate, func) => {
339
276
  if (Array.isArray(obj)) {
340
277
  return obj;
341
278
  }
@@ -345,19 +282,27 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
345
282
  const pickedNonObjects = omitBy2(nonObjects, predicate);
346
283
  const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
347
284
  return merge({}, pickedNonObjects, processedObjects);
348
- }, "deepBy");
349
- var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
350
- return deepBy(obj, (_, key) => {
351
- assertEx2(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
352
- return key.startsWith(prefix);
353
- }, omitBy2);
354
- }, "deepOmitPrefixedFields");
355
- var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
356
- return deepBy(obj, (_, key) => {
357
- assertEx2(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
358
- return key.startsWith("_");
359
- }, pickBy);
360
- }, "deepPickUnderscoreFields");
285
+ };
286
+ var deepOmitPrefixedFields = (obj, prefix) => {
287
+ return deepBy(
288
+ obj,
289
+ (_, key) => {
290
+ assertEx2(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
291
+ return key.startsWith(prefix);
292
+ },
293
+ omitBy2
294
+ );
295
+ };
296
+ var deepPickUnderscoreFields = (obj) => {
297
+ return deepBy(
298
+ obj,
299
+ (_, key) => {
300
+ assertEx2(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
301
+ return key.startsWith("_");
302
+ },
303
+ pickBy
304
+ );
305
+ };
361
306
  export {
362
307
  NodePayloadHasher as PayloadHasher,
363
308
  deepBy,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hasEmptyFields.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts","../../src/removeFields.ts"],"sourcesContent":["import { EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const hasEmptyFields = <T extends EmptyObject>(obj: T): boolean => {\n if (obj === null || Array.isArray(obj)) return false\n\n if (obj === undefined || Object.keys(obj).length === 0) return true\n\n for (const [value] of Object.values(obj)) {\n if (typeOf(value) === 'object') {\n if (hasEmptyFields(value as Record<string, unknown>)) return true\n } else if (value === undefined) {\n return true\n }\n }\n return false\n}\n","import { Worker } from '@xylabs/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 { omitBy } from '@xylabs/lodash'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { ModuleThread, Pool, spawn, Worker } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields.js'\nimport { sortFields } from './sortFields.js'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker/index.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerFunction = ((...args: any[]) => any) | (() => any)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n 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(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * 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 : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async (thread) => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n 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 json(meta = false): T {\n return PayloadHasher.json(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 { 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('@xylabs/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('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-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('@xylabs/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.js'\nimport { PayloadHasher } from './PayloadHasher.js'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\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"],"mappings":"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","names":["typeOf","hasEmptyFields","obj","Array","isArray","undefined","Object","keys","length","value","values","typeOf","Worker","createNodeWorker","func","code","toString","slice","w","Worker","fromSource","assertEx","asHash","hexFromArrayBuffer","omitBy","ObjectWrapper","subtle","Pool","spawn","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","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","omitByPredicate","prefix","_","key","assertEx","startsWith","PayloadHasher","ObjectWrapper","jsHashPool","allowHashPooling","_jsHashPool","jsHashWorkerUrl","createWorkerPool","jsHashFunc","console","warn","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","debug","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","omitBy","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","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"]}
1
+ {"version":3,"sources":["../../src/hasEmptyFields.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/sortFields.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts","../../src/removeFields.ts"],"sourcesContent":["import { EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const hasEmptyFields = <T extends EmptyObject>(obj: T): boolean => {\n if (obj === null || Array.isArray(obj)) return false\n\n if (obj === undefined || Object.keys(obj).length === 0) return true\n\n for (const [value] of Object.values(obj)) {\n if (typeOf(value) === 'object') {\n if (hasEmptyFields(value as Record<string, unknown>)) return true\n } else if (value === undefined) {\n return true\n }\n }\n return false\n}\n","import { Worker } from '@xylabs/threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n return new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { omitBy } from '@xylabs/lodash'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { ModuleThread, Pool, spawn, Worker } from '@xylabs/threads'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\n\nimport { removeEmptyFields } from './removeEmptyFields.js'\nimport { sortFields } from './sortFields.js'\nimport { subtleHashFunc, wasmHashFunc } from './worker/index.js'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerFunction = ((...args: any[]) => any) | (() => any)\nexport type WorkerModule<Keys extends string> = {\n [key in Keys]: WorkerFunction\n}\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nconst omitByPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowHashPooling = true\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static initialized = (() => {\n globalThis.xyo = globalThis.xyo ?? {}\n if (globalThis.xyo.hashing) {\n console.warn('Two static instances of PayloadHasher detected')\n }\n })()\n\n static 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 subtleHashPool() {\n if (!this.allowHashPooling || this._subtleHashPool === null) {\n return null\n }\n try {\n return (this._subtleHashPool =\n this._subtleHashPool ?? (this.subtleHashWorkerUrl ? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc) : null))\n } catch {\n console.warn('Creating subtle hash worker failed')\n this._subtleHashPool = null\n return null\n }\n }\n\n private static get wasmHashPool() {\n if (!this.allowHashPooling || this._wasmHashPool === null) {\n return null\n }\n try {\n return (this._wasmHashPool =\n this._wasmHashPool ?? (this.wasmHashWorkerUrl ? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc) : null))\n } catch {\n console.warn('Creating wasm hash worker failed')\n this._wasmHashPool = null\n return null\n }\n }\n\n static createWorker(url?: URL, func?: () => unknown) {\n if (url) console.debug(`createWorker: ${url}`)\n return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), () => 'Unable to create worker')\n }\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n throw new Error('No wasm hashing available')\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(omitBy(obj, omitByPredicate('_')))) as T\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, Hash]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : omitBy(payload, omitByPredicate('_')))) as T\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n const pool = this.subtleHashPool\n return pool === null ? await subtle.digest('SHA-256', data) : await pool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n const pool = this.wasmHashPool\n return pool === null ? asHash(await sha256(data), true) : pool.queue(async (thread) => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n if (url) console.debug(`createWorkerPool: ${url}`)\n const createFunc = () => spawn<T>(this.createWorker(url, func))\n return Pool(createFunc, size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n json(meta = false): T {\n return PayloadHasher.json(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null) return obj\n\n if (Array.isArray(obj)) {\n return obj.map((value) => (typeof value === 'object' ? removeEmptyFields(value) : value)) as T\n }\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { 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 subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n\n const { expose } = require('@xylabs/threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker.js'\nimport { PayloadHasher } from './PayloadHasher.js'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\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"],"mappings":"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","names":["typeOf","subtle","sha256","asHash","assertEx","omitBy","isObject","obj"]}
@@ -1 +1 @@
1
- {"version":3,"file":"removeEmptyFields.d.ts","sourceRoot":"","sources":["../../src/removeEmptyFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGvD,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,WAAW,OAAO,CAAC,KAAG,CAYjE,CAAA"}
1
+ {"version":3,"file":"removeEmptyFields.d.ts","sourceRoot":"","sources":["../../src/removeEmptyFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGvD,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,WAAW,OAAO,CAAC,KAAG,CAgBjE,CAAA"}