@xyo-network/hash 2.110.10 → 2.110.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 (194) hide show
  1. package/dist/browser/BrowserPayloadHasher.d.cts +0 -1
  2. package/dist/browser/BrowserPayloadHasher.d.cts.map +1 -1
  3. package/dist/browser/BrowserPayloadHasher.d.mts +0 -1
  4. package/dist/browser/BrowserPayloadHasher.d.mts.map +1 -1
  5. package/dist/browser/BrowserPayloadHasher.d.ts +0 -1
  6. package/dist/browser/BrowserPayloadHasher.d.ts.map +1 -1
  7. package/dist/browser/PayloadHasher.d.cts +0 -5
  8. package/dist/browser/PayloadHasher.d.cts.map +1 -1
  9. package/dist/browser/PayloadHasher.d.mts +0 -5
  10. package/dist/browser/PayloadHasher.d.mts.map +1 -1
  11. package/dist/browser/PayloadHasher.d.ts +0 -5
  12. package/dist/browser/PayloadHasher.d.ts.map +1 -1
  13. package/dist/browser/createNodeWorker.d.cts.map +1 -1
  14. package/dist/browser/createNodeWorker.d.mts.map +1 -1
  15. package/dist/browser/createNodeWorker.d.ts.map +1 -1
  16. package/dist/browser/index-browser.cjs +72 -144
  17. package/dist/browser/index-browser.cjs.map +1 -1
  18. package/dist/browser/index-browser.js +72 -135
  19. package/dist/browser/index-browser.js.map +1 -1
  20. package/dist/browser/removeEmptyFields.d.cts.map +1 -1
  21. package/dist/browser/removeEmptyFields.d.mts.map +1 -1
  22. package/dist/browser/removeEmptyFields.d.ts.map +1 -1
  23. package/dist/browser/worker/index.cjs +4 -18
  24. package/dist/browser/worker/index.cjs.map +1 -1
  25. package/dist/browser/worker/index.d.cts +0 -1
  26. package/dist/browser/worker/index.d.cts.map +1 -1
  27. package/dist/browser/worker/index.d.mts +0 -1
  28. package/dist/browser/worker/index.d.mts.map +1 -1
  29. package/dist/browser/worker/index.d.ts +0 -1
  30. package/dist/browser/worker/index.d.ts.map +1 -1
  31. package/dist/browser/worker/index.js +4 -19
  32. package/dist/browser/worker/index.js.map +1 -1
  33. package/dist/browser/worker/subtleHash-bundle.js +92 -91
  34. package/dist/browser/worker/subtleHash.cjs.map +1 -1
  35. package/dist/browser/worker/subtleHash.js.map +1 -1
  36. package/dist/browser/worker/subtleHashNode.cjs +2 -3
  37. package/dist/browser/worker/subtleHashNode.cjs.map +1 -1
  38. package/dist/browser/worker/subtleHashNode.d.cts.map +1 -1
  39. package/dist/browser/worker/subtleHashNode.d.mts.map +1 -1
  40. package/dist/browser/worker/subtleHashNode.d.ts.map +1 -1
  41. package/dist/browser/worker/subtleHashNode.js +2 -4
  42. package/dist/browser/worker/subtleHashNode.js.map +1 -1
  43. package/dist/browser/worker/wasmHash-bundle.js +94 -93
  44. package/dist/browser/worker/wasmHash.cjs.map +1 -1
  45. package/dist/browser/worker/wasmHash.js.map +1 -1
  46. package/dist/browser/worker/wasmHashNode.cjs +2 -3
  47. package/dist/browser/worker/wasmHashNode.cjs.map +1 -1
  48. package/dist/browser/worker/wasmHashNode.js +2 -4
  49. package/dist/browser/worker/wasmHashNode.js.map +1 -1
  50. package/dist/neutral/BrowserPayloadHasher.d.cts +0 -1
  51. package/dist/neutral/BrowserPayloadHasher.d.cts.map +1 -1
  52. package/dist/neutral/BrowserPayloadHasher.d.mts +0 -1
  53. package/dist/neutral/BrowserPayloadHasher.d.mts.map +1 -1
  54. package/dist/neutral/BrowserPayloadHasher.d.ts +0 -1
  55. package/dist/neutral/BrowserPayloadHasher.d.ts.map +1 -1
  56. package/dist/neutral/PayloadHasher.d.cts +0 -5
  57. package/dist/neutral/PayloadHasher.d.cts.map +1 -1
  58. package/dist/neutral/PayloadHasher.d.mts +0 -5
  59. package/dist/neutral/PayloadHasher.d.mts.map +1 -1
  60. package/dist/neutral/PayloadHasher.d.ts +0 -5
  61. package/dist/neutral/PayloadHasher.d.ts.map +1 -1
  62. package/dist/neutral/createNodeWorker.d.cts.map +1 -1
  63. package/dist/neutral/createNodeWorker.d.mts.map +1 -1
  64. package/dist/neutral/createNodeWorker.d.ts.map +1 -1
  65. package/dist/neutral/index.cjs +72 -137
  66. package/dist/neutral/index.cjs.map +1 -1
  67. package/dist/neutral/index.js +72 -128
  68. package/dist/neutral/index.js.map +1 -1
  69. package/dist/neutral/removeEmptyFields.d.cts.map +1 -1
  70. package/dist/neutral/removeEmptyFields.d.mts.map +1 -1
  71. package/dist/neutral/removeEmptyFields.d.ts.map +1 -1
  72. package/dist/neutral/worker/index.d.cts +0 -1
  73. package/dist/neutral/worker/index.d.cts.map +1 -1
  74. package/dist/neutral/worker/index.d.mts +0 -1
  75. package/dist/neutral/worker/index.d.mts.map +1 -1
  76. package/dist/neutral/worker/index.d.ts +0 -1
  77. package/dist/neutral/worker/index.d.ts.map +1 -1
  78. package/dist/neutral/worker/subtleHashNode.d.cts.map +1 -1
  79. package/dist/neutral/worker/subtleHashNode.d.mts.map +1 -1
  80. package/dist/neutral/worker/subtleHashNode.d.ts.map +1 -1
  81. package/dist/node/BrowserPayloadHasher.d.cts +0 -1
  82. package/dist/node/BrowserPayloadHasher.d.cts.map +1 -1
  83. package/dist/node/BrowserPayloadHasher.d.mts +0 -1
  84. package/dist/node/BrowserPayloadHasher.d.mts.map +1 -1
  85. package/dist/node/BrowserPayloadHasher.d.ts +0 -1
  86. package/dist/node/BrowserPayloadHasher.d.ts.map +1 -1
  87. package/dist/node/PayloadHasher.d.cts +0 -5
  88. package/dist/node/PayloadHasher.d.cts.map +1 -1
  89. package/dist/node/PayloadHasher.d.mts +0 -5
  90. package/dist/node/PayloadHasher.d.mts.map +1 -1
  91. package/dist/node/PayloadHasher.d.ts +0 -5
  92. package/dist/node/PayloadHasher.d.ts.map +1 -1
  93. package/dist/node/createNodeWorker.d.cts.map +1 -1
  94. package/dist/node/createNodeWorker.d.mts.map +1 -1
  95. package/dist/node/createNodeWorker.d.ts.map +1 -1
  96. package/dist/node/index.cjs +96 -161
  97. package/dist/node/index.cjs.map +1 -1
  98. package/dist/node/index.js +96 -152
  99. package/dist/node/index.js.map +1 -1
  100. package/dist/node/removeEmptyFields.d.cts.map +1 -1
  101. package/dist/node/removeEmptyFields.d.mts.map +1 -1
  102. package/dist/node/removeEmptyFields.d.ts.map +1 -1
  103. package/dist/node/worker/index.cjs +4 -19
  104. package/dist/node/worker/index.cjs.map +1 -1
  105. package/dist/node/worker/index.d.cts +0 -1
  106. package/dist/node/worker/index.d.cts.map +1 -1
  107. package/dist/node/worker/index.d.mts +0 -1
  108. package/dist/node/worker/index.d.mts.map +1 -1
  109. package/dist/node/worker/index.d.ts +0 -1
  110. package/dist/node/worker/index.d.ts.map +1 -1
  111. package/dist/node/worker/index.js +4 -19
  112. package/dist/node/worker/index.js.map +1 -1
  113. package/dist/node/worker/subtleHash.cjs.map +1 -1
  114. package/dist/node/worker/subtleHash.js.map +1 -1
  115. package/dist/node/worker/subtleHashNode.cjs +2 -3
  116. package/dist/node/worker/subtleHashNode.cjs.map +1 -1
  117. package/dist/node/worker/subtleHashNode.d.cts.map +1 -1
  118. package/dist/node/worker/subtleHashNode.d.mts.map +1 -1
  119. package/dist/node/worker/subtleHashNode.d.ts.map +1 -1
  120. package/dist/node/worker/subtleHashNode.js +2 -4
  121. package/dist/node/worker/subtleHashNode.js.map +1 -1
  122. package/dist/node/worker/wasmHash.cjs.map +1 -1
  123. package/dist/node/worker/wasmHash.js.map +1 -1
  124. package/dist/node/worker/wasmHashNode.cjs +2 -3
  125. package/dist/node/worker/wasmHashNode.cjs.map +1 -1
  126. package/dist/node/worker/wasmHashNode.js +2 -4
  127. package/dist/node/worker/wasmHashNode.js.map +1 -1
  128. package/package.json +14 -17
  129. package/src/BrowserPayloadHasher.ts +0 -7
  130. package/src/PayloadHasher.ts +2 -41
  131. package/src/createNodeWorker.ts +1 -2
  132. package/src/globals.d.ts +0 -1
  133. package/src/removeEmptyFields.ts +5 -1
  134. package/src/worker/index.ts +0 -1
  135. package/src/worker/subtleHash.ts +0 -1
  136. package/src/worker/subtleHashNode.ts +0 -1
  137. package/src/worker/wasmHash.ts +0 -1
  138. package/src/worker/wasmHashNode.ts +1 -1
  139. package/xy.config.ts +0 -1
  140. package/dist/browser/worker/jsHash-bundle.js +0 -5641
  141. package/dist/browser/worker/jsHash.cjs +0 -34
  142. package/dist/browser/worker/jsHash.cjs.map +0 -1
  143. package/dist/browser/worker/jsHash.d.cts +0 -2
  144. package/dist/browser/worker/jsHash.d.cts.map +0 -1
  145. package/dist/browser/worker/jsHash.d.mts +0 -2
  146. package/dist/browser/worker/jsHash.d.mts.map +0 -1
  147. package/dist/browser/worker/jsHash.d.ts +0 -2
  148. package/dist/browser/worker/jsHash.d.ts.map +0 -1
  149. package/dist/browser/worker/jsHash.js +0 -10
  150. package/dist/browser/worker/jsHash.js.map +0 -1
  151. package/dist/browser/worker/jsHashNode.cjs +0 -37
  152. package/dist/browser/worker/jsHashNode.cjs.map +0 -1
  153. package/dist/browser/worker/jsHashNode.d.cts +0 -2
  154. package/dist/browser/worker/jsHashNode.d.cts.map +0 -1
  155. package/dist/browser/worker/jsHashNode.d.mts +0 -2
  156. package/dist/browser/worker/jsHashNode.d.mts.map +0 -1
  157. package/dist/browser/worker/jsHashNode.d.ts +0 -2
  158. package/dist/browser/worker/jsHashNode.d.ts.map +0 -1
  159. package/dist/browser/worker/jsHashNode.js +0 -24
  160. package/dist/browser/worker/jsHashNode.js.map +0 -1
  161. package/dist/neutral/worker/jsHash.d.cts +0 -2
  162. package/dist/neutral/worker/jsHash.d.cts.map +0 -1
  163. package/dist/neutral/worker/jsHash.d.mts +0 -2
  164. package/dist/neutral/worker/jsHash.d.mts.map +0 -1
  165. package/dist/neutral/worker/jsHash.d.ts +0 -2
  166. package/dist/neutral/worker/jsHash.d.ts.map +0 -1
  167. package/dist/neutral/worker/jsHashNode.d.cts +0 -2
  168. package/dist/neutral/worker/jsHashNode.d.cts.map +0 -1
  169. package/dist/neutral/worker/jsHashNode.d.mts +0 -2
  170. package/dist/neutral/worker/jsHashNode.d.mts.map +0 -1
  171. package/dist/neutral/worker/jsHashNode.d.ts +0 -2
  172. package/dist/neutral/worker/jsHashNode.d.ts.map +0 -1
  173. package/dist/node/worker/jsHash.cjs +0 -34
  174. package/dist/node/worker/jsHash.cjs.map +0 -1
  175. package/dist/node/worker/jsHash.d.cts +0 -2
  176. package/dist/node/worker/jsHash.d.cts.map +0 -1
  177. package/dist/node/worker/jsHash.d.mts +0 -2
  178. package/dist/node/worker/jsHash.d.mts.map +0 -1
  179. package/dist/node/worker/jsHash.d.ts +0 -2
  180. package/dist/node/worker/jsHash.d.ts.map +0 -1
  181. package/dist/node/worker/jsHash.js +0 -10
  182. package/dist/node/worker/jsHash.js.map +0 -1
  183. package/dist/node/worker/jsHashNode.cjs +0 -41
  184. package/dist/node/worker/jsHashNode.cjs.map +0 -1
  185. package/dist/node/worker/jsHashNode.d.cts +0 -2
  186. package/dist/node/worker/jsHashNode.d.cts.map +0 -1
  187. package/dist/node/worker/jsHashNode.d.mts +0 -2
  188. package/dist/node/worker/jsHashNode.d.mts.map +0 -1
  189. package/dist/node/worker/jsHashNode.d.ts +0 -2
  190. package/dist/node/worker/jsHashNode.d.ts.map +0 -1
  191. package/dist/node/worker/jsHashNode.js +0 -24
  192. package/dist/node/worker/jsHashNode.js.map +0 -1
  193. package/src/worker/jsHash.ts +0 -10
  194. package/src/worker/jsHashNode.ts +0 -13
@@ -1,12 +1,8 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
6
  var __export = (target, all) => {
11
7
  for (var name in all)
12
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -19,16 +15,7 @@ var __copyProps = (to, from, except, desc) => {
19
15
  }
20
16
  return to;
21
17
  };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
- mod
29
- ));
30
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
32
19
 
33
20
  // src/index.ts
34
21
  var src_exports = {};
@@ -45,7 +32,7 @@ module.exports = __toCommonJS(src_exports);
45
32
 
46
33
  // src/hasEmptyFields.ts
47
34
  var import_typeof = require("@xylabs/typeof");
48
- var hasEmptyFields = /* @__PURE__ */ __name((obj) => {
35
+ var hasEmptyFields = (obj) => {
49
36
  if (obj === null || Array.isArray(obj)) return false;
50
37
  if (obj === void 0 || Object.keys(obj).length === 0) return true;
51
38
  for (const [value] of Object.values(obj)) {
@@ -56,25 +43,22 @@ var hasEmptyFields = /* @__PURE__ */ __name((obj) => {
56
43
  }
57
44
  }
58
45
  return false;
59
- }, "hasEmptyFields");
46
+ };
60
47
 
61
48
  // src/createNodeWorker.ts
62
49
  var import_threads = require("@xylabs/threads");
63
- var createNodeWorker = /* @__PURE__ */ __name((func) => {
50
+ var createNodeWorker = (func) => {
64
51
  try {
65
52
  const code = (func == null ? void 0 : func.toString().slice(6)) ?? "";
66
- const w = new import_threads.Worker(
53
+ return new import_threads.Worker(
67
54
  code,
68
55
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- {
70
- fromSource: true
71
- }
56
+ { fromSource: true }
72
57
  );
73
- return w;
74
58
  } catch {
75
59
  return;
76
60
  }
77
- }, "createNodeWorker");
61
+ };
78
62
 
79
63
  // src/PayloadHasher.ts
80
64
  var import_assert = require("@xylabs/assert");
@@ -85,12 +69,14 @@ var import_platform = require("@xylabs/platform");
85
69
  var import_threads2 = require("@xylabs/threads");
86
70
  var import_wasm = require("@xyo-network/wasm");
87
71
  var import_hash_wasm = require("hash-wasm");
88
- var import_sha = __toESM(require("sha.js"), 1);
89
72
 
90
73
  // src/removeEmptyFields.ts
91
74
  var import_typeof2 = require("@xylabs/typeof");
92
- var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
93
- if (obj === null || Array.isArray(obj)) return obj;
75
+ var removeEmptyFields = (obj) => {
76
+ if (obj === null) return obj;
77
+ if (Array.isArray(obj)) {
78
+ return obj.map((value) => typeof value === "object" ? removeEmptyFields(value) : value);
79
+ }
94
80
  const newObject = {};
95
81
  for (const [key, value] of Object.entries(obj)) {
96
82
  if ((0, import_typeof2.typeOf)(value) === "object") {
@@ -100,36 +86,24 @@ var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
100
86
  }
101
87
  }
102
88
  return newObject;
103
- }, "removeEmptyFields");
89
+ };
104
90
 
105
91
  // src/sortFields.ts
106
92
  var import_object = require("@xylabs/object");
107
- var subSort = /* @__PURE__ */ __name((value) => {
93
+ var subSort = (value) => {
108
94
  return (0, import_object.isObject)(value) ? sortFields(value) : value;
109
- }, "subSort");
110
- var sortFields = /* @__PURE__ */ __name((obj) => {
95
+ };
96
+ var sortFields = (obj) => {
111
97
  const result = {};
112
98
  const keys = Object.keys(obj);
113
99
  for (const key of keys.sort()) {
114
100
  result[key] = subSort(obj[key]);
115
101
  }
116
102
  return result;
117
- }, "sortFields");
118
-
119
- // src/worker/jsHashNode.ts
120
- var jsHashFunc = /* @__PURE__ */ __name(() => {
121
- const shajs2 = require("sha.js");
122
- const { asHash: asHash2 } = require("@xylabs/hex");
123
- const { expose } = require("@xylabs/threads/worker");
124
- expose({
125
- hash(data) {
126
- return asHash2(shajs2("sha256").update(data).digest().toString("hex"), true);
127
- }
128
- });
129
- }, "jsHashFunc");
103
+ };
130
104
 
131
105
  // src/worker/subtleHashNode.ts
132
- var subtleHashFunc = /* @__PURE__ */ __name(() => {
106
+ var subtleHashFunc = () => {
133
107
  const { subtle: subtle2 } = require("@xylabs/platform");
134
108
  const { expose } = require("@xylabs/threads/worker");
135
109
  expose({
@@ -137,10 +111,10 @@ var subtleHashFunc = /* @__PURE__ */ __name(() => {
137
111
  return await subtle2.digest("SHA-256", data);
138
112
  }
139
113
  });
140
- }, "subtleHashFunc");
114
+ };
141
115
 
142
116
  // src/worker/wasmHashNode.ts
143
- var wasmHashFunc = /* @__PURE__ */ __name(() => {
117
+ var wasmHashFunc = () => {
144
118
  const { sha256: sha2562 } = require("hash-wasm");
145
119
  const { asHash: asHash2 } = require("@xylabs/hex");
146
120
  const { expose } = require("@xylabs/threads/worker");
@@ -149,29 +123,37 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
149
123
  return asHash2(await sha2562(data), true);
150
124
  }
151
125
  });
152
- }, "wasmHashFunc");
126
+ };
153
127
 
154
128
  // src/PayloadHasher.ts
155
- var wasmSupportStatic = new import_wasm.WasmSupport([
156
- "bigInt"
157
- ]);
158
- var omitByPredicate = /* @__PURE__ */ __name((prefix) => (_, key) => {
129
+ var wasmSupportStatic = new import_wasm.WasmSupport(["bigInt"]);
130
+ var omitByPredicate = (prefix) => (_, key) => {
159
131
  (0, import_assert.assertEx)(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
160
132
  return key.startsWith(prefix);
161
- }, "omitByPredicate");
162
- var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
163
- static get jsHashPool() {
164
- if (!this.allowHashPooling || this._jsHashPool === null) {
165
- return null;
166
- }
167
- try {
168
- return this._jsHashPool = this._jsHashPool ?? (this.jsHashWorkerUrl ? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc) : null);
169
- } catch {
170
- console.warn("Creating js hash worker failed");
171
- this._jsHashPool = null;
172
- return null;
133
+ };
134
+ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
135
+ static allowHashPooling = true;
136
+ static allowSubtle = true;
137
+ static createBrowserWorker;
138
+ static createNodeWorker;
139
+ static initialized = (() => {
140
+ globalThis.xyo = globalThis.xyo ?? {};
141
+ if (globalThis.xyo.hashing) {
142
+ console.warn("Two static instances of PayloadHasher detected");
173
143
  }
174
- }
144
+ })();
145
+ static subtleHashWorkerUrl;
146
+ static warnIfUsingJsHash = true;
147
+ static wasmHashWorkerUrl;
148
+ static wasmInitialized = wasmSupportStatic.initialize();
149
+ static wasmSupport = wasmSupportStatic;
150
+ // These get set to null if they fail to create and then we just don't use workers - needed for storybook
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ static _jsHashPool;
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ static _subtleHashPool;
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ static _wasmHashPool;
175
157
  static get subtleHashPool() {
176
158
  if (!this.allowHashPooling || this._subtleHashPool === null) {
177
159
  return null;
@@ -203,16 +185,12 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
203
185
  }
204
186
  static async filterExcludeByHash(objs = [], hash) {
205
187
  var _a;
206
- const hashes = Array.isArray(hash) ? hash : [
207
- hash
208
- ];
188
+ const hashes = Array.isArray(hash) ? hash : [hash];
209
189
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
210
190
  }
211
191
  static async filterIncludeByHash(objs = [], hash) {
212
192
  var _a;
213
- const hashes = Array.isArray(hash) ? hash : [
214
- hash
215
- ];
193
+ const hashes = Array.isArray(hash) ? hash : [hash];
216
194
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
217
195
  }
218
196
  static async findByHash(objs = [], hash) {
@@ -220,10 +198,10 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
220
198
  return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
221
199
  }
222
200
  /**
223
- * Asynchronously hashes a payload
224
- * @param obj A payload
225
- * @returns The payload hash
226
- */
201
+ * Asynchronously hashes a payload
202
+ * @param obj A payload
203
+ * @returns The payload hash
204
+ */
227
205
  static async hash(obj) {
228
206
  const stringToHash = this.stringifyHashFields(obj);
229
207
  if (_PayloadHasher.allowSubtle) {
@@ -231,9 +209,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
231
209
  const enc = new TextEncoder();
232
210
  const data = enc.encode(stringToHash);
233
211
  const hashArray = await this.subtleHash(data);
234
- return (0, import_hex.hexFromArrayBuffer)(hashArray, {
235
- bitLength: 256
236
- });
212
+ return (0, import_hex.hexFromArrayBuffer)(hashArray, { bitLength: 256 });
237
213
  } catch {
238
214
  _PayloadHasher.allowSubtle = false;
239
215
  }
@@ -246,51 +222,33 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
246
222
  this.wasmSupport.allowWasm = false;
247
223
  }
248
224
  }
249
- return await this.jsHash(stringToHash);
225
+ throw new Error("No wasm hashing available");
250
226
  }
251
227
  static hashFields(obj) {
252
228
  return sortFields(removeEmptyFields((0, import_lodash.omitBy)(obj, omitByPredicate("_"))));
253
229
  }
254
230
  /**
255
- * Creates an array of payload/hash tuples based on the payloads passed in
256
- * @param objs Any array of payloads
257
- * @returns An array of payload/hash tuples
258
- */
231
+ * Creates an array of payload/hash tuples based on the payloads passed in
232
+ * @param objs Any array of payloads
233
+ * @returns An array of payload/hash tuples
234
+ */
259
235
  static async hashPairs(objs) {
260
- return await Promise.all(objs.map(async (obj) => [
261
- obj,
262
- await _PayloadHasher.hash(obj)
263
- ]));
236
+ return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hash(obj)]));
264
237
  }
265
238
  /**
266
- * Synchronously hashes a payload
267
- * @param obj A payload
268
- * @returns The payload hash
269
- */
270
- static hashSync(obj) {
271
- return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
272
- }
273
- /**
274
- * Creates an array of payload hashes based on the payloads passed in
275
- * @param objs Any array of payloads
276
- * @returns An array of payload hashes
277
- */
239
+ * Creates an array of payload hashes based on the payloads passed in
240
+ * @param objs Any array of payloads
241
+ * @returns An array of payload hashes
242
+ */
278
243
  static async hashes(objs) {
279
244
  return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
280
245
  }
281
- static async jsHash(data) {
282
- if (_PayloadHasher.warnIfUsingJsHash) {
283
- console.warn("Using jsHash [No subtle or wasm?]");
284
- }
285
- const pool = this.jsHashPool;
286
- return pool === null ? (0, import_hex.asHash)((0, import_sha.default)("sha256").update(data).digest().toString("hex"), true) : await pool.queue(async (thread) => await thread.hash(data));
287
- }
288
246
  /**
289
- * Returns a clone of the payload that is JSON safe
290
- * @param obj A payload
291
- * @param meta Keeps underscore (meta) fields if set to true
292
- * @returns Returns a clone of the payload that is JSON safe
293
- */
247
+ * Returns a clone of the payload that is JSON safe
248
+ * @param obj A payload
249
+ * @param meta Keeps underscore (meta) fields if set to true
250
+ * @returns Returns a clone of the payload that is JSON safe
251
+ */
294
252
  static json(payload, meta = false) {
295
253
  return sortFields(removeEmptyFields(meta ? payload : (0, import_lodash.omitBy)(payload, omitByPredicate("_"))));
296
254
  }
@@ -312,64 +270,33 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
312
270
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
313
271
  static createWorkerPool(url, func, size = 8) {
314
272
  if (url) console.debug(`createWorkerPool: ${url}`);
315
- const createFunc = /* @__PURE__ */ __name(() => (0, import_threads2.spawn)(this.createWorker(url, func)), "createFunc");
273
+ const createFunc = () => (0, import_threads2.spawn)(this.createWorker(url, func));
316
274
  return (0, import_threads2.Pool)(createFunc, size);
317
275
  }
318
276
  async hash() {
319
277
  return await _PayloadHasher.hash(this.obj);
320
278
  }
321
- hashSync() {
322
- return _PayloadHasher.hashSync(this.obj);
323
- }
324
279
  /**
325
- * Returns a clone of the payload that is JSON safe
326
- * @param meta Keeps underscore (meta) fields if set to true
327
- * @returns Returns a clone of the payload that is JSON safe
328
- */
280
+ * Returns a clone of the payload that is JSON safe
281
+ * @param meta Keeps underscore (meta) fields if set to true
282
+ * @returns Returns a clone of the payload that is JSON safe
283
+ */
329
284
  json(meta = false) {
330
285
  return _PayloadHasher.json(this.obj, meta);
331
286
  }
332
287
  };
333
- __name(_PayloadHasher, "PayloadHasher");
334
- __publicField(_PayloadHasher, "allowHashPooling", true);
335
- __publicField(_PayloadHasher, "allowSubtle", true);
336
- __publicField(_PayloadHasher, "createBrowserWorker");
337
- __publicField(_PayloadHasher, "createNodeWorker");
338
- __publicField(_PayloadHasher, "initialized", (() => {
339
- globalThis.xyo = globalThis.xyo ?? {};
340
- if (globalThis.xyo.hashing) {
341
- console.warn("Two static instances of PayloadHasher detected");
342
- }
343
- globalThis.xyo === globalThis.xyo;
344
- })());
345
- __publicField(_PayloadHasher, "jsHashWorkerUrl");
346
- __publicField(_PayloadHasher, "subtleHashWorkerUrl");
347
- __publicField(_PayloadHasher, "warnIfUsingJsHash", true);
348
- __publicField(_PayloadHasher, "wasmHashWorkerUrl");
349
- __publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
350
- __publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
351
- // These get set to null if they fail to create and then we just don't use workers - needed for storybook
352
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
353
- __publicField(_PayloadHasher, "_jsHashPool");
354
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
355
- __publicField(_PayloadHasher, "_subtleHashPool");
356
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
- __publicField(_PayloadHasher, "_wasmHashPool");
358
- var PayloadHasher = _PayloadHasher;
359
288
 
360
289
  // src/NodePayloadHasher.ts
361
290
  PayloadHasher.createNodeWorker = createNodeWorker;
362
- var _NodePayloadHasher = class _NodePayloadHasher extends PayloadHasher {
291
+ var NodePayloadHasher = class extends PayloadHasher {
292
+ static createNodeWorker = createNodeWorker;
363
293
  };
364
- __name(_NodePayloadHasher, "NodePayloadHasher");
365
- __publicField(_NodePayloadHasher, "createNodeWorker", createNodeWorker);
366
- var NodePayloadHasher = _NodePayloadHasher;
367
294
 
368
295
  // src/removeFields.ts
369
296
  var import_assert2 = require("@xylabs/assert");
370
297
  var import_lodash2 = require("@xylabs/lodash");
371
298
  var import_object3 = require("@xylabs/object");
372
- var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
299
+ var deepBy = (obj, predicate, func) => {
373
300
  if (Array.isArray(obj)) {
374
301
  return obj;
375
302
  }
@@ -379,19 +306,27 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
379
306
  const pickedNonObjects = (0, import_lodash2.omitBy)(nonObjects, predicate);
380
307
  const processedObjects = (0, import_lodash2.mapValues)(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
381
308
  return (0, import_lodash2.merge)({}, pickedNonObjects, processedObjects);
382
- }, "deepBy");
383
- var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
384
- return deepBy(obj, (_, key) => {
385
- (0, import_assert2.assertEx)(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
386
- return key.startsWith(prefix);
387
- }, import_lodash2.omitBy);
388
- }, "deepOmitPrefixedFields");
389
- var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
390
- return deepBy(obj, (_, key) => {
391
- (0, import_assert2.assertEx)(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
392
- return key.startsWith("_");
393
- }, import_lodash2.pickBy);
394
- }, "deepPickUnderscoreFields");
309
+ };
310
+ var deepOmitPrefixedFields = (obj, prefix) => {
311
+ return deepBy(
312
+ obj,
313
+ (_, key) => {
314
+ (0, import_assert2.assertEx)(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
315
+ return key.startsWith(prefix);
316
+ },
317
+ import_lodash2.omitBy
318
+ );
319
+ };
320
+ var deepPickUnderscoreFields = (obj) => {
321
+ return deepBy(
322
+ obj,
323
+ (_, key) => {
324
+ (0, import_assert2.assertEx)(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
325
+ return key.startsWith("_");
326
+ },
327
+ import_lodash2.pickBy
328
+ );
329
+ };
395
330
  // Annotate the CommonJS export names for ESM import in node:
396
331
  0 && (module.exports = {
397
332
  PayloadHasher,
@@ -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 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":["import_object","import_threads","import_typeof","subtle","sha256","asHash","import_assert","import_lodash","import_object","obj"]}