@xyo-network/hash 2.90.6 → 2.90.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/PayloadHasher-browser.d.cts +69 -0
- package/dist/browser/PayloadHasher-browser.d.cts.map +1 -0
- package/dist/browser/PayloadHasher-browser.d.mts +69 -0
- package/dist/browser/PayloadHasher-browser.d.mts.map +1 -0
- package/dist/browser/PayloadHasher-browser.d.ts +69 -0
- package/dist/browser/PayloadHasher-browser.d.ts.map +1 -0
- package/dist/browser/{index.cjs → index-browser.cjs} +47 -31
- package/dist/browser/index-browser.cjs.map +1 -0
- package/dist/browser/index-browser.d.cts +5 -0
- package/dist/browser/index-browser.d.cts.map +1 -0
- package/dist/browser/index-browser.d.mts +5 -0
- package/dist/browser/index-browser.d.mts.map +1 -0
- package/dist/browser/index-browser.d.ts +5 -0
- package/dist/browser/index-browser.d.ts.map +1 -0
- package/dist/browser/{index.js → index-browser.js} +42 -27
- package/dist/browser/index-browser.js.map +1 -0
- package/dist/node/PayloadHasher-browser.d.cts +69 -0
- package/dist/node/PayloadHasher-browser.d.cts.map +1 -0
- package/dist/node/PayloadHasher-browser.d.mts +69 -0
- package/dist/node/PayloadHasher-browser.d.mts.map +1 -0
- package/dist/node/PayloadHasher-browser.d.ts +69 -0
- package/dist/node/PayloadHasher-browser.d.ts.map +1 -0
- package/dist/node/index-browser.d.cts +5 -0
- package/dist/node/index-browser.d.cts.map +1 -0
- package/dist/node/index-browser.d.mts +5 -0
- package/dist/node/index-browser.d.mts.map +1 -0
- package/dist/node/index-browser.d.ts +5 -0
- package/dist/node/index-browser.d.ts.map +1 -0
- package/package.json +6 -6
- package/src/PayloadHasher-browser.ts +248 -0
- package/src/index-browser.ts +4 -0
- package/xy.config.ts +1 -1
- package/dist/browser/index.cjs.map +0 -1
- package/dist/browser/index.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
2
|
+
import { EmptyObject, ObjectWrapper } from '@xylabs/object';
|
|
3
|
+
import { WasmSupport } from '@xyo-network/wasm';
|
|
4
|
+
import { Semaphore } from 'async-mutex';
|
|
5
|
+
export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {
|
|
6
|
+
static allowSubtle: boolean;
|
|
7
|
+
static readonly jsHashThreads: any[];
|
|
8
|
+
static readonly jsSemaphore: Semaphore;
|
|
9
|
+
static lastJsThreadUsed: number;
|
|
10
|
+
static lastSubtleThreadUsed: number;
|
|
11
|
+
static lastWasmThreadUsed: number;
|
|
12
|
+
static readonly subtleHashThreads: any[];
|
|
13
|
+
static readonly subtleSemaphore: Semaphore;
|
|
14
|
+
static warnIfUsingJsHash: boolean;
|
|
15
|
+
static readonly wasmHashThreads: any[];
|
|
16
|
+
static readonly wasmInitialized: Promise<void>;
|
|
17
|
+
static readonly wasmSemaphore: Semaphore;
|
|
18
|
+
static readonly wasmSupport: WasmSupport;
|
|
19
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
20
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
21
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Asynchronously hashes a payload
|
|
24
|
+
* @param obj A payload
|
|
25
|
+
* @returns The payload hash
|
|
26
|
+
*/
|
|
27
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
28
|
+
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
31
|
+
* @param objs Any array of payloads
|
|
32
|
+
* @returns An array of payload/hash tuples
|
|
33
|
+
*/
|
|
34
|
+
static hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
35
|
+
/**
|
|
36
|
+
* Synchronously hashes a payload
|
|
37
|
+
* @param obj A payload
|
|
38
|
+
* @returns The payload hash
|
|
39
|
+
*/
|
|
40
|
+
static hashSync<T extends EmptyObject>(obj: T): Hash;
|
|
41
|
+
/**
|
|
42
|
+
* Creates an array of payload hashes based on the payloads passed in
|
|
43
|
+
* @param objs Any array of payloads
|
|
44
|
+
* @returns An array of payload hashes
|
|
45
|
+
*/
|
|
46
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
47
|
+
static jsHash(data: string): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns a clone of the payload that is JSON safe
|
|
50
|
+
* @param obj A payload
|
|
51
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
52
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
53
|
+
*/
|
|
54
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
55
|
+
/** @deprecated us json instead */
|
|
56
|
+
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
57
|
+
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
58
|
+
static subtleHash(data: Uint8Array): Promise<ArrayBuffer>;
|
|
59
|
+
static wasmHash(data: string): Promise<any>;
|
|
60
|
+
hash(): Promise<Hash>;
|
|
61
|
+
hashSync(): Hash;
|
|
62
|
+
/**
|
|
63
|
+
* Returns a clone of the payload that is JSON safe
|
|
64
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
65
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
66
|
+
*/
|
|
67
|
+
jsonPayload(meta?: boolean): T;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=PayloadHasher-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayloadHasher-browser.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
2
|
+
import { EmptyObject, ObjectWrapper } from '@xylabs/object';
|
|
3
|
+
import { WasmSupport } from '@xyo-network/wasm';
|
|
4
|
+
import { Semaphore } from 'async-mutex';
|
|
5
|
+
export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {
|
|
6
|
+
static allowSubtle: boolean;
|
|
7
|
+
static readonly jsHashThreads: any[];
|
|
8
|
+
static readonly jsSemaphore: Semaphore;
|
|
9
|
+
static lastJsThreadUsed: number;
|
|
10
|
+
static lastSubtleThreadUsed: number;
|
|
11
|
+
static lastWasmThreadUsed: number;
|
|
12
|
+
static readonly subtleHashThreads: any[];
|
|
13
|
+
static readonly subtleSemaphore: Semaphore;
|
|
14
|
+
static warnIfUsingJsHash: boolean;
|
|
15
|
+
static readonly wasmHashThreads: any[];
|
|
16
|
+
static readonly wasmInitialized: Promise<void>;
|
|
17
|
+
static readonly wasmSemaphore: Semaphore;
|
|
18
|
+
static readonly wasmSupport: WasmSupport;
|
|
19
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
20
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
21
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Asynchronously hashes a payload
|
|
24
|
+
* @param obj A payload
|
|
25
|
+
* @returns The payload hash
|
|
26
|
+
*/
|
|
27
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
28
|
+
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
31
|
+
* @param objs Any array of payloads
|
|
32
|
+
* @returns An array of payload/hash tuples
|
|
33
|
+
*/
|
|
34
|
+
static hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
35
|
+
/**
|
|
36
|
+
* Synchronously hashes a payload
|
|
37
|
+
* @param obj A payload
|
|
38
|
+
* @returns The payload hash
|
|
39
|
+
*/
|
|
40
|
+
static hashSync<T extends EmptyObject>(obj: T): Hash;
|
|
41
|
+
/**
|
|
42
|
+
* Creates an array of payload hashes based on the payloads passed in
|
|
43
|
+
* @param objs Any array of payloads
|
|
44
|
+
* @returns An array of payload hashes
|
|
45
|
+
*/
|
|
46
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
47
|
+
static jsHash(data: string): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns a clone of the payload that is JSON safe
|
|
50
|
+
* @param obj A payload
|
|
51
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
52
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
53
|
+
*/
|
|
54
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
55
|
+
/** @deprecated us json instead */
|
|
56
|
+
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
57
|
+
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
58
|
+
static subtleHash(data: Uint8Array): Promise<ArrayBuffer>;
|
|
59
|
+
static wasmHash(data: string): Promise<any>;
|
|
60
|
+
hash(): Promise<Hash>;
|
|
61
|
+
hashSync(): Hash;
|
|
62
|
+
/**
|
|
63
|
+
* Returns a clone of the payload that is JSON safe
|
|
64
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
65
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
66
|
+
*/
|
|
67
|
+
jsonPayload(meta?: boolean): T;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=PayloadHasher-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayloadHasher-browser.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
2
|
+
import { EmptyObject, ObjectWrapper } from '@xylabs/object';
|
|
3
|
+
import { WasmSupport } from '@xyo-network/wasm';
|
|
4
|
+
import { Semaphore } from 'async-mutex';
|
|
5
|
+
export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {
|
|
6
|
+
static allowSubtle: boolean;
|
|
7
|
+
static readonly jsHashThreads: any[];
|
|
8
|
+
static readonly jsSemaphore: Semaphore;
|
|
9
|
+
static lastJsThreadUsed: number;
|
|
10
|
+
static lastSubtleThreadUsed: number;
|
|
11
|
+
static lastWasmThreadUsed: number;
|
|
12
|
+
static readonly subtleHashThreads: any[];
|
|
13
|
+
static readonly subtleSemaphore: Semaphore;
|
|
14
|
+
static warnIfUsingJsHash: boolean;
|
|
15
|
+
static readonly wasmHashThreads: any[];
|
|
16
|
+
static readonly wasmInitialized: Promise<void>;
|
|
17
|
+
static readonly wasmSemaphore: Semaphore;
|
|
18
|
+
static readonly wasmSupport: WasmSupport;
|
|
19
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
20
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
21
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Asynchronously hashes a payload
|
|
24
|
+
* @param obj A payload
|
|
25
|
+
* @returns The payload hash
|
|
26
|
+
*/
|
|
27
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
28
|
+
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
31
|
+
* @param objs Any array of payloads
|
|
32
|
+
* @returns An array of payload/hash tuples
|
|
33
|
+
*/
|
|
34
|
+
static hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
35
|
+
/**
|
|
36
|
+
* Synchronously hashes a payload
|
|
37
|
+
* @param obj A payload
|
|
38
|
+
* @returns The payload hash
|
|
39
|
+
*/
|
|
40
|
+
static hashSync<T extends EmptyObject>(obj: T): Hash;
|
|
41
|
+
/**
|
|
42
|
+
* Creates an array of payload hashes based on the payloads passed in
|
|
43
|
+
* @param objs Any array of payloads
|
|
44
|
+
* @returns An array of payload hashes
|
|
45
|
+
*/
|
|
46
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
47
|
+
static jsHash(data: string): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns a clone of the payload that is JSON safe
|
|
50
|
+
* @param obj A payload
|
|
51
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
52
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
53
|
+
*/
|
|
54
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
55
|
+
/** @deprecated us json instead */
|
|
56
|
+
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
57
|
+
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
58
|
+
static subtleHash(data: Uint8Array): Promise<ArrayBuffer>;
|
|
59
|
+
static wasmHash(data: string): Promise<any>;
|
|
60
|
+
hash(): Promise<Hash>;
|
|
61
|
+
hashSync(): Hash;
|
|
62
|
+
/**
|
|
63
|
+
* Returns a clone of the payload that is JSON safe
|
|
64
|
+
* @param meta Keeps underscore (meta) fields if set to true
|
|
65
|
+
* @returns Returns a clone of the payload that is JSON safe
|
|
66
|
+
*/
|
|
67
|
+
jsonPayload(meta?: boolean): T;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=PayloadHasher-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayloadHasher-browser.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,9 +28,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
));
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
30
|
|
|
31
|
-
// src/index.ts
|
|
32
|
-
var
|
|
33
|
-
__export(
|
|
31
|
+
// src/index-browser.ts
|
|
32
|
+
var index_browser_exports = {};
|
|
33
|
+
__export(index_browser_exports, {
|
|
34
34
|
PayloadHasher: () => PayloadHasher,
|
|
35
35
|
deepBy: () => deepBy,
|
|
36
36
|
deepOmitPrefixedFields: () => deepOmitPrefixedFields,
|
|
@@ -38,9 +38,9 @@ __export(src_exports, {
|
|
|
38
38
|
removeEmptyFields: () => removeEmptyFields,
|
|
39
39
|
sortFields: () => sortFields
|
|
40
40
|
});
|
|
41
|
-
module.exports = __toCommonJS(
|
|
41
|
+
module.exports = __toCommonJS(index_browser_exports);
|
|
42
42
|
|
|
43
|
-
// src/PayloadHasher.ts
|
|
43
|
+
// src/PayloadHasher-browser.ts
|
|
44
44
|
var import_hex = require("@xylabs/hex");
|
|
45
45
|
var import_object3 = require("@xylabs/object");
|
|
46
46
|
var import_wasm = require("@xyo-network/wasm");
|
|
@@ -141,7 +141,8 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
141
141
|
});
|
|
142
142
|
}, "wasmHashFunc");
|
|
143
143
|
|
|
144
|
-
// src/PayloadHasher.ts
|
|
144
|
+
// src/PayloadHasher-browser.ts
|
|
145
|
+
var import_meta = {};
|
|
145
146
|
var wasmSupportStatic = new import_wasm.WasmSupport([
|
|
146
147
|
"bigInt"
|
|
147
148
|
]);
|
|
@@ -248,14 +249,19 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
248
249
|
}
|
|
249
250
|
try {
|
|
250
251
|
if (this.jsHashThreads.length < maxHashThreads) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
252
|
+
let w;
|
|
253
|
+
try {
|
|
254
|
+
w = new import_threads.Worker(new URL("worker/jsHash.js", import_meta.url));
|
|
255
|
+
} catch {
|
|
256
|
+
const code = jsHashFunc.toString().slice(6);
|
|
257
|
+
w = new import_threads.Worker(
|
|
258
|
+
code,
|
|
259
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
260
|
+
{
|
|
261
|
+
fromSource: true
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
}
|
|
259
265
|
const worker = await (0, import_threads.spawn)(w);
|
|
260
266
|
this.jsHashThreads.push(worker);
|
|
261
267
|
}
|
|
@@ -289,14 +295,19 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
289
295
|
await this.subtleSemaphore.acquire();
|
|
290
296
|
try {
|
|
291
297
|
if (this.subtleHashThreads.length < maxHashThreads) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
let w;
|
|
299
|
+
try {
|
|
300
|
+
w = new import_threads.Worker(new URL("worker/subtleHash.js", import_meta.url));
|
|
301
|
+
} catch {
|
|
302
|
+
const code = subtleHashFunc.toString().slice(6);
|
|
303
|
+
w = new import_threads.Worker(
|
|
304
|
+
code,
|
|
305
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
306
|
+
{
|
|
307
|
+
fromSource: true
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
}
|
|
300
311
|
const worker = await (0, import_threads.spawn)(w);
|
|
301
312
|
this.subtleHashThreads.push(worker);
|
|
302
313
|
}
|
|
@@ -314,14 +325,19 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
314
325
|
await this.wasmSemaphore.acquire();
|
|
315
326
|
try {
|
|
316
327
|
if (this.wasmHashThreads.length < maxHashThreads) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
328
|
+
let w;
|
|
329
|
+
try {
|
|
330
|
+
w = new import_threads.Worker(new URL("worker/wasmHash.js", import_meta.url));
|
|
331
|
+
} catch {
|
|
332
|
+
const code = wasmHashFunc.toString().slice(6);
|
|
333
|
+
w = new import_threads.Worker(
|
|
334
|
+
code,
|
|
335
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
336
|
+
{
|
|
337
|
+
fromSource: true
|
|
338
|
+
}
|
|
339
|
+
);
|
|
340
|
+
}
|
|
325
341
|
const worker = await (0, import_threads.spawn)(w);
|
|
326
342
|
this.wasmHashThreads.push(worker);
|
|
327
343
|
}
|
|
@@ -350,4 +366,4 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
350
366
|
return _PayloadHasher.jsonPayload(this.obj, meta);
|
|
351
367
|
}
|
|
352
368
|
};
|
|
353
|
-
//# sourceMappingURL=index.cjs.map
|
|
369
|
+
//# sourceMappingURL=index-browser.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index-browser.ts","../../src/PayloadHasher-browser.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.ts"],"sourcesContent":["export * from './PayloadHasher-browser'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { Semaphore } from 'async-mutex'\nimport shajs from 'sha.js'\nimport { spawn, Worker } from 'threads'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\nconst maxHashThreads = 8\nconst maxListenersPerThread = 1\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly jsHashThreads: any[] = []\n static readonly jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n\n static lastJsThreadUsed: number\n static lastSubtleThreadUsed: number\n static lastWasmThreadUsed: number\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly subtleHashThreads: any[] = []\n static readonly subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static warnIfUsingJsHash = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly wasmHashThreads: any[] = []\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n static async jsHash(data: string) {\n await this.jsSemaphore.acquire()\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n try {\n if (this.jsHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/jsHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = jsHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.jsHashThreads.push(worker)\n }\n let threadToUse = this.lastJsThreadUsed === undefined ? 0 : this.lastJsThreadUsed + 1\n if (threadToUse >= this.jsHashThreads.length) {\n threadToUse = 0\n }\n this.lastJsThreadUsed = threadToUse\n\n return await this.jsHashThreads[threadToUse].hash(data)\n } finally {\n this.jsSemaphore.release()\n }\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n await this.subtleSemaphore.acquire()\n try {\n if (this.subtleHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/subtleHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = subtleHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.subtleHashThreads.push(worker)\n }\n let threadToUse = this.lastSubtleThreadUsed === undefined ? 0 : this.lastSubtleThreadUsed + 1\n if (threadToUse >= this.subtleHashThreads.length) {\n threadToUse = 0\n }\n this.lastSubtleThreadUsed = threadToUse\n\n return await this.subtleHashThreads[threadToUse].hash(data)\n } finally {\n this.subtleSemaphore.release()\n }\n }\n\n static async wasmHash(data: string) {\n await this.wasmSemaphore.acquire()\n try {\n if (this.wasmHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/wasmHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = wasmHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.wasmHashThreads.push(worker)\n }\n let threadToUse = this.lastWasmThreadUsed === undefined ? 0 : this.lastWasmThreadUsed + 1\n if (threadToUse >= this.wasmHashThreads.length) {\n threadToUse = 0\n }\n this.lastWasmThreadUsed = threadToUse\n\n return await this.wasmHashThreads[threadToUse].hash(data)\n } finally {\n this.wasmSemaphore.release()\n }\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","maxHashThreads","maxListenersPerThread","PayloadHasher","ObjectWrapper","allowSubtle","jsHashThreads","jsSemaphore","Semaphore","lastJsThreadUsed","lastSubtleThreadUsed","lastWasmThreadUsed","subtleHashThreads","subtleSemaphore","warnIfUsingJsHash","wasmHashThreads","wasmInitialized","initialize","wasmSemaphore","wasmSupport","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","acquire","console","warn","length","w","Worker","URL","url","code","jsHashFunc","slice","fromSource","worker","spawn","push","threadToUse","release","json","payload","meta","jsonPayload","JSON","stringify","subtleHashFunc","wasmHashFunc"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
|
@@ -8,7 +8,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
8
8
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
// src/PayloadHasher.ts
|
|
11
|
+
// src/PayloadHasher-browser.ts
|
|
12
12
|
import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
|
|
13
13
|
import { ObjectWrapper } from "@xylabs/object";
|
|
14
14
|
import { WasmSupport } from "@xyo-network/wasm";
|
|
@@ -109,7 +109,7 @@ var wasmHashFunc = /* @__PURE__ */ __name(() => {
|
|
|
109
109
|
});
|
|
110
110
|
}, "wasmHashFunc");
|
|
111
111
|
|
|
112
|
-
// src/PayloadHasher.ts
|
|
112
|
+
// src/PayloadHasher-browser.ts
|
|
113
113
|
var wasmSupportStatic = new WasmSupport([
|
|
114
114
|
"bigInt"
|
|
115
115
|
]);
|
|
@@ -216,14 +216,19 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
216
216
|
}
|
|
217
217
|
try {
|
|
218
218
|
if (this.jsHashThreads.length < maxHashThreads) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
219
|
+
let w;
|
|
220
|
+
try {
|
|
221
|
+
w = new Worker(new URL("worker/jsHash.js", import.meta.url));
|
|
222
|
+
} catch {
|
|
223
|
+
const code = jsHashFunc.toString().slice(6);
|
|
224
|
+
w = new Worker(
|
|
225
|
+
code,
|
|
226
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
227
|
+
{
|
|
228
|
+
fromSource: true
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
}
|
|
227
232
|
const worker = await spawn(w);
|
|
228
233
|
this.jsHashThreads.push(worker);
|
|
229
234
|
}
|
|
@@ -257,14 +262,19 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
257
262
|
await this.subtleSemaphore.acquire();
|
|
258
263
|
try {
|
|
259
264
|
if (this.subtleHashThreads.length < maxHashThreads) {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
let w;
|
|
266
|
+
try {
|
|
267
|
+
w = new Worker(new URL("worker/subtleHash.js", import.meta.url));
|
|
268
|
+
} catch {
|
|
269
|
+
const code = subtleHashFunc.toString().slice(6);
|
|
270
|
+
w = new Worker(
|
|
271
|
+
code,
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
273
|
+
{
|
|
274
|
+
fromSource: true
|
|
275
|
+
}
|
|
276
|
+
);
|
|
277
|
+
}
|
|
268
278
|
const worker = await spawn(w);
|
|
269
279
|
this.subtleHashThreads.push(worker);
|
|
270
280
|
}
|
|
@@ -282,14 +292,19 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
282
292
|
await this.wasmSemaphore.acquire();
|
|
283
293
|
try {
|
|
284
294
|
if (this.wasmHashThreads.length < maxHashThreads) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
295
|
+
let w;
|
|
296
|
+
try {
|
|
297
|
+
w = new Worker(new URL("worker/wasmHash.js", import.meta.url));
|
|
298
|
+
} catch {
|
|
299
|
+
const code = wasmHashFunc.toString().slice(6);
|
|
300
|
+
w = new Worker(
|
|
301
|
+
code,
|
|
302
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
303
|
+
{
|
|
304
|
+
fromSource: true
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
}
|
|
293
308
|
const worker = await spawn(w);
|
|
294
309
|
this.wasmHashThreads.push(worker);
|
|
295
310
|
}
|
|
@@ -326,4 +341,4 @@ export {
|
|
|
326
341
|
removeEmptyFields,
|
|
327
342
|
sortFields
|
|
328
343
|
};
|
|
329
|
-
//# sourceMappingURL=index.js.map
|
|
344
|
+
//# sourceMappingURL=index-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher-browser.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts","../../src/worker/jsHash.ts","../../src/worker/subtleHash.ts","../../src/worker/wasmHash.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { Semaphore } from 'async-mutex'\nimport shajs from 'sha.js'\nimport { spawn, Worker } from 'threads'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\nimport { jsHashFunc, subtleHashFunc, wasmHashFunc } from './worker'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\nconst maxHashThreads = 8\nconst maxListenersPerThread = 1\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly jsHashThreads: any[] = []\n static readonly jsSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n\n static lastJsThreadUsed: number\n static lastSubtleThreadUsed: number\n static lastWasmThreadUsed: number\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly subtleHashThreads: any[] = []\n static readonly subtleSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static warnIfUsingJsHash = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly wasmHashThreads: any[] = []\n\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSemaphore = new Semaphore(maxHashThreads * maxListenersPerThread)\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {\n const stringToHash = this.stringifyHashFields(obj)\n\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const data = enc.encode(stringToHash)\n const hashArray = await this.subtleHash(data)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch {\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n try {\n return this.wasmHash(stringToHash)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return await this.jsHash(stringToHash)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n static async jsHash(data: string) {\n await this.jsSemaphore.acquire()\n if (PayloadHasher.warnIfUsingJsHash) {\n console.warn('Using jsHash [No subtle or wasm?]')\n }\n try {\n if (this.jsHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/jsHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = jsHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.jsHashThreads.push(worker)\n }\n let threadToUse = this.lastJsThreadUsed === undefined ? 0 : this.lastJsThreadUsed + 1\n if (threadToUse >= this.jsHashThreads.length) {\n threadToUse = 0\n }\n this.lastJsThreadUsed = threadToUse\n\n return await this.jsHashThreads[threadToUse].hash(data)\n } finally {\n this.jsSemaphore.release()\n }\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async subtleHash(data: Uint8Array): Promise<ArrayBuffer> {\n await this.subtleSemaphore.acquire()\n try {\n if (this.subtleHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/subtleHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = subtleHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.subtleHashThreads.push(worker)\n }\n let threadToUse = this.lastSubtleThreadUsed === undefined ? 0 : this.lastSubtleThreadUsed + 1\n if (threadToUse >= this.subtleHashThreads.length) {\n threadToUse = 0\n }\n this.lastSubtleThreadUsed = threadToUse\n\n return await this.subtleHashThreads[threadToUse].hash(data)\n } finally {\n this.subtleSemaphore.release()\n }\n }\n\n static async wasmHash(data: string) {\n await this.wasmSemaphore.acquire()\n try {\n if (this.wasmHashThreads.length < maxHashThreads) {\n let w: Worker\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n w = new Worker(new URL('worker/wasmHash.js', import.meta.url) as any)\n } catch {\n //we do this to make jsdom work\n const code = wasmHashFunc.toString().slice(6)\n w = new Worker(\n code,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { fromSource: true } as any,\n )\n }\n const worker = await spawn(w)\n this.wasmHashThreads.push(worker)\n }\n let threadToUse = this.lastWasmThreadUsed === undefined ? 0 : this.lastWasmThreadUsed + 1\n if (threadToUse >= this.wasmHashThreads.length) {\n threadToUse = 0\n }\n this.lastWasmThreadUsed = threadToUse\n\n return await this.wasmHashThreads[threadToUse].hash(data)\n } finally {\n this.wasmSemaphore.release()\n }\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n }\n return newObject as T\n}\n","import { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const jsHashFunc = () => {\n const shajs = require('sha.js')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n hash(data: string) {\n return asHash(shajs('sha256').update(data).digest().toString('hex'), true)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const subtleHashFunc = () => {\n const { subtle } = require('@xylabs/platform')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: ArrayBuffer) {\n return await subtle.digest('SHA-256', data)\n },\n })\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport const wasmHashFunc = () => {\n const { sha256 } = require('hash-wasm')\n const { asHash } = require('@xylabs/hex')\n // eslint-disable-next-line import/no-internal-modules\n const { expose } = require('threads/worker')\n\n expose({\n async hash(data: string) {\n return asHash(await sha256(data), true)\n },\n })\n}\n"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","WasmSupport","Semaphore","shajs","spawn","Worker","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","jsHashFunc","shajs","require","asHash","expose","hash","data","update","digest","toString","subtleHashFunc","subtle","require","expose","hash","data","digest","wasmHashFunc","sha256","require","asHash","expose","hash","data","wasmSupportStatic","WasmSupport","maxHashThreads","maxListenersPerThread","PayloadHasher","ObjectWrapper","allowSubtle","jsHashThreads","jsSemaphore","Semaphore","lastJsThreadUsed","lastSubtleThreadUsed","lastWasmThreadUsed","subtleHashThreads","subtleSemaphore","warnIfUsingJsHash","wasmHashThreads","wasmInitialized","initialize","wasmSemaphore","wasmSupport","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","stringToHash","stringifyHashFields","enc","TextEncoder","data","encode","hashArray","subtleHash","hexFromArrayBuffer","bitLength","canUseWasm","wasmHash","allowWasm","jsHash","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","hashSync","asHash","shajs","update","digest","toString","undefined","acquire","console","warn","length","w","Worker","URL","url","code","jsHashFunc","slice","fromSource","worker","spawn","push","threadToUse","release","json","payload","meta","jsonPayload","JSON","stringify","subtleHashFunc","wasmHashFunc"]}
|