@xyo-network/hash 2.90.11 → 2.90.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/BrowserPayloadHasher.d.cts +9 -0
- package/dist/browser/BrowserPayloadHasher.d.cts.map +1 -0
- package/dist/browser/BrowserPayloadHasher.d.mts +9 -0
- package/dist/browser/BrowserPayloadHasher.d.mts.map +1 -0
- package/dist/browser/BrowserPayloadHasher.d.ts +9 -0
- package/dist/browser/BrowserPayloadHasher.d.ts.map +1 -0
- package/dist/browser/NodePayloadHasher.d.cts +5 -0
- package/dist/browser/NodePayloadHasher.d.cts.map +1 -0
- package/dist/browser/NodePayloadHasher.d.mts +5 -0
- package/dist/browser/NodePayloadHasher.d.mts.map +1 -0
- package/dist/browser/NodePayloadHasher.d.ts +5 -0
- package/dist/browser/NodePayloadHasher.d.ts.map +1 -0
- package/dist/browser/PayloadHasher.d.cts +14 -10
- package/dist/browser/PayloadHasher.d.cts.map +1 -1
- package/dist/browser/PayloadHasher.d.mts +14 -10
- package/dist/browser/PayloadHasher.d.mts.map +1 -1
- package/dist/browser/PayloadHasher.d.ts +14 -10
- package/dist/browser/PayloadHasher.d.ts.map +1 -1
- package/dist/browser/createBrowserWorker.d.cts +2 -0
- package/dist/browser/createBrowserWorker.d.cts.map +1 -0
- package/dist/browser/createBrowserWorker.d.mts +2 -0
- package/dist/browser/createBrowserWorker.d.mts.map +1 -0
- package/dist/browser/createBrowserWorker.d.ts +2 -0
- package/dist/browser/createBrowserWorker.d.ts.map +1 -0
- package/dist/browser/createNodeWorker.d.cts +2 -0
- package/dist/browser/createNodeWorker.d.cts.map +1 -0
- package/dist/browser/createNodeWorker.d.mts +2 -0
- package/dist/browser/createNodeWorker.d.mts.map +1 -0
- package/dist/browser/createNodeWorker.d.ts +2 -0
- package/dist/browser/createNodeWorker.d.ts.map +1 -0
- package/dist/browser/index-browser.cjs +99 -107
- package/dist/browser/index-browser.cjs.map +1 -1
- package/dist/browser/index-browser.d.cts +1 -1
- package/dist/browser/index-browser.d.cts.map +1 -1
- package/dist/browser/index-browser.d.mts +1 -1
- package/dist/browser/index-browser.d.mts.map +1 -1
- package/dist/browser/index-browser.d.ts +1 -1
- package/dist/browser/index-browser.d.ts.map +1 -1
- package/dist/browser/index-browser.js +98 -106
- package/dist/browser/index-browser.js.map +1 -1
- package/dist/browser/index.d.cts +1 -1
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -1
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/worker/index.cjs +3 -3
- package/dist/browser/worker/index.cjs.map +1 -1
- package/dist/browser/worker/index.d.cts +3 -3
- package/dist/browser/worker/index.d.cts.map +1 -1
- package/dist/browser/worker/index.d.mts +3 -3
- package/dist/browser/worker/index.d.mts.map +1 -1
- package/dist/browser/worker/index.d.ts +3 -3
- package/dist/browser/worker/index.d.ts.map +1 -1
- package/dist/browser/worker/index.js +3 -3
- package/dist/browser/worker/index.js.map +1 -1
- package/dist/browser/worker/jsHash-bundle.js +3322 -0
- package/dist/browser/worker/jsHash.cjs +17 -20
- package/dist/browser/worker/jsHash.cjs.map +1 -1
- package/dist/browser/worker/jsHash.d.cts +1 -1
- package/dist/browser/worker/jsHash.d.cts.map +1 -1
- package/dist/browser/worker/jsHash.d.mts +1 -1
- package/dist/browser/worker/jsHash.d.mts.map +1 -1
- package/dist/browser/worker/jsHash.d.ts +1 -1
- package/dist/browser/worker/jsHash.d.ts.map +1 -1
- package/dist/browser/worker/jsHash.js +8 -23
- package/dist/browser/worker/jsHash.js.map +1 -1
- package/dist/browser/worker/jsHashNode.cjs +37 -0
- package/dist/browser/worker/jsHashNode.cjs.map +1 -0
- package/dist/browser/worker/jsHashNode.d.cts +2 -0
- package/dist/browser/worker/jsHashNode.d.cts.map +1 -0
- package/dist/browser/worker/jsHashNode.d.mts +2 -0
- package/dist/browser/worker/jsHashNode.d.mts.map +1 -0
- package/dist/browser/worker/jsHashNode.d.ts +2 -0
- package/dist/browser/worker/jsHashNode.d.ts.map +1 -0
- package/dist/browser/worker/jsHashNode.js +25 -0
- package/dist/browser/worker/jsHashNode.js.map +1 -0
- package/dist/browser/worker/subtleHash-bundle.js +455 -0
- package/dist/browser/worker/subtleHash.cjs +6 -31
- package/dist/browser/worker/subtleHash.cjs.map +1 -1
- package/dist/browser/worker/subtleHash.d.cts +1 -1
- package/dist/browser/worker/subtleHash.d.cts.map +1 -1
- package/dist/browser/worker/subtleHash.d.mts +1 -1
- package/dist/browser/worker/subtleHash.d.mts.map +1 -1
- package/dist/browser/worker/subtleHash.d.ts +1 -1
- package/dist/browser/worker/subtleHash.d.ts.map +1 -1
- package/dist/browser/worker/subtleHash.js +7 -22
- package/dist/browser/worker/subtleHash.js.map +1 -1
- package/dist/browser/worker/subtleHashNode.cjs +36 -0
- package/dist/browser/worker/subtleHashNode.cjs.map +1 -0
- package/dist/browser/worker/subtleHashNode.d.cts +2 -0
- package/dist/browser/worker/subtleHashNode.d.cts.map +1 -0
- package/dist/browser/worker/subtleHashNode.d.mts +2 -0
- package/dist/browser/worker/subtleHashNode.d.mts.map +1 -0
- package/dist/browser/worker/subtleHashNode.d.ts +2 -0
- package/dist/browser/worker/subtleHashNode.d.ts.map +1 -0
- package/dist/browser/worker/subtleHashNode.js +24 -0
- package/dist/browser/worker/subtleHashNode.js.map +1 -0
- package/dist/browser/worker/wasmHash-bundle.js +893 -0
- package/dist/browser/worker/wasmHash.cjs +7 -32
- package/dist/browser/worker/wasmHash.cjs.map +1 -1
- package/dist/browser/worker/wasmHash.d.cts +1 -1
- package/dist/browser/worker/wasmHash.d.cts.map +1 -1
- package/dist/browser/worker/wasmHash.d.mts +1 -1
- package/dist/browser/worker/wasmHash.d.mts.map +1 -1
- package/dist/browser/worker/wasmHash.d.ts +1 -1
- package/dist/browser/worker/wasmHash.d.ts.map +1 -1
- package/dist/browser/worker/wasmHash.js +8 -23
- package/dist/browser/worker/wasmHash.js.map +1 -1
- package/dist/browser/worker/wasmHashNode.cjs +37 -0
- package/dist/browser/worker/wasmHashNode.cjs.map +1 -0
- package/dist/browser/worker/wasmHashNode.d.cts +2 -0
- package/dist/browser/worker/wasmHashNode.d.cts.map +1 -0
- package/dist/browser/worker/wasmHashNode.d.mts +2 -0
- package/dist/browser/worker/wasmHashNode.d.mts.map +1 -0
- package/dist/browser/worker/wasmHashNode.d.ts +2 -0
- package/dist/browser/worker/wasmHashNode.d.ts.map +1 -0
- package/dist/browser/worker/wasmHashNode.js +25 -0
- package/dist/browser/worker/wasmHashNode.js.map +1 -0
- package/dist/node/BrowserPayloadHasher.d.cts +9 -0
- package/dist/node/BrowserPayloadHasher.d.cts.map +1 -0
- package/dist/node/BrowserPayloadHasher.d.mts +9 -0
- package/dist/node/BrowserPayloadHasher.d.mts.map +1 -0
- package/dist/node/BrowserPayloadHasher.d.ts +9 -0
- package/dist/node/BrowserPayloadHasher.d.ts.map +1 -0
- package/dist/node/NodePayloadHasher.d.cts +5 -0
- package/dist/node/NodePayloadHasher.d.cts.map +1 -0
- package/dist/node/NodePayloadHasher.d.mts +5 -0
- package/dist/node/NodePayloadHasher.d.mts.map +1 -0
- package/dist/node/NodePayloadHasher.d.ts +5 -0
- package/dist/node/NodePayloadHasher.d.ts.map +1 -0
- package/dist/node/PayloadHasher.d.cts +14 -10
- package/dist/node/PayloadHasher.d.cts.map +1 -1
- package/dist/node/PayloadHasher.d.mts +14 -10
- package/dist/node/PayloadHasher.d.mts.map +1 -1
- package/dist/node/PayloadHasher.d.ts +14 -10
- package/dist/node/PayloadHasher.d.ts.map +1 -1
- package/dist/node/createBrowserWorker.d.cts +2 -0
- package/dist/node/createBrowserWorker.d.cts.map +1 -0
- package/dist/node/createBrowserWorker.d.mts +2 -0
- package/dist/node/createBrowserWorker.d.mts.map +1 -0
- package/dist/node/createBrowserWorker.d.ts +2 -0
- package/dist/node/createBrowserWorker.d.ts.map +1 -0
- package/dist/node/createNodeWorker.d.cts +2 -0
- package/dist/node/createNodeWorker.d.cts.map +1 -0
- package/dist/node/createNodeWorker.d.mts +2 -0
- package/dist/node/createNodeWorker.d.mts.map +1 -0
- package/dist/node/createNodeWorker.d.ts +2 -0
- package/dist/node/createNodeWorker.d.ts.map +1 -0
- package/dist/node/index-browser.d.cts +1 -1
- package/dist/node/index-browser.d.cts.map +1 -1
- package/dist/node/index-browser.d.mts +1 -1
- package/dist/node/index-browser.d.mts.map +1 -1
- package/dist/node/index-browser.d.ts +1 -1
- package/dist/node/index-browser.d.ts.map +1 -1
- package/dist/node/index.cjs +63 -89
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -1
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -1
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +63 -89
- package/dist/node/index.js.map +1 -1
- package/dist/node/worker/index.cjs +3 -3
- package/dist/node/worker/index.cjs.map +1 -1
- package/dist/node/worker/index.d.cts +3 -3
- package/dist/node/worker/index.d.cts.map +1 -1
- package/dist/node/worker/index.d.mts +3 -3
- package/dist/node/worker/index.d.mts.map +1 -1
- package/dist/node/worker/index.d.ts +3 -3
- package/dist/node/worker/index.d.ts.map +1 -1
- package/dist/node/worker/index.js +3 -3
- package/dist/node/worker/index.js.map +1 -1
- package/dist/node/worker/jsHash.cjs +17 -24
- package/dist/node/worker/jsHash.cjs.map +1 -1
- package/dist/node/worker/jsHash.d.cts +1 -1
- package/dist/node/worker/jsHash.d.cts.map +1 -1
- package/dist/node/worker/jsHash.d.mts +1 -1
- package/dist/node/worker/jsHash.d.mts.map +1 -1
- package/dist/node/worker/jsHash.d.ts +1 -1
- package/dist/node/worker/jsHash.d.ts.map +1 -1
- package/dist/node/worker/jsHash.js +8 -23
- package/dist/node/worker/jsHash.js.map +1 -1
- package/dist/node/worker/jsHashNode.cjs +41 -0
- package/dist/node/worker/jsHashNode.cjs.map +1 -0
- package/dist/node/worker/jsHashNode.d.cts +2 -0
- package/dist/node/worker/jsHashNode.d.cts.map +1 -0
- package/dist/node/worker/jsHashNode.d.mts +2 -0
- package/dist/node/worker/jsHashNode.d.mts.map +1 -0
- package/dist/node/worker/jsHashNode.d.ts +2 -0
- package/dist/node/worker/jsHashNode.d.ts.map +1 -0
- package/dist/node/worker/jsHashNode.js +25 -0
- package/dist/node/worker/jsHashNode.js.map +1 -0
- package/dist/node/worker/subtleHash.cjs +6 -35
- package/dist/node/worker/subtleHash.cjs.map +1 -1
- package/dist/node/worker/subtleHash.d.cts +1 -1
- package/dist/node/worker/subtleHash.d.cts.map +1 -1
- package/dist/node/worker/subtleHash.d.mts +1 -1
- package/dist/node/worker/subtleHash.d.mts.map +1 -1
- package/dist/node/worker/subtleHash.d.ts +1 -1
- package/dist/node/worker/subtleHash.d.ts.map +1 -1
- package/dist/node/worker/subtleHash.js +7 -22
- package/dist/node/worker/subtleHash.js.map +1 -1
- package/dist/node/worker/subtleHashNode.cjs +40 -0
- package/dist/node/worker/subtleHashNode.cjs.map +1 -0
- package/dist/node/worker/subtleHashNode.d.cts +2 -0
- package/dist/node/worker/subtleHashNode.d.cts.map +1 -0
- package/dist/node/worker/subtleHashNode.d.mts +2 -0
- package/dist/node/worker/subtleHashNode.d.mts.map +1 -0
- package/dist/node/worker/subtleHashNode.d.ts +2 -0
- package/dist/node/worker/subtleHashNode.d.ts.map +1 -0
- package/dist/node/worker/subtleHashNode.js +24 -0
- package/dist/node/worker/subtleHashNode.js.map +1 -0
- package/dist/node/worker/wasmHash.cjs +7 -36
- package/dist/node/worker/wasmHash.cjs.map +1 -1
- package/dist/node/worker/wasmHash.d.cts +1 -1
- package/dist/node/worker/wasmHash.d.cts.map +1 -1
- package/dist/node/worker/wasmHash.d.mts +1 -1
- package/dist/node/worker/wasmHash.d.mts.map +1 -1
- package/dist/node/worker/wasmHash.d.ts +1 -1
- package/dist/node/worker/wasmHash.d.ts.map +1 -1
- package/dist/node/worker/wasmHash.js +8 -23
- package/dist/node/worker/wasmHash.js.map +1 -1
- package/dist/node/worker/wasmHashNode.cjs +41 -0
- package/dist/node/worker/wasmHashNode.cjs.map +1 -0
- package/dist/node/worker/wasmHashNode.d.cts +2 -0
- package/dist/node/worker/wasmHashNode.d.cts.map +1 -0
- package/dist/node/worker/wasmHashNode.d.mts +2 -0
- package/dist/node/worker/wasmHashNode.d.mts.map +1 -0
- package/dist/node/worker/wasmHashNode.d.ts +2 -0
- package/dist/node/worker/wasmHashNode.d.ts.map +1 -0
- package/dist/node/worker/wasmHashNode.js +25 -0
- package/dist/node/worker/wasmHashNode.js.map +1 -0
- package/package.json +17 -10
- package/src/BrowserPayloadHasher.ts +34 -0
- package/src/NodePayloadHasher.ts +8 -0
- package/src/PayloadHasher.ts +40 -82
- package/src/createBrowserWorker.ts +10 -0
- package/src/createNodeWorker.ts +15 -0
- package/src/index-browser.ts +1 -1
- package/src/index.ts +1 -1
- package/src/worker/index.ts +3 -3
- package/src/worker/jsHash.ts +9 -12
- package/src/worker/jsHashNode.ts +13 -0
- package/src/worker/subtleHash.ts +8 -11
- package/src/worker/subtleHashNode.ts +12 -0
- package/src/worker/wasmHash.ts +9 -12
- package/src/worker/wasmHashNode.ts +13 -0
- package/dist/browser/PayloadHasher-browser.d.cts +0 -69
- package/dist/browser/PayloadHasher-browser.d.cts.map +0 -1
- package/dist/browser/PayloadHasher-browser.d.mts +0 -69
- package/dist/browser/PayloadHasher-browser.d.mts.map +0 -1
- package/dist/browser/PayloadHasher-browser.d.ts +0 -69
- package/dist/browser/PayloadHasher-browser.d.ts.map +0 -1
- package/dist/node/PayloadHasher-browser.d.cts +0 -69
- package/dist/node/PayloadHasher-browser.d.cts.map +0 -1
- package/dist/node/PayloadHasher-browser.d.mts +0 -69
- package/dist/node/PayloadHasher-browser.d.mts.map +0 -1
- package/dist/node/PayloadHasher-browser.d.ts +0 -69
- package/dist/node/PayloadHasher-browser.d.ts.map +0 -1
- package/src/PayloadHasher-browser.ts +0 -248
package/dist/node/index.cjs
CHANGED
|
@@ -36,7 +36,7 @@ var __publicField = (obj, key, value) => {
|
|
|
36
36
|
// src/index.ts
|
|
37
37
|
var src_exports = {};
|
|
38
38
|
__export(src_exports, {
|
|
39
|
-
PayloadHasher: () =>
|
|
39
|
+
PayloadHasher: () => NodePayloadHasher,
|
|
40
40
|
deepBy: () => deepBy,
|
|
41
41
|
deepOmitPrefixedFields: () => deepOmitPrefixedFields,
|
|
42
42
|
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
@@ -45,13 +45,31 @@ __export(src_exports, {
|
|
|
45
45
|
});
|
|
46
46
|
module.exports = __toCommonJS(src_exports);
|
|
47
47
|
|
|
48
|
+
// src/createNodeWorker.ts
|
|
49
|
+
var import_threads = require("threads");
|
|
50
|
+
var createNodeWorker = /* @__PURE__ */ __name((func) => {
|
|
51
|
+
try {
|
|
52
|
+
const code = (func == null ? void 0 : func.toString().slice(6)) ?? "";
|
|
53
|
+
const w = new import_threads.Worker(
|
|
54
|
+
code,
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
{
|
|
57
|
+
fromSource: true
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
return w;
|
|
61
|
+
} catch {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}, "createNodeWorker");
|
|
65
|
+
|
|
48
66
|
// src/PayloadHasher.ts
|
|
67
|
+
var import_assert2 = require("@xylabs/assert");
|
|
49
68
|
var import_hex = require("@xylabs/hex");
|
|
50
69
|
var import_object3 = require("@xylabs/object");
|
|
51
70
|
var import_wasm = require("@xyo-network/wasm");
|
|
52
|
-
var import_async_mutex = require("async-mutex");
|
|
53
71
|
var import_sha = __toESM(require("sha.js"), 1);
|
|
54
|
-
var
|
|
72
|
+
var import_threads2 = require("threads");
|
|
55
73
|
|
|
56
74
|
// src/removeEmptyFields.ts
|
|
57
75
|
var import_typeof = require("@xylabs/typeof");
|
|
@@ -111,7 +129,7 @@ var sortFields = /* @__PURE__ */ __name((obj) => {
|
|
|
111
129
|
return result;
|
|
112
130
|
}, "sortFields");
|
|
113
131
|
|
|
114
|
-
// src/worker/
|
|
132
|
+
// src/worker/jsHashNode.ts
|
|
115
133
|
var jsHashFunc = /* @__PURE__ */ __name(() => {
|
|
116
134
|
const shajs2 = require("sha.js");
|
|
117
135
|
const { asHash: asHash2 } = require("@xylabs/hex");
|
|
@@ -123,7 +141,7 @@ var jsHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
123
141
|
});
|
|
124
142
|
}, "jsHashFunc");
|
|
125
143
|
|
|
126
|
-
// src/worker/
|
|
144
|
+
// src/worker/subtleHashNode.ts
|
|
127
145
|
var subtleHashFunc = /* @__PURE__ */ __name(() => {
|
|
128
146
|
const { subtle } = require("@xylabs/platform");
|
|
129
147
|
const { expose } = require("threads/worker");
|
|
@@ -134,7 +152,7 @@ var subtleHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
134
152
|
});
|
|
135
153
|
}, "subtleHashFunc");
|
|
136
154
|
|
|
137
|
-
// src/worker/
|
|
155
|
+
// src/worker/wasmHashNode.ts
|
|
138
156
|
var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
139
157
|
const { sha256 } = require("hash-wasm");
|
|
140
158
|
const { asHash: asHash2 } = require("@xylabs/hex");
|
|
@@ -150,9 +168,20 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
150
168
|
var wasmSupportStatic = new import_wasm.WasmSupport([
|
|
151
169
|
"bigInt"
|
|
152
170
|
]);
|
|
153
|
-
var maxHashThreads = 8;
|
|
154
|
-
var maxListenersPerThread = 1;
|
|
155
171
|
var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
172
|
+
static get jsHashPool() {
|
|
173
|
+
return this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc);
|
|
174
|
+
}
|
|
175
|
+
static get subtleHashPool() {
|
|
176
|
+
return this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc);
|
|
177
|
+
}
|
|
178
|
+
static get wasmHashPool() {
|
|
179
|
+
return this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc);
|
|
180
|
+
}
|
|
181
|
+
static createWorker(url, func) {
|
|
182
|
+
var _a, _b;
|
|
183
|
+
return (0, import_assert2.assertEx)(((_a = this.createBrowserWorker) == null ? void 0 : _a.call(this, url)) ?? ((_b = this.createNodeWorker) == null ? void 0 : _b.call(this, func)), "Unable to create worker");
|
|
184
|
+
}
|
|
156
185
|
static async filterExcludeByHash(objs = [], hash) {
|
|
157
186
|
var _a;
|
|
158
187
|
const hashes = Array.isArray(hash) ? hash : [
|
|
@@ -231,32 +260,10 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
231
260
|
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
232
261
|
}
|
|
233
262
|
static async jsHash(data) {
|
|
234
|
-
await this.jsSemaphore.acquire();
|
|
235
263
|
if (_PayloadHasher.warnIfUsingJsHash) {
|
|
236
264
|
console.warn("Using jsHash [No subtle or wasm?]");
|
|
237
265
|
}
|
|
238
|
-
|
|
239
|
-
if (this.jsHashThreads.length < maxHashThreads) {
|
|
240
|
-
const code = jsHashFunc.toString().slice(6);
|
|
241
|
-
const w = new import_threads.Worker(
|
|
242
|
-
code,
|
|
243
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
244
|
-
{
|
|
245
|
-
fromSource: true
|
|
246
|
-
}
|
|
247
|
-
);
|
|
248
|
-
const worker = await (0, import_threads.spawn)(w);
|
|
249
|
-
this.jsHashThreads.push(worker);
|
|
250
|
-
}
|
|
251
|
-
let threadToUse = this.lastJsThreadUsed === void 0 ? 0 : this.lastJsThreadUsed + 1;
|
|
252
|
-
if (threadToUse >= this.jsHashThreads.length) {
|
|
253
|
-
threadToUse = 0;
|
|
254
|
-
}
|
|
255
|
-
this.lastJsThreadUsed = threadToUse;
|
|
256
|
-
return await this.jsHashThreads[threadToUse].hash(data);
|
|
257
|
-
} finally {
|
|
258
|
-
this.jsSemaphore.release();
|
|
259
|
-
}
|
|
266
|
+
return await this.jsHashPool.queue(async (thread) => await thread.hash(data));
|
|
260
267
|
}
|
|
261
268
|
/**
|
|
262
269
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -275,54 +282,14 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
275
282
|
return JSON.stringify(this.hashFields(obj));
|
|
276
283
|
}
|
|
277
284
|
static async subtleHash(data) {
|
|
278
|
-
await this.
|
|
279
|
-
try {
|
|
280
|
-
if (this.subtleHashThreads.length < maxHashThreads) {
|
|
281
|
-
const code = subtleHashFunc.toString().slice(6);
|
|
282
|
-
const w = new import_threads.Worker(
|
|
283
|
-
code,
|
|
284
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
285
|
-
{
|
|
286
|
-
fromSource: true
|
|
287
|
-
}
|
|
288
|
-
);
|
|
289
|
-
const worker = await (0, import_threads.spawn)(w);
|
|
290
|
-
this.subtleHashThreads.push(worker);
|
|
291
|
-
}
|
|
292
|
-
let threadToUse = this.lastSubtleThreadUsed === void 0 ? 0 : this.lastSubtleThreadUsed + 1;
|
|
293
|
-
if (threadToUse >= this.subtleHashThreads.length) {
|
|
294
|
-
threadToUse = 0;
|
|
295
|
-
}
|
|
296
|
-
this.lastSubtleThreadUsed = threadToUse;
|
|
297
|
-
return await this.subtleHashThreads[threadToUse].hash(data);
|
|
298
|
-
} finally {
|
|
299
|
-
this.subtleSemaphore.release();
|
|
300
|
-
}
|
|
285
|
+
return await this.subtleHashPool.queue(async (thread) => await thread.hash(data));
|
|
301
286
|
}
|
|
302
287
|
static async wasmHash(data) {
|
|
303
|
-
await this.
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
code,
|
|
309
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
310
|
-
{
|
|
311
|
-
fromSource: true
|
|
312
|
-
}
|
|
313
|
-
);
|
|
314
|
-
const worker = await (0, import_threads.spawn)(w);
|
|
315
|
-
this.wasmHashThreads.push(worker);
|
|
316
|
-
}
|
|
317
|
-
let threadToUse = this.lastWasmThreadUsed === void 0 ? 0 : this.lastWasmThreadUsed + 1;
|
|
318
|
-
if (threadToUse >= this.wasmHashThreads.length) {
|
|
319
|
-
threadToUse = 0;
|
|
320
|
-
}
|
|
321
|
-
this.lastWasmThreadUsed = threadToUse;
|
|
322
|
-
return await this.wasmHashThreads[threadToUse].hash(data);
|
|
323
|
-
} finally {
|
|
324
|
-
this.wasmSemaphore.release();
|
|
325
|
-
}
|
|
288
|
+
return await this.wasmHashPool.queue(async (thread) => await thread.hash(data));
|
|
289
|
+
}
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
291
|
+
static createWorkerPool(url, func, size = 8) {
|
|
292
|
+
return (0, import_threads2.Pool)(() => (0, import_threads2.spawn)(this.createWorker(url, func)), size);
|
|
326
293
|
}
|
|
327
294
|
async hash() {
|
|
328
295
|
return await _PayloadHasher.hash(this.obj);
|
|
@@ -341,22 +308,29 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
341
308
|
};
|
|
342
309
|
__name(_PayloadHasher, "PayloadHasher");
|
|
343
310
|
__publicField(_PayloadHasher, "allowSubtle", true);
|
|
344
|
-
|
|
345
|
-
__publicField(_PayloadHasher, "
|
|
346
|
-
__publicField(_PayloadHasher, "
|
|
347
|
-
__publicField(_PayloadHasher, "
|
|
348
|
-
__publicField(_PayloadHasher, "lastSubtleThreadUsed");
|
|
349
|
-
__publicField(_PayloadHasher, "lastWasmThreadUsed");
|
|
350
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
351
|
-
__publicField(_PayloadHasher, "subtleHashThreads", []);
|
|
352
|
-
__publicField(_PayloadHasher, "subtleSemaphore", new import_async_mutex.Semaphore(maxHashThreads * maxListenersPerThread));
|
|
311
|
+
__publicField(_PayloadHasher, "createBrowserWorker");
|
|
312
|
+
__publicField(_PayloadHasher, "createNodeWorker");
|
|
313
|
+
__publicField(_PayloadHasher, "jsHashWorkerUrl");
|
|
314
|
+
__publicField(_PayloadHasher, "subtleHashWorkerUrl");
|
|
353
315
|
__publicField(_PayloadHasher, "warnIfUsingJsHash", true);
|
|
354
|
-
|
|
355
|
-
__publicField(_PayloadHasher, "wasmHashThreads", []);
|
|
316
|
+
__publicField(_PayloadHasher, "wasmHashWorkerUrl");
|
|
356
317
|
__publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
|
|
357
|
-
__publicField(_PayloadHasher, "wasmSemaphore", new import_async_mutex.Semaphore(maxHashThreads * maxListenersPerThread));
|
|
358
318
|
__publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
|
|
319
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
320
|
+
__publicField(_PayloadHasher, "_jsHashPool");
|
|
321
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
322
|
+
__publicField(_PayloadHasher, "_subtleHashPool");
|
|
323
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
324
|
+
__publicField(_PayloadHasher, "_wasmHashPool");
|
|
359
325
|
var PayloadHasher = _PayloadHasher;
|
|
326
|
+
|
|
327
|
+
// src/NodePayloadHasher.ts
|
|
328
|
+
PayloadHasher.createNodeWorker = createNodeWorker;
|
|
329
|
+
var _NodePayloadHasher = class _NodePayloadHasher extends PayloadHasher {
|
|
330
|
+
};
|
|
331
|
+
__name(_NodePayloadHasher, "NodePayloadHasher");
|
|
332
|
+
__publicField(_NodePayloadHasher, "createNodeWorker", createNodeWorker);
|
|
333
|
+
var NodePayloadHasher = _NodePayloadHasher;
|
|
360
334
|
// Annotate the CommonJS export names for ESM import in node:
|
|
361
335
|
0 && (module.exports = {
|
|
362
336
|
PayloadHasher,
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.ts"],"sourcesContent":["export * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { Semaphore } from 'async-mutex'\nimport shajs from 'sha.js'\nimport { spawn, Worker } from 'threads'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\nconst maxHashThreads = 8\nconst maxListenersPerThread = 1\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly jsHashThreads: any[] = []\n static readonly jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n\n static lastJsThreadUsed: number\n static lastSubtleThreadUsed: number\n static lastWasmThreadUsed: number\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly subtleHashThreads: any[] = []\n static readonly subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static warnIfUsingJsHash = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly wasmHashThreads: any[] = []\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n static async jsHash(data: string) {\n await this.jsSemaphore.acquire()\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n try {\n if (this.jsHashThreads.length < maxHashThreads) {\n const code = jsHashFunc.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 const worker = await spawn(w)\n this.jsHashThreads.push(worker)\n }\n let threadToUse = this.lastJsThreadUsed === undefined ? 0 : this.lastJsThreadUsed + 1\n if (threadToUse >= this.jsHashThreads.length) {\n threadToUse = 0\n }\n this.lastJsThreadUsed = threadToUse\n\n return await this.jsHashThreads[threadToUse].hash(data)\n } finally {\n this.jsSemaphore.release()\n }\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n await this.subtleSemaphore.acquire()\n try {\n if (this.subtleHashThreads.length < maxHashThreads) {\n const code = subtleHashFunc.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 const worker = await spawn(w)\n this.subtleHashThreads.push(worker)\n }\n let threadToUse = this.lastSubtleThreadUsed === undefined ? 0 : this.lastSubtleThreadUsed + 1\n if (threadToUse >= this.subtleHashThreads.length) {\n threadToUse = 0\n }\n this.lastSubtleThreadUsed = threadToUse\n\n return await this.subtleHashThreads[threadToUse].hash(data)\n } finally {\n this.subtleSemaphore.release()\n }\n }\n\n static async wasmHash(data: string) {\n await this.wasmSemaphore.acquire()\n try {\n if (this.wasmHashThreads.length < maxHashThreads) {\n const code = wasmHashFunc.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 const worker = await spawn(w)\n this.wasmHashThreads.push(worker)\n }\n let threadToUse = this.lastWasmThreadUsed === undefined ? 0 : this.lastWasmThreadUsed + 1\n if (threadToUse >= this.wasmHashThreads.length) {\n threadToUse = 0\n }\n this.lastWasmThreadUsed = threadToUse\n\n return await this.wasmHashThreads[threadToUse].hash(data)\n } finally {\n this.wasmSemaphore.release()\n }\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","maxHashThreads","maxListenersPerThread","PayloadHasher","ObjectWrapper","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","jsSemaphore","acquire","warnIfUsingJsHash","console","warn","jsHashThreads","length","code","jsHashFunc","slice","w","Worker","fromSource","worker","spawn","push","threadToUse","lastJsThreadUsed","release","json","payload","meta","jsonPayload","JSON","stringify","subtleSemaphore","subtleHashThreads","subtleHashFunc","lastSubtleThreadUsed","wasmSemaphore","wasmHashThreads","wasmHashFunc","lastWasmThreadUsed","Semaphore","initialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/createNodeWorker.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHashNode.ts","../../src/worker/subtleHashNode.ts","../../src/worker/wasmHashNode.ts","../../src/NodePayloadHasher.ts"],"sourcesContent":["export { NodePayloadHasher as PayloadHasher } from './NodePayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { Worker } from 'threads'\n\nexport const createNodeWorker = (func?: () => unknown) => {\n try {\n const code = func?.toString().slice(6) ?? ''\n const w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n return w\n } catch {\n return\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport shajs from 'sha.js'\nimport { ModuleThread, Pool, spawn, Worker } from 'threads'\n// eslint-disable-next-line import/no-internal-modules\nimport { WorkerModule } from 'threads/dist/types/worker'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static createBrowserWorker?: (url?: URL) => Worker | undefined\n static createNodeWorker?: (func?: () => unknown) => Worker | undefined\n\n static jsHashWorkerUrl?: URL\n static subtleHashWorkerUrl?: URL\n\n static warnIfUsingJsHash = true\n\n static wasmHashWorkerUrl?: URL\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _jsHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _subtleHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _wasmHashPool?: Pool<ModuleThread<WorkerModule<any>>>\n\n private static get jsHashPool() {\n return (this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc))\n }\n\n private static get subtleHashPool() {\n return (this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc))\n }\n\n private static get wasmHashPool() {\n return (this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc))\n }\n\n static createWorker(url?: URL, func?: () => unknown) {\n return assertEx(this.createBrowserWorker?.(url) ?? this.createNodeWorker?.(func), 'Unable to create worker')\n }\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n static async jsHash(data: string) {\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n return await this.jsHashPool.queue(async (thread) => await thread.hash(data))\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n return await this.subtleHashPool.queue(async (thread) => await thread.hash(data))\n }\n\n static async wasmHash(data: string) {\n return await this.wasmHashPool.queue(async (thread) => await thread.hash(data))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static createWorkerPool<T extends WorkerModule<any>>(url?: URL, func?: () => unknown, size = 8) {\n return Pool(() => spawn<T>(this.createWorker(url, func)), size)\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n","import { createNodeWorker } from './createNodeWorker'\nimport { PayloadHasher } from './PayloadHasher'\n\nPayloadHasher.createNodeWorker = createNodeWorker\n\nexport class NodePayloadHasher extends PayloadHasher {\n static override createNodeWorker = createNodeWorker\n}\n"],"mappings":"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","names":["createNodeWorker","func","code","toString","slice","w","Worker","fromSource","import_assert","import_object","import_threads","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","jsHashPool","_jsHashPool","createWorkerPool","jsHashWorkerUrl","jsHashFunc","subtleHashPool","_subtleHashPool","subtleHashWorkerUrl","subtleHashFunc","wasmHashPool","_wasmHashPool","wasmHashWorkerUrl","wasmHashFunc","createWorker","url","func","assertEx","createBrowserWorker","createNodeWorker","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","allowSubtle","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","wasmInitialized","wasmSupport","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","warnIfUsingJsHash","console","warn","queue","thread","json","payload","meta","jsonPayload","JSON","stringify","size","Pool","spawn","initialize","PayloadHasher","createNodeWorker","NodePayloadHasher"]}
|
package/dist/node/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
package/dist/node/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
package/dist/node/index.d.ts
CHANGED
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxE,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
package/dist/node/index.js
CHANGED
|
@@ -13,13 +13,31 @@ var __publicField = (obj, key, value) => {
|
|
|
13
13
|
return value;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
+
// src/createNodeWorker.ts
|
|
17
|
+
import { Worker } from "threads";
|
|
18
|
+
var createNodeWorker = /* @__PURE__ */ __name((func) => {
|
|
19
|
+
try {
|
|
20
|
+
const code = (func == null ? void 0 : func.toString().slice(6)) ?? "";
|
|
21
|
+
const w = new Worker(
|
|
22
|
+
code,
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
{
|
|
25
|
+
fromSource: true
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
return w;
|
|
29
|
+
} catch {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}, "createNodeWorker");
|
|
33
|
+
|
|
16
34
|
// src/PayloadHasher.ts
|
|
35
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
17
36
|
import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
|
|
18
37
|
import { ObjectWrapper } from "@xylabs/object";
|
|
19
38
|
import { WasmSupport } from "@xyo-network/wasm";
|
|
20
|
-
import { Semaphore } from "async-mutex";
|
|
21
39
|
import shajs from "sha.js";
|
|
22
|
-
import {
|
|
40
|
+
import { Pool, spawn } from "threads";
|
|
23
41
|
|
|
24
42
|
// src/removeEmptyFields.ts
|
|
25
43
|
import { typeOf } from "@xylabs/typeof";
|
|
@@ -79,7 +97,7 @@ var sortFields = /* @__PURE__ */ __name((obj) => {
|
|
|
79
97
|
return result;
|
|
80
98
|
}, "sortFields");
|
|
81
99
|
|
|
82
|
-
// src/worker/
|
|
100
|
+
// src/worker/jsHashNode.ts
|
|
83
101
|
var jsHashFunc = /* @__PURE__ */ __name(() => {
|
|
84
102
|
const shajs2 = __require("sha.js");
|
|
85
103
|
const { asHash: asHash2 } = __require("@xylabs/hex");
|
|
@@ -91,7 +109,7 @@ var jsHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
91
109
|
});
|
|
92
110
|
}, "jsHashFunc");
|
|
93
111
|
|
|
94
|
-
// src/worker/
|
|
112
|
+
// src/worker/subtleHashNode.ts
|
|
95
113
|
var subtleHashFunc = /* @__PURE__ */ __name(() => {
|
|
96
114
|
const { subtle } = __require("@xylabs/platform");
|
|
97
115
|
const { expose } = __require("threads/worker");
|
|
@@ -102,7 +120,7 @@ var subtleHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
102
120
|
});
|
|
103
121
|
}, "subtleHashFunc");
|
|
104
122
|
|
|
105
|
-
// src/worker/
|
|
123
|
+
// src/worker/wasmHashNode.ts
|
|
106
124
|
var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
107
125
|
const { sha256 } = __require("hash-wasm");
|
|
108
126
|
const { asHash: asHash2 } = __require("@xylabs/hex");
|
|
@@ -118,9 +136,20 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
118
136
|
var wasmSupportStatic = new WasmSupport([
|
|
119
137
|
"bigInt"
|
|
120
138
|
]);
|
|
121
|
-
var maxHashThreads = 8;
|
|
122
|
-
var maxListenersPerThread = 1;
|
|
123
139
|
var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
140
|
+
static get jsHashPool() {
|
|
141
|
+
return this._jsHashPool = this._jsHashPool ?? this.createWorkerPool(this.jsHashWorkerUrl, jsHashFunc);
|
|
142
|
+
}
|
|
143
|
+
static get subtleHashPool() {
|
|
144
|
+
return this._subtleHashPool = this._subtleHashPool ?? this.createWorkerPool(this.subtleHashWorkerUrl, subtleHashFunc);
|
|
145
|
+
}
|
|
146
|
+
static get wasmHashPool() {
|
|
147
|
+
return this._wasmHashPool = this._wasmHashPool ?? this.createWorkerPool(this.wasmHashWorkerUrl, wasmHashFunc);
|
|
148
|
+
}
|
|
149
|
+
static createWorker(url, func) {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
return assertEx2(((_a = this.createBrowserWorker) == null ? void 0 : _a.call(this, url)) ?? ((_b = this.createNodeWorker) == null ? void 0 : _b.call(this, func)), "Unable to create worker");
|
|
152
|
+
}
|
|
124
153
|
static async filterExcludeByHash(objs = [], hash) {
|
|
125
154
|
var _a;
|
|
126
155
|
const hashes = Array.isArray(hash) ? hash : [
|
|
@@ -199,32 +228,10 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
199
228
|
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
200
229
|
}
|
|
201
230
|
static async jsHash(data) {
|
|
202
|
-
await this.jsSemaphore.acquire();
|
|
203
231
|
if (_PayloadHasher.warnIfUsingJsHash) {
|
|
204
232
|
console.warn("Using jsHash [No subtle or wasm?]");
|
|
205
233
|
}
|
|
206
|
-
|
|
207
|
-
if (this.jsHashThreads.length < maxHashThreads) {
|
|
208
|
-
const code = jsHashFunc.toString().slice(6);
|
|
209
|
-
const w = new Worker(
|
|
210
|
-
code,
|
|
211
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
212
|
-
{
|
|
213
|
-
fromSource: true
|
|
214
|
-
}
|
|
215
|
-
);
|
|
216
|
-
const worker = await spawn(w);
|
|
217
|
-
this.jsHashThreads.push(worker);
|
|
218
|
-
}
|
|
219
|
-
let threadToUse = this.lastJsThreadUsed === void 0 ? 0 : this.lastJsThreadUsed + 1;
|
|
220
|
-
if (threadToUse >= this.jsHashThreads.length) {
|
|
221
|
-
threadToUse = 0;
|
|
222
|
-
}
|
|
223
|
-
this.lastJsThreadUsed = threadToUse;
|
|
224
|
-
return await this.jsHashThreads[threadToUse].hash(data);
|
|
225
|
-
} finally {
|
|
226
|
-
this.jsSemaphore.release();
|
|
227
|
-
}
|
|
234
|
+
return await this.jsHashPool.queue(async (thread) => await thread.hash(data));
|
|
228
235
|
}
|
|
229
236
|
/**
|
|
230
237
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -243,54 +250,14 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
243
250
|
return JSON.stringify(this.hashFields(obj));
|
|
244
251
|
}
|
|
245
252
|
static async subtleHash(data) {
|
|
246
|
-
await this.
|
|
247
|
-
try {
|
|
248
|
-
if (this.subtleHashThreads.length < maxHashThreads) {
|
|
249
|
-
const code = subtleHashFunc.toString().slice(6);
|
|
250
|
-
const w = new Worker(
|
|
251
|
-
code,
|
|
252
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
253
|
-
{
|
|
254
|
-
fromSource: true
|
|
255
|
-
}
|
|
256
|
-
);
|
|
257
|
-
const worker = await spawn(w);
|
|
258
|
-
this.subtleHashThreads.push(worker);
|
|
259
|
-
}
|
|
260
|
-
let threadToUse = this.lastSubtleThreadUsed === void 0 ? 0 : this.lastSubtleThreadUsed + 1;
|
|
261
|
-
if (threadToUse >= this.subtleHashThreads.length) {
|
|
262
|
-
threadToUse = 0;
|
|
263
|
-
}
|
|
264
|
-
this.lastSubtleThreadUsed = threadToUse;
|
|
265
|
-
return await this.subtleHashThreads[threadToUse].hash(data);
|
|
266
|
-
} finally {
|
|
267
|
-
this.subtleSemaphore.release();
|
|
268
|
-
}
|
|
253
|
+
return await this.subtleHashPool.queue(async (thread) => await thread.hash(data));
|
|
269
254
|
}
|
|
270
255
|
static async wasmHash(data) {
|
|
271
|
-
await this.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
code,
|
|
277
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
278
|
-
{
|
|
279
|
-
fromSource: true
|
|
280
|
-
}
|
|
281
|
-
);
|
|
282
|
-
const worker = await spawn(w);
|
|
283
|
-
this.wasmHashThreads.push(worker);
|
|
284
|
-
}
|
|
285
|
-
let threadToUse = this.lastWasmThreadUsed === void 0 ? 0 : this.lastWasmThreadUsed + 1;
|
|
286
|
-
if (threadToUse >= this.wasmHashThreads.length) {
|
|
287
|
-
threadToUse = 0;
|
|
288
|
-
}
|
|
289
|
-
this.lastWasmThreadUsed = threadToUse;
|
|
290
|
-
return await this.wasmHashThreads[threadToUse].hash(data);
|
|
291
|
-
} finally {
|
|
292
|
-
this.wasmSemaphore.release();
|
|
293
|
-
}
|
|
256
|
+
return await this.wasmHashPool.queue(async (thread) => await thread.hash(data));
|
|
257
|
+
}
|
|
258
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
259
|
+
static createWorkerPool(url, func, size = 8) {
|
|
260
|
+
return Pool(() => spawn(this.createWorker(url, func)), size);
|
|
294
261
|
}
|
|
295
262
|
async hash() {
|
|
296
263
|
return await _PayloadHasher.hash(this.obj);
|
|
@@ -309,24 +276,31 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
309
276
|
};
|
|
310
277
|
__name(_PayloadHasher, "PayloadHasher");
|
|
311
278
|
__publicField(_PayloadHasher, "allowSubtle", true);
|
|
312
|
-
|
|
313
|
-
__publicField(_PayloadHasher, "
|
|
314
|
-
__publicField(_PayloadHasher, "
|
|
315
|
-
__publicField(_PayloadHasher, "
|
|
316
|
-
__publicField(_PayloadHasher, "lastSubtleThreadUsed");
|
|
317
|
-
__publicField(_PayloadHasher, "lastWasmThreadUsed");
|
|
318
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
319
|
-
__publicField(_PayloadHasher, "subtleHashThreads", []);
|
|
320
|
-
__publicField(_PayloadHasher, "subtleSemaphore", new Semaphore(maxHashThreads * maxListenersPerThread));
|
|
279
|
+
__publicField(_PayloadHasher, "createBrowserWorker");
|
|
280
|
+
__publicField(_PayloadHasher, "createNodeWorker");
|
|
281
|
+
__publicField(_PayloadHasher, "jsHashWorkerUrl");
|
|
282
|
+
__publicField(_PayloadHasher, "subtleHashWorkerUrl");
|
|
321
283
|
__publicField(_PayloadHasher, "warnIfUsingJsHash", true);
|
|
322
|
-
|
|
323
|
-
__publicField(_PayloadHasher, "wasmHashThreads", []);
|
|
284
|
+
__publicField(_PayloadHasher, "wasmHashWorkerUrl");
|
|
324
285
|
__publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
|
|
325
|
-
__publicField(_PayloadHasher, "wasmSemaphore", new Semaphore(maxHashThreads * maxListenersPerThread));
|
|
326
286
|
__publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
|
|
287
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
288
|
+
__publicField(_PayloadHasher, "_jsHashPool");
|
|
289
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
290
|
+
__publicField(_PayloadHasher, "_subtleHashPool");
|
|
291
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
292
|
+
__publicField(_PayloadHasher, "_wasmHashPool");
|
|
327
293
|
var PayloadHasher = _PayloadHasher;
|
|
294
|
+
|
|
295
|
+
// src/NodePayloadHasher.ts
|
|
296
|
+
PayloadHasher.createNodeWorker = createNodeWorker;
|
|
297
|
+
var _NodePayloadHasher = class _NodePayloadHasher extends PayloadHasher {
|
|
298
|
+
};
|
|
299
|
+
__name(_NodePayloadHasher, "NodePayloadHasher");
|
|
300
|
+
__publicField(_NodePayloadHasher, "createNodeWorker", createNodeWorker);
|
|
301
|
+
var NodePayloadHasher = _NodePayloadHasher;
|
|
328
302
|
export {
|
|
329
|
-
PayloadHasher,
|
|
303
|
+
NodePayloadHasher as PayloadHasher,
|
|
330
304
|
deepBy,
|
|
331
305
|
deepOmitPrefixedFields,
|
|
332
306
|
deepPickUnderscoreFields,
|