@xyo-network/hash 2.88.3 → 2.89.0-rc.2
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.d.cts +3 -9
- package/dist/browser/PayloadHasher.d.cts.map +1 -1
- package/dist/browser/PayloadHasher.d.mts +3 -9
- package/dist/browser/PayloadHasher.d.mts.map +1 -1
- package/dist/browser/PayloadHasher.d.ts +3 -9
- package/dist/browser/PayloadHasher.d.ts.map +1 -1
- package/dist/browser/index.cjs +11 -24
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +11 -24
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/removeFields.d.cts +1 -1
- package/dist/browser/removeFields.d.cts.map +1 -1
- package/dist/browser/removeFields.d.mts +1 -1
- package/dist/browser/removeFields.d.mts.map +1 -1
- package/dist/browser/removeFields.d.ts +1 -1
- package/dist/browser/removeFields.d.ts.map +1 -1
- package/dist/node/PayloadHasher.d.cts +3 -9
- package/dist/node/PayloadHasher.d.cts.map +1 -1
- package/dist/node/PayloadHasher.d.mts +3 -9
- package/dist/node/PayloadHasher.d.mts.map +1 -1
- package/dist/node/PayloadHasher.d.ts +3 -9
- package/dist/node/PayloadHasher.d.ts.map +1 -1
- package/dist/node/index.cjs +12 -25
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +11 -24
- package/dist/node/index.js.map +1 -1
- package/dist/node/removeFields.d.cts +1 -1
- package/dist/node/removeFields.d.cts.map +1 -1
- package/dist/node/removeFields.d.mts +1 -1
- package/dist/node/removeFields.d.mts.map +1 -1
- package/dist/node/removeFields.d.ts +1 -1
- package/dist/node/removeFields.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/PayloadHasher.ts +9 -24
- package/src/removeFields.ts +2 -2
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -33,7 +33,7 @@ var src_exports = {};
|
|
|
33
33
|
__export(src_exports, {
|
|
34
34
|
PayloadHasher: () => PayloadHasher,
|
|
35
35
|
deepBy: () => deepBy,
|
|
36
|
-
|
|
36
|
+
deepOmitPrefixedFields: () => deepOmitPrefixedFields,
|
|
37
37
|
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
38
38
|
removeEmptyFields: () => removeEmptyFields,
|
|
39
39
|
sortFields: () => sortFields
|
|
@@ -77,9 +77,9 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
|
|
|
77
77
|
const processedObjects = (0, import_lodash.mapValues)(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
78
78
|
return (0, import_lodash.merge)({}, pickedNonObjects, processedObjects);
|
|
79
79
|
}, "deepBy");
|
|
80
|
-
var
|
|
81
|
-
return deepBy(obj, (_, key) => key.startsWith(
|
|
82
|
-
}, "
|
|
80
|
+
var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
|
|
81
|
+
return deepBy(obj, (_, key) => key.startsWith(prefix), import_lodash.omitBy);
|
|
82
|
+
}, "deepOmitPrefixedFields");
|
|
83
83
|
var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
|
|
84
84
|
return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.pickBy);
|
|
85
85
|
}, "deepPickUnderscoreFields");
|
|
@@ -129,7 +129,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
129
129
|
* @param obj A payload
|
|
130
130
|
* @returns The payload hash
|
|
131
131
|
*/
|
|
132
|
-
static async
|
|
132
|
+
static async hash(obj) {
|
|
133
133
|
if (_PayloadHasher.allowSubtle) {
|
|
134
134
|
try {
|
|
135
135
|
const enc = new TextEncoder();
|
|
@@ -158,7 +158,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
158
158
|
return this.hashSync(obj);
|
|
159
159
|
}
|
|
160
160
|
static hashFields(obj) {
|
|
161
|
-
return sortFields(removeEmptyFields(
|
|
161
|
+
return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, "_")));
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
164
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -168,7 +168,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
168
168
|
static async hashPairs(objs) {
|
|
169
169
|
return await Promise.all(objs.map(async (obj) => [
|
|
170
170
|
obj,
|
|
171
|
-
await _PayloadHasher.
|
|
171
|
+
await _PayloadHasher.hash(obj)
|
|
172
172
|
]));
|
|
173
173
|
}
|
|
174
174
|
/**
|
|
@@ -185,7 +185,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
185
185
|
* @returns An array of payload hashes
|
|
186
186
|
*/
|
|
187
187
|
static async hashes(objs) {
|
|
188
|
-
return await Promise.all(objs.map((obj) => this.
|
|
188
|
+
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
189
189
|
}
|
|
190
190
|
/**
|
|
191
191
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -194,26 +194,13 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
194
194
|
* @returns Returns a clone of the payload that is JSON safe
|
|
195
195
|
*/
|
|
196
196
|
static jsonPayload(payload, meta = false) {
|
|
197
|
-
return sortFields(removeEmptyFields(meta ? payload :
|
|
197
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
198
198
|
}
|
|
199
199
|
static stringifyHashFields(obj) {
|
|
200
200
|
return JSON.stringify(this.hashFields(obj));
|
|
201
201
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
* @param objs Any array of payloads
|
|
205
|
-
* @returns A map of hashes to payloads
|
|
206
|
-
*/
|
|
207
|
-
static async toMap(objs) {
|
|
208
|
-
return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
|
|
209
|
-
return [
|
|
210
|
-
await _PayloadHasher.hashAsync(obj),
|
|
211
|
-
obj
|
|
212
|
-
];
|
|
213
|
-
})));
|
|
214
|
-
}
|
|
215
|
-
async hashAsync() {
|
|
216
|
-
return await _PayloadHasher.hashAsync(this.obj);
|
|
202
|
+
async hash() {
|
|
203
|
+
return await _PayloadHasher.hash(this.obj);
|
|
217
204
|
}
|
|
218
205
|
hashSync() {
|
|
219
206
|
return _PayloadHasher.hashSync(this.obj);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.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 { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 hashAsync<T extends EmptyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(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.hashAsync(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[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n /**\n * Creates an object map of payload hashes to payloads based on the payloads passed in\n * @param objs Any array of payloads\n * @returns A map of hashes to payloads\n */\n static async toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>> {\n return Object.fromEntries(\n await Promise.all(\n objs.map(async (obj) => {\n return [await PayloadHasher.hashAsync(obj), obj]\n }),\n ),\n )\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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 deepOmitUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"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","deepOmitUnderscoreFields","_","key","startsWith","deepPickUnderscoreFields","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","hashAsync","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitUnderscoreFields","Promise","all","shajs","update","toString","jsonPayload","payload","meta","JSON","stringify","toMap","Object","fromEntries"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.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 { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\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 /**\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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(obj, (_, key) => key.startsWith(prefix), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"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","startsWith","deepPickUnderscoreFields","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -38,9 +38,9 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
|
|
|
38
38
|
const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
39
39
|
return merge({}, pickedNonObjects, processedObjects);
|
|
40
40
|
}, "deepBy");
|
|
41
|
-
var
|
|
42
|
-
return deepBy(obj, (_, key) => key.startsWith(
|
|
43
|
-
}, "
|
|
41
|
+
var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
|
|
42
|
+
return deepBy(obj, (_, key) => key.startsWith(prefix), omitBy);
|
|
43
|
+
}, "deepOmitPrefixedFields");
|
|
44
44
|
var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
|
|
45
45
|
return deepBy(obj, (_, key) => key.startsWith("_"), pickBy);
|
|
46
46
|
}, "deepPickUnderscoreFields");
|
|
@@ -90,7 +90,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
90
90
|
* @param obj A payload
|
|
91
91
|
* @returns The payload hash
|
|
92
92
|
*/
|
|
93
|
-
static async
|
|
93
|
+
static async hash(obj) {
|
|
94
94
|
if (_PayloadHasher.allowSubtle) {
|
|
95
95
|
try {
|
|
96
96
|
const enc = new TextEncoder();
|
|
@@ -119,7 +119,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
119
119
|
return this.hashSync(obj);
|
|
120
120
|
}
|
|
121
121
|
static hashFields(obj) {
|
|
122
|
-
return sortFields(removeEmptyFields(
|
|
122
|
+
return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, "_")));
|
|
123
123
|
}
|
|
124
124
|
/**
|
|
125
125
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -129,7 +129,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
129
129
|
static async hashPairs(objs) {
|
|
130
130
|
return await Promise.all(objs.map(async (obj) => [
|
|
131
131
|
obj,
|
|
132
|
-
await _PayloadHasher.
|
|
132
|
+
await _PayloadHasher.hash(obj)
|
|
133
133
|
]));
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
@@ -146,7 +146,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
146
146
|
* @returns An array of payload hashes
|
|
147
147
|
*/
|
|
148
148
|
static async hashes(objs) {
|
|
149
|
-
return await Promise.all(objs.map((obj) => this.
|
|
149
|
+
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
152
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -155,26 +155,13 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
155
155
|
* @returns Returns a clone of the payload that is JSON safe
|
|
156
156
|
*/
|
|
157
157
|
static jsonPayload(payload, meta = false) {
|
|
158
|
-
return sortFields(removeEmptyFields(meta ? payload :
|
|
158
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
159
159
|
}
|
|
160
160
|
static stringifyHashFields(obj) {
|
|
161
161
|
return JSON.stringify(this.hashFields(obj));
|
|
162
162
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
* @param objs Any array of payloads
|
|
166
|
-
* @returns A map of hashes to payloads
|
|
167
|
-
*/
|
|
168
|
-
static async toMap(objs) {
|
|
169
|
-
return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
|
|
170
|
-
return [
|
|
171
|
-
await _PayloadHasher.hashAsync(obj),
|
|
172
|
-
obj
|
|
173
|
-
];
|
|
174
|
-
})));
|
|
175
|
-
}
|
|
176
|
-
async hashAsync() {
|
|
177
|
-
return await _PayloadHasher.hashAsync(this.obj);
|
|
163
|
+
async hash() {
|
|
164
|
+
return await _PayloadHasher.hash(this.obj);
|
|
178
165
|
}
|
|
179
166
|
hashSync() {
|
|
180
167
|
return _PayloadHasher.hashSync(this.obj);
|
|
@@ -191,7 +178,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
191
178
|
export {
|
|
192
179
|
PayloadHasher,
|
|
193
180
|
deepBy,
|
|
194
|
-
|
|
181
|
+
deepOmitPrefixedFields,
|
|
195
182
|
deepPickUnderscoreFields,
|
|
196
183
|
removeEmptyFields,
|
|
197
184
|
sortFields
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 hashAsync<T extends EmptyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(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.hashAsync(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[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n /**\n * Creates an object map of payload hashes to payloads based on the payloads passed in\n * @param objs Any array of payloads\n * @returns A map of hashes to payloads\n */\n static async toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>> {\n return Object.fromEntries(\n await Promise.all(\n objs.map(async (obj) => {\n return [await PayloadHasher.hashAsync(obj), obj]\n }),\n ),\n )\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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 deepOmitUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","isObject","mapValues","merge","omitBy","pickBy","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitUnderscoreFields","_","key","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","hashAsync","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitUnderscoreFields","Promise","all","shajs","update","toString","jsonPayload","payload","meta","JSON","stringify","toMap","Object","fromEntries"]}
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\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 /**\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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(obj, (_, key) => key.startsWith(prefix), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"mappings":";;;;AAAA,SAASA,QAAcC,0BAA0B;AACjD,SAAsBC,qBAAqB;AAC3C,SAASC,cAAc;AACvB,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,OAAOC,WAAW;;;ACJlB,SAASC,cAAc;AAEhB,IAAMC,oBAAoB,wBAAwBC,QAAAA;AACvD,MAAIA,QAAQ,QAAQC,MAAMC,QAAQF,GAAAA;AAAM,WAAOA;AAE/C,QAAMG,YAAuB,CAAC;AAC9B,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQP,GAAAA,GAAM;AAC9C,QAAIQ,OAAOH,KAAAA,MAAW,UAAU;AAC9BF,gBAAUC,GAAAA,IAAOL,kBAAkBM,KAAAA;IACrC,WAAWA,UAAUI,QAAW;AAC9BN,gBAAUC,GAAAA,IAAOC;IACnB;EACF;AACA,SAAOF;AACT,GAZiC;;;ACHjC,SAASO,UAAUC,WAAWC,OAAOC,QAAQC,cAAc;AAKpD,IAAMC,SAAS,wBAAwBC,KAAQC,WAAgCC,SAAAA;AACpF,MAAIC,MAAMC,QAAQJ,GAAAA,GAAM;AACtB,WAAOA;EACT;AAGA,QAAMK,cAAcC,OAAUN,KAAKO,QAAAA;AAGnC,QAAMC,aAAaF,OAAUN,KAAK,CAACS,UAAU,CAACF,SAASE,KAAAA,CAAAA;AAEvD,QAAMC,gBAAgBC,OAAON,aAAaJ,SAAAA;AAC1C,QAAMW,mBAAmBD,OAAOH,YAAYP,SAAAA;AAE5C,QAAMY,mBAAmBC,UAAUJ,eAAe,CAACV,SAAWD,OAAOC,MAAKC,WAAWC,IAAAA,CAAAA;AAErF,SAAOa,MAAM,CAAC,GAAGH,kBAAkBC,gBAAAA;AACrC,GAjBsB;AAmBf,IAAMG,yBAAyB,wBAAwBhB,KAAQiB,WAAAA;AACpE,SAAOlB,OAAOC,KAAK,CAACkB,GAAGC,QAAQA,IAAIC,WAAWH,MAAAA,GAASN,MAAAA;AACzD,GAFsC;AAI/B,IAAMU,2BAA2B,wBAAwBrB,QAAAA;AAC9D,SAAOD,OAAOC,KAAK,CAACkB,GAAGC,QAAQA,IAAIC,WAAW,GAAA,GAAMd,MAAAA;AACtD,GAFwC;;;AC5BxC,SAAiCgB,YAAAA,iBAAgB;AAGjD,IAAMC,UAAU,wBAACC,UAAAA;AACf,SAAOC,UAASD,KAAAA,IAASE,WAAWF,KAAAA,IAASA;AAC/C,GAFgB;AAIT,IAAME,aAAa,wBAAwBC,QAAAA;AAChD,QAAMC,SAAoB,CAAC;AAC3B,QAAMC,OAAOC,OAAOD,KAAKF,GAAAA;AACzB,aAAWI,OAAOF,KAAKG,KAAI,GAAI;AAC7BJ,WAAOG,GAAAA,IAAOR,QAAQI,IAAII,GAAAA,CAAI;EAChC;AACA,SAAOH;AACT,GAP0B;;;AHI1B,IAAMK,oBAAoB,IAAIC,YAAY;EAAC;CAAS;AAE7C,IAAMC,gBAAN,MAAMA,uBAA2DC,cAAAA;EAbxE,OAawEA;;;EACtE,OAAOC,cAAc;EACrB,OAAgBC,kBAAkBL,kBAAkBM,WAAU;EAC9D,OAAgBC,cAAcP;EAE9B,aAAaQ,cAAqCC,OAAY,CAAA,GAAIC,MAAmC;AACnG,UAAMC,SAASC,MAAMC,QAAQH,IAAAA,IAAQA,OAAO;MAACA;;AAC7C,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOM,OAAO,CAAC,CAACC,GAAGC,OAAAA,MAAa,CAACN,OAAOO,SAASD,OAAAA,CAAAA,GAAWE,IAAI,CAACC,SAASA,KAAK,CAAA,CAAE;EAChH;EAEA,aAAaC,cAAqCZ,OAAY,CAAA,GAAIC,MAAmC;AACnG,UAAMC,SAASC,MAAMC,QAAQH,IAAAA,IAAQA,OAAO;MAACA;;AAC7C,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOM,OAAO,CAAC,CAACC,GAAGC,OAAAA,MAAaN,OAAOO,SAASD,OAAAA,CAAAA,GAAWE,IAAI,CAACC,SAASA,KAAK,CAAA,CAAE;EAC/G;EAEA,aAAaE,KAA4Bb,OAAY,CAAA,GAAIC,MAAoC;AAC3F,YAAQ,MAAM,KAAKI,UAAUL,IAAAA,GAAOa,KAAK,CAAC,CAACN,GAAGC,OAAAA,MAAaA,YAAYP,IAAAA,IAAQ,CAAA;EACjF;;;;;;EAOA,aAAaA,KAA4Ba,KAAuB;AAC9D,QAAIrB,eAAcE,aAAa;AAC7B,UAAI;AACF,cAAMoB,MAAM,IAAIC,YAAAA;AAChB,cAAMC,eAAe,KAAKC,oBAAoBJ,GAAAA;AAC9C,cAAMK,IAAIJ,IAAIK,OAAOH,YAAAA;AACrB,cAAMI,YAAY,MAAMC,OAAOC,OAAO,WAAWJ,CAAAA;AACjD,eAAOK,mBAAmBH,WAAW;UAAEI,WAAW;QAAI,CAAA;MACxD,SAASC,IAAI;AACX,cAAMC,QAAQD;AACdE,gBAAQD,MAAM,iCAAiCA,MAAME,OAAO,GAAG;AAC/DD,gBAAQE,IAAIH,MAAMI,KAAK;AACvBtC,uBAAcE,cAAc;MAC9B;IACF;AAEA,UAAM,KAAKC;AACX,QAAI,KAAKE,YAAYkC,YAAY;AAC/B,YAAMf,eAAe,KAAKC,oBAAoBJ,GAAAA;AAC9C,UAAI;AACF,eAAOmB,OAAO,MAAMC,OAAOjB,YAAAA,GAAe,IAAA;MAC5C,QAAQ;AACN,aAAKnB,YAAYqC,YAAY;MAC/B;IACF;AACA,WAAO,KAAKC,SAAStB,GAAAA;EACvB;EAEA,OAAOuB,WAAkCvB,KAAW;AAClD,WAAOwB,WAAWC,kBAAkBC,uBAAuB1B,KAAK,GAAA,CAAA,CAAA;EAClE;;;;;;EAOA,aAAaT,UAAiCL,MAAiC;AAC7E,WAAO,MAAMyC,QAAQC,IAAI1C,KAAKU,IAA0B,OAAOI,QAAQ;MAACA;MAAK,MAAMrB,eAAcQ,KAAKa,GAAAA;KAAK,CAAA;EAC7G;;;;;;EAOA,OAAOsB,SAAgCtB,KAAc;AACnD,WAAOmB,OAAOU,MAAM,QAAA,EAAUC,OAAO,KAAK1B,oBAAoBJ,GAAAA,CAAAA,EAAMS,OAAM,EAAGsB,SAAS,KAAA,GAAQ,IAAA;EAChG;;;;;;EAOA,aAAa3C,OAA8BF,MAAyC;AAClF,WAAOA,OAAO,MAAMyC,QAAQC,IAAI1C,KAAKU,IAAI,CAACI,QAAQ,KAAKb,KAAKa,GAAAA,CAAAA,CAAAA,IAASgC;EACvE;;;;;;;EAQA,OAAOC,YAAmCC,SAAYC,OAAO,OAAU;AACrE,WAAOX,WAAWC,kBAAkBU,OAAOD,UAAUR,uBAAuBQ,SAAS,GAAA,CAAA,CAAA;EACvF;EAEA,OAAO9B,oBAA2CJ,KAAQ;AACxD,WAAOoC,KAAKC,UAAU,KAAKd,WAAWvB,GAAAA,CAAAA;EACxC;EAEA,MAAMb,OAAsB;AAC1B,WAAO,MAAMR,eAAcQ,KAAK,KAAKa,GAAG;EAC1C;EAEAsB,WAAiB;AACf,WAAO3C,eAAc2C,SAAS,KAAKtB,GAAG;EACxC;;;;;;EAOAiC,YAAYE,OAAO,OAAU;AAC3B,WAAOxD,eAAcsD,YAAY,KAAKjC,KAAKmC,IAAAA;EAC7C;AACF;","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","isObject","mapValues","merge","omitBy","pickBy","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -13,7 +13,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
13
13
|
* @param obj A payload
|
|
14
14
|
* @returns The payload hash
|
|
15
15
|
*/
|
|
16
|
-
static
|
|
16
|
+
static hash<T extends EmptyObject>(obj: T): Promise<Hash>;
|
|
17
17
|
static hashFields<T extends EmptyObject>(obj: T): T;
|
|
18
18
|
/**
|
|
19
19
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -32,7 +32,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
32
32
|
* @param objs Any array of payloads
|
|
33
33
|
* @returns An array of payload hashes
|
|
34
34
|
*/
|
|
35
|
-
static hashes<T extends EmptyObject>(objs
|
|
35
|
+
static hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined>;
|
|
36
36
|
/**
|
|
37
37
|
* Returns a clone of the payload that is JSON safe
|
|
38
38
|
* @param obj A payload
|
|
@@ -41,13 +41,7 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
41
41
|
*/
|
|
42
42
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
43
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
|
-
|
|
45
|
-
* Creates an object map of payload hashes to payloads based on the payloads passed in
|
|
46
|
-
* @param objs Any array of payloads
|
|
47
|
-
* @returns A map of hashes to payloads
|
|
48
|
-
*/
|
|
49
|
-
static toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
50
|
-
hashAsync(): Promise<Hash>;
|
|
44
|
+
hash(): Promise<Hash>;
|
|
51
45
|
hashSync(): Hash;
|
|
52
46
|
/**
|
|
53
47
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKvF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5F;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -38,7 +38,7 @@ var src_exports = {};
|
|
|
38
38
|
__export(src_exports, {
|
|
39
39
|
PayloadHasher: () => PayloadHasher,
|
|
40
40
|
deepBy: () => deepBy,
|
|
41
|
-
|
|
41
|
+
deepOmitPrefixedFields: () => deepOmitPrefixedFields,
|
|
42
42
|
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
43
43
|
removeEmptyFields: () => removeEmptyFields,
|
|
44
44
|
sortFields: () => sortFields
|
|
@@ -82,9 +82,9 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
|
|
|
82
82
|
const processedObjects = (0, import_lodash.mapValues)(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
83
83
|
return (0, import_lodash.merge)({}, pickedNonObjects, processedObjects);
|
|
84
84
|
}, "deepBy");
|
|
85
|
-
var
|
|
86
|
-
return deepBy(obj, (_, key) => key.startsWith(
|
|
87
|
-
}, "
|
|
85
|
+
var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
|
|
86
|
+
return deepBy(obj, (_, key) => key.startsWith(prefix), import_lodash.omitBy);
|
|
87
|
+
}, "deepOmitPrefixedFields");
|
|
88
88
|
var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
|
|
89
89
|
return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.pickBy);
|
|
90
90
|
}, "deepPickUnderscoreFields");
|
|
@@ -131,7 +131,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
131
131
|
* @param obj A payload
|
|
132
132
|
* @returns The payload hash
|
|
133
133
|
*/
|
|
134
|
-
static async
|
|
134
|
+
static async hash(obj) {
|
|
135
135
|
if (_PayloadHasher.allowSubtle) {
|
|
136
136
|
try {
|
|
137
137
|
const enc = new TextEncoder();
|
|
@@ -160,7 +160,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
160
160
|
return this.hashSync(obj);
|
|
161
161
|
}
|
|
162
162
|
static hashFields(obj) {
|
|
163
|
-
return sortFields(removeEmptyFields(
|
|
163
|
+
return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, "_")));
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
166
166
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -170,7 +170,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
170
170
|
static async hashPairs(objs) {
|
|
171
171
|
return await Promise.all(objs.map(async (obj) => [
|
|
172
172
|
obj,
|
|
173
|
-
await _PayloadHasher.
|
|
173
|
+
await _PayloadHasher.hash(obj)
|
|
174
174
|
]));
|
|
175
175
|
}
|
|
176
176
|
/**
|
|
@@ -187,7 +187,7 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
187
187
|
* @returns An array of payload hashes
|
|
188
188
|
*/
|
|
189
189
|
static async hashes(objs) {
|
|
190
|
-
return await Promise.all(objs.map((obj) => this.
|
|
190
|
+
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
193
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -196,26 +196,13 @@ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
196
196
|
* @returns Returns a clone of the payload that is JSON safe
|
|
197
197
|
*/
|
|
198
198
|
static jsonPayload(payload, meta = false) {
|
|
199
|
-
return sortFields(removeEmptyFields(meta ? payload :
|
|
199
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
200
200
|
}
|
|
201
201
|
static stringifyHashFields(obj) {
|
|
202
202
|
return JSON.stringify(this.hashFields(obj));
|
|
203
203
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
* @param objs Any array of payloads
|
|
207
|
-
* @returns A map of hashes to payloads
|
|
208
|
-
*/
|
|
209
|
-
static async toMap(objs) {
|
|
210
|
-
return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
|
|
211
|
-
return [
|
|
212
|
-
await _PayloadHasher.hashAsync(obj),
|
|
213
|
-
obj
|
|
214
|
-
];
|
|
215
|
-
})));
|
|
216
|
-
}
|
|
217
|
-
async hashAsync() {
|
|
218
|
-
return await _PayloadHasher.hashAsync(this.obj);
|
|
204
|
+
async hash() {
|
|
205
|
+
return await _PayloadHasher.hash(this.obj);
|
|
219
206
|
}
|
|
220
207
|
hashSync() {
|
|
221
208
|
return _PayloadHasher.hashSync(this.obj);
|
|
@@ -238,7 +225,7 @@ var PayloadHasher = _PayloadHasher;
|
|
|
238
225
|
0 && (module.exports = {
|
|
239
226
|
PayloadHasher,
|
|
240
227
|
deepBy,
|
|
241
|
-
|
|
228
|
+
deepOmitPrefixedFields,
|
|
242
229
|
deepPickUnderscoreFields,
|
|
243
230
|
removeEmptyFields,
|
|
244
231
|
sortFields
|
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"],"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 { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 hashAsync<T extends EmptyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(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.hashAsync(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[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n /**\n * Creates an object map of payload hashes to payloads based on the payloads passed in\n * @param objs Any array of payloads\n * @returns A map of hashes to payloads\n */\n static async toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>> {\n return Object.fromEntries(\n await Promise.all(\n objs.map(async (obj) => {\n return [await PayloadHasher.hashAsync(obj), obj]\n }),\n ),\n )\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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 deepOmitUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"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","deepOmitUnderscoreFields","_","key","startsWith","deepPickUnderscoreFields","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","hashAsync","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitUnderscoreFields","Promise","all","shajs","update","toString","jsonPayload","payload","meta","JSON","stringify","toMap","Object","fromEntries","initialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.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 { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\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 /**\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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(obj, (_, key) => key.startsWith(prefix), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"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","startsWith","deepPickUnderscoreFields","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify","initialize"]}
|
package/dist/node/index.js
CHANGED
|
@@ -43,9 +43,9 @@ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
|
|
|
43
43
|
const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
44
44
|
return merge({}, pickedNonObjects, processedObjects);
|
|
45
45
|
}, "deepBy");
|
|
46
|
-
var
|
|
47
|
-
return deepBy(obj, (_, key) => key.startsWith(
|
|
48
|
-
}, "
|
|
46
|
+
var deepOmitPrefixedFields = /* @__PURE__ */ __name((obj, prefix) => {
|
|
47
|
+
return deepBy(obj, (_, key) => key.startsWith(prefix), omitBy);
|
|
48
|
+
}, "deepOmitPrefixedFields");
|
|
49
49
|
var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
|
|
50
50
|
return deepBy(obj, (_, key) => key.startsWith("_"), pickBy);
|
|
51
51
|
}, "deepPickUnderscoreFields");
|
|
@@ -92,7 +92,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
92
92
|
* @param obj A payload
|
|
93
93
|
* @returns The payload hash
|
|
94
94
|
*/
|
|
95
|
-
static async
|
|
95
|
+
static async hash(obj) {
|
|
96
96
|
if (_PayloadHasher.allowSubtle) {
|
|
97
97
|
try {
|
|
98
98
|
const enc = new TextEncoder();
|
|
@@ -121,7 +121,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
121
121
|
return this.hashSync(obj);
|
|
122
122
|
}
|
|
123
123
|
static hashFields(obj) {
|
|
124
|
-
return sortFields(removeEmptyFields(
|
|
124
|
+
return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, "_")));
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
127
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
@@ -131,7 +131,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
131
131
|
static async hashPairs(objs) {
|
|
132
132
|
return await Promise.all(objs.map(async (obj) => [
|
|
133
133
|
obj,
|
|
134
|
-
await _PayloadHasher.
|
|
134
|
+
await _PayloadHasher.hash(obj)
|
|
135
135
|
]));
|
|
136
136
|
}
|
|
137
137
|
/**
|
|
@@ -148,7 +148,7 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
148
148
|
* @returns An array of payload hashes
|
|
149
149
|
*/
|
|
150
150
|
static async hashes(objs) {
|
|
151
|
-
return await Promise.all(objs.map((obj) => this.
|
|
151
|
+
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : void 0;
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
154
|
* Returns a clone of the payload that is JSON safe
|
|
@@ -157,26 +157,13 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
157
157
|
* @returns Returns a clone of the payload that is JSON safe
|
|
158
158
|
*/
|
|
159
159
|
static jsonPayload(payload, meta = false) {
|
|
160
|
-
return sortFields(removeEmptyFields(meta ? payload :
|
|
160
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
161
161
|
}
|
|
162
162
|
static stringifyHashFields(obj) {
|
|
163
163
|
return JSON.stringify(this.hashFields(obj));
|
|
164
164
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
* @param objs Any array of payloads
|
|
168
|
-
* @returns A map of hashes to payloads
|
|
169
|
-
*/
|
|
170
|
-
static async toMap(objs) {
|
|
171
|
-
return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
|
|
172
|
-
return [
|
|
173
|
-
await _PayloadHasher.hashAsync(obj),
|
|
174
|
-
obj
|
|
175
|
-
];
|
|
176
|
-
})));
|
|
177
|
-
}
|
|
178
|
-
async hashAsync() {
|
|
179
|
-
return await _PayloadHasher.hashAsync(this.obj);
|
|
165
|
+
async hash() {
|
|
166
|
+
return await _PayloadHasher.hash(this.obj);
|
|
180
167
|
}
|
|
181
168
|
hashSync() {
|
|
182
169
|
return _PayloadHasher.hashSync(this.obj);
|
|
@@ -198,7 +185,7 @@ var PayloadHasher = _PayloadHasher;
|
|
|
198
185
|
export {
|
|
199
186
|
PayloadHasher,
|
|
200
187
|
deepBy,
|
|
201
|
-
|
|
188
|
+
deepOmitPrefixedFields,
|
|
202
189
|
deepPickUnderscoreFields,
|
|
203
190
|
removeEmptyFields,
|
|
204
191
|
sortFields
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 hashAsync<T extends EmptyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(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.hashAsync(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[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n /**\n * Creates an object map of payload hashes to payloads based on the payloads passed in\n * @param objs Any array of payloads\n * @returns A map of hashes to payloads\n */\n static async toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>> {\n return Object.fromEntries(\n await Promise.all(\n objs.map(async (obj) => {\n return [await PayloadHasher.hashAsync(obj), obj]\n }),\n ),\n )\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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 deepOmitUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","isObject","mapValues","merge","omitBy","pickBy","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitUnderscoreFields","_","key","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","hashAsync","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitUnderscoreFields","Promise","all","shajs","update","toString","jsonPayload","payload","meta","JSON","stringify","toMap","Object","fromEntries","initialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<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 filterInclude<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 find<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 if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\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 /**\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 jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\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 { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\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(obj, (_, key) => key.startsWith(prefix), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\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"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","isObject","mapValues","merge","omitBy","pickBy","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify","initialize"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { omitBy, pickBy } from '@xylabs/lodash';
|
|
2
2
|
import type { ValueKeyIteratee } from 'lodash';
|
|
3
3
|
export declare const deepBy: <T extends object>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy) => T;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const deepOmitPrefixedFields: <T extends object>(obj: T, prefix: string) => T;
|
|
5
5
|
export declare const deepPickUnderscoreFields: <T extends object>(obj: T) => T;
|
|
6
6
|
//# sourceMappingURL=removeFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"removeFields.d.ts","sourceRoot":"","sources":["../../src/removeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C,eAAO,MAAM,MAAM,mEAAyE,aAAa,GAAG,aAAa,MAiBxH,CAAA;AAED,eAAO,MAAM,sBAAsB,qCAA2C,MAAM,MAEnF,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAEpC,CAAA"}
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"@xylabs/object": "^2.88.5",
|
|
16
16
|
"@xylabs/platform": "^2.13.29",
|
|
17
17
|
"@xylabs/typeof": "^2.13.29",
|
|
18
|
-
"@xyo-network/wasm": "~2.
|
|
18
|
+
"@xyo-network/wasm": "~2.89.0-rc.2",
|
|
19
19
|
"hash-wasm": "^4.11.0",
|
|
20
20
|
"sha.js": "^2.4.11"
|
|
21
21
|
},
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
66
66
|
},
|
|
67
67
|
"sideEffects": false,
|
|
68
|
-
"version": "2.
|
|
69
|
-
"type": "module"
|
|
68
|
+
"version": "2.89.0-rc.2",
|
|
69
|
+
"type": "module",
|
|
70
|
+
"stableVersion": "2.88.3"
|
|
70
71
|
}
|
package/src/PayloadHasher.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { sha256 } from 'hash-wasm'
|
|
|
6
6
|
import shajs from 'sha.js'
|
|
7
7
|
|
|
8
8
|
import { removeEmptyFields } from './removeEmptyFields'
|
|
9
|
-
import {
|
|
9
|
+
import { deepOmitPrefixedFields } from './removeFields'
|
|
10
10
|
import { sortFields } from './sortFields'
|
|
11
11
|
|
|
12
12
|
const wasmSupportStatic = new WasmSupport(['bigInt'])
|
|
@@ -35,7 +35,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
35
35
|
* @param obj A payload
|
|
36
36
|
* @returns The payload hash
|
|
37
37
|
*/
|
|
38
|
-
static async
|
|
38
|
+
static async hash<T extends EmptyObject>(obj: T): Promise<Hash> {
|
|
39
39
|
if (PayloadHasher.allowSubtle) {
|
|
40
40
|
try {
|
|
41
41
|
const enc = new TextEncoder()
|
|
@@ -64,7 +64,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
static hashFields<T extends EmptyObject>(obj: T): T {
|
|
67
|
-
return sortFields(removeEmptyFields(
|
|
67
|
+
return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/**
|
|
@@ -73,7 +73,7 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
73
73
|
* @returns An array of payload/hash tuples
|
|
74
74
|
*/
|
|
75
75
|
static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {
|
|
76
|
-
return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.
|
|
76
|
+
return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/**
|
|
@@ -90,8 +90,8 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
90
90
|
* @param objs Any array of payloads
|
|
91
91
|
* @returns An array of payload hashes
|
|
92
92
|
*/
|
|
93
|
-
static async hashes<T extends EmptyObject>(objs
|
|
94
|
-
return await Promise.all(objs.map((obj) => this.
|
|
93
|
+
static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {
|
|
94
|
+
return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/**
|
|
@@ -101,30 +101,15 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
101
101
|
* @returns Returns a clone of the payload that is JSON safe
|
|
102
102
|
*/
|
|
103
103
|
static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {
|
|
104
|
-
return sortFields(removeEmptyFields(meta ? payload :
|
|
104
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
static stringifyHashFields<T extends EmptyObject>(obj: T) {
|
|
108
108
|
return JSON.stringify(this.hashFields(obj))
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
* @param objs Any array of payloads
|
|
114
|
-
* @returns A map of hashes to payloads
|
|
115
|
-
*/
|
|
116
|
-
static async toMap<T extends EmptyObject>(objs: T[]): Promise<Record<Hash, T>> {
|
|
117
|
-
return Object.fromEntries(
|
|
118
|
-
await Promise.all(
|
|
119
|
-
objs.map(async (obj) => {
|
|
120
|
-
return [await PayloadHasher.hashAsync(obj), obj]
|
|
121
|
-
}),
|
|
122
|
-
),
|
|
123
|
-
)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
async hashAsync(): Promise<Hash> {
|
|
127
|
-
return await PayloadHasher.hashAsync(this.obj)
|
|
111
|
+
async hash(): Promise<Hash> {
|
|
112
|
+
return await PayloadHasher.hash(this.obj)
|
|
128
113
|
}
|
|
129
114
|
|
|
130
115
|
hashSync(): Hash {
|
package/src/removeFields.ts
CHANGED
|
@@ -22,8 +22,8 @@ export const deepBy = <T extends EmptyObject>(obj: T, predicate: ValueKeyIterate
|
|
|
22
22
|
return merge({}, pickedNonObjects, processedObjects) as T
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export const
|
|
26
|
-
return deepBy(obj, (_, key) => key.startsWith(
|
|
25
|
+
export const deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {
|
|
26
|
+
return deepBy(obj, (_, key) => key.startsWith(prefix), omitBy)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {
|