@xyo-network/hash 2.84.19 → 2.85.1

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.
@@ -5,6 +5,8 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
10
  var __export = (target, all) => {
9
11
  for (var name in all)
10
12
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +28,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
28
  mod
27
29
  ));
28
30
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+ var __publicField = (obj, key, value) => {
32
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
33
+ return value;
34
+ };
29
35
 
30
36
  // src/index.ts
31
37
  var src_exports = {};
@@ -34,16 +40,11 @@ __export(src_exports, {
34
40
  deepBy: () => deepBy,
35
41
  deepOmitUnderscoreFields: () => deepOmitUnderscoreFields,
36
42
  deepPickUnderscoreFields: () => deepPickUnderscoreFields,
37
- isHex: () => isHex,
38
43
  removeEmptyFields: () => removeEmptyFields,
39
44
  sortFields: () => sortFields
40
45
  });
41
46
  module.exports = __toCommonJS(src_exports);
42
47
 
43
- // src/model.ts
44
- var hexRegex = /[\da-f]+/i;
45
- var isHex = (value) => hexRegex.test(value);
46
-
47
48
  // src/PayloadHasher.ts
48
49
  var import_hex = require("@xylabs/hex");
49
50
  var import_platform = require("@xylabs/platform");
@@ -54,7 +55,7 @@ var import_sha = __toESM(require("sha.js"), 1);
54
55
 
55
56
  // src/removeEmptyFields.ts
56
57
  var import_typeof = require("@xylabs/typeof");
57
- var removeEmptyFields = (obj) => {
58
+ var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
58
59
  if (obj === null || Array.isArray(obj))
59
60
  return obj;
60
61
  const newObject = {};
@@ -66,11 +67,11 @@ var removeEmptyFields = (obj) => {
66
67
  }
67
68
  }
68
69
  return newObject;
69
- };
70
+ }, "removeEmptyFields");
70
71
 
71
72
  // src/removeFields.ts
72
73
  var import_lodash = require("@xylabs/lodash");
73
- var deepBy = (obj, predicate, func) => {
74
+ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
74
75
  if (Array.isArray(obj)) {
75
76
  return obj;
76
77
  }
@@ -80,42 +81,45 @@ var deepBy = (obj, predicate, func) => {
80
81
  const pickedNonObjects = (0, import_lodash.omitBy)(nonObjects, predicate);
81
82
  const processedObjects = (0, import_lodash.mapValues)(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
82
83
  return (0, import_lodash.merge)({}, pickedNonObjects, processedObjects);
83
- };
84
- var deepOmitUnderscoreFields = (obj) => {
84
+ }, "deepBy");
85
+ var deepOmitUnderscoreFields = /* @__PURE__ */ __name((obj) => {
85
86
  return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.omitBy);
86
- };
87
- var deepPickUnderscoreFields = (obj) => {
87
+ }, "deepOmitUnderscoreFields");
88
+ var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
88
89
  return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.pickBy);
89
- };
90
+ }, "deepPickUnderscoreFields");
90
91
 
91
92
  // src/sortFields.ts
92
93
  var import_object = require("@xyo-network/object");
93
- var subSort = (value) => {
94
+ var subSort = /* @__PURE__ */ __name((value) => {
94
95
  return (0, import_object.isObject)(value) ? sortFields(value) : value;
95
- };
96
- var sortFields = (obj) => {
96
+ }, "subSort");
97
+ var sortFields = /* @__PURE__ */ __name((obj) => {
97
98
  const result = {};
98
99
  const keys = Object.keys(obj);
99
100
  for (const key of keys.sort()) {
100
101
  result[key] = subSort(obj[key]);
101
102
  }
102
103
  return result;
103
- };
104
+ }, "sortFields");
104
105
 
105
106
  // src/PayloadHasher.ts
106
- var wasmSupportStatic = new import_wasm.WasmSupport(["bigInt"]);
107
- var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
108
- static allowSubtle = true;
109
- static wasmInitialized = wasmSupportStatic.initialize();
110
- static wasmSupport = wasmSupportStatic;
107
+ var wasmSupportStatic = new import_wasm.WasmSupport([
108
+ "bigInt"
109
+ ]);
110
+ var _PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
111
111
  static async filterExclude(objs = [], hash) {
112
112
  var _a;
113
- const hashes = Array.isArray(hash) ? hash : [hash];
113
+ const hashes = Array.isArray(hash) ? hash : [
114
+ hash
115
+ ];
114
116
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
115
117
  }
116
118
  static async filterInclude(objs = [], hash) {
117
119
  var _a;
118
- const hashes = Array.isArray(hash) ? hash : [hash];
120
+ const hashes = Array.isArray(hash) ? hash : [
121
+ hash
122
+ ];
119
123
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
120
124
  }
121
125
  static async find(objs = [], hash) {
@@ -123,10 +127,10 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
123
127
  return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
124
128
  }
125
129
  /**
126
- * Asynchronously hashes a payload
127
- * @param obj A payload
128
- * @returns The payload hash
129
- */
130
+ * Asynchronously hashes a payload
131
+ * @param obj A payload
132
+ * @returns The payload hash
133
+ */
130
134
  static async hashAsync(obj) {
131
135
  if (_PayloadHasher.allowSubtle) {
132
136
  try {
@@ -134,7 +138,9 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
134
138
  const stringToHash = this.stringifyHashFields(obj);
135
139
  const b = enc.encode(stringToHash);
136
140
  const hashArray = await import_platform.subtle.digest("SHA-256", b);
137
- return (0, import_hex.hexFromArrayBuffer)(hashArray, { bitLength: 256 });
141
+ return (0, import_hex.hexFromArrayBuffer)(hashArray, {
142
+ bitLength: 256
143
+ });
138
144
  } catch (ex) {
139
145
  const error = ex;
140
146
  console.error(`Setting allowSubtle to false [${error.message}]`);
@@ -157,35 +163,38 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
157
163
  return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
158
164
  }
159
165
  /**
160
- * Creates an array of payload/hash tuples based on the payloads passed in
161
- * @param objs Any array of payloads
162
- * @returns An array of payload/hash tuples
163
- */
166
+ * Creates an array of payload/hash tuples based on the payloads passed in
167
+ * @param objs Any array of payloads
168
+ * @returns An array of payload/hash tuples
169
+ */
164
170
  static async hashPairs(objs) {
165
- return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
171
+ return await Promise.all(objs.map(async (obj) => [
172
+ obj,
173
+ await _PayloadHasher.hashAsync(obj)
174
+ ]));
166
175
  }
167
176
  /**
168
- * Synchronously hashes a payload
169
- * @param obj A payload
170
- * @returns The payload hash
171
- */
177
+ * Synchronously hashes a payload
178
+ * @param obj A payload
179
+ * @returns The payload hash
180
+ */
172
181
  static hashSync(obj) {
173
182
  return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
174
183
  }
175
184
  /**
176
- * Creates an array of payload hashes based on the payloads passed in
177
- * @param objs Any array of payloads
178
- * @returns An array of payload hashes
179
- */
185
+ * Creates an array of payload hashes based on the payloads passed in
186
+ * @param objs Any array of payloads
187
+ * @returns An array of payload hashes
188
+ */
180
189
  static async hashes(objs) {
181
190
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
182
191
  }
183
192
  /**
184
- * Returns a clone of the payload that is JSON safe
185
- * @param obj A payload
186
- * @param meta Keeps underscore (meta) fields if set to true
187
- * @returns Returns a clone of the payload that is JSON safe
188
- */
193
+ * Returns a clone of the payload that is JSON safe
194
+ * @param obj A payload
195
+ * @param meta Keeps underscore (meta) fields if set to true
196
+ * @returns Returns a clone of the payload that is JSON safe
197
+ */
189
198
  static jsonPayload(payload, meta = false) {
190
199
  return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)));
191
200
  }
@@ -193,18 +202,17 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
193
202
  return JSON.stringify(this.hashFields(obj));
194
203
  }
195
204
  /**
196
- * Creates an object map of payload hashes to payloads based on the payloads passed in
197
- * @param objs Any array of payloads
198
- * @returns A map of hashes to payloads
199
- */
205
+ * Creates an object map of payload hashes to payloads based on the payloads passed in
206
+ * @param objs Any array of payloads
207
+ * @returns A map of hashes to payloads
208
+ */
200
209
  static async toMap(objs) {
201
- return Object.fromEntries(
202
- await Promise.all(
203
- objs.map(async (obj) => {
204
- return [await _PayloadHasher.hashAsync(obj), obj];
205
- })
206
- )
207
- );
210
+ return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
211
+ return [
212
+ await _PayloadHasher.hashAsync(obj),
213
+ obj
214
+ ];
215
+ })));
208
216
  }
209
217
  async hashAsync() {
210
218
  return await _PayloadHasher.hashAsync(this.obj);
@@ -213,21 +221,25 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
213
221
  return _PayloadHasher.hashSync(this.obj);
214
222
  }
215
223
  /**
216
- * Returns a clone of the payload that is JSON safe
217
- * @param meta Keeps underscore (meta) fields if set to true
218
- * @returns Returns a clone of the payload that is JSON safe
219
- */
224
+ * Returns a clone of the payload that is JSON safe
225
+ * @param meta Keeps underscore (meta) fields if set to true
226
+ * @returns Returns a clone of the payload that is JSON safe
227
+ */
220
228
  jsonPayload(meta = false) {
221
229
  return _PayloadHasher.jsonPayload(this.obj, meta);
222
230
  }
223
231
  };
232
+ __name(_PayloadHasher, "PayloadHasher");
233
+ __publicField(_PayloadHasher, "allowSubtle", true);
234
+ __publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
235
+ __publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
236
+ var PayloadHasher = _PayloadHasher;
224
237
  // Annotate the CommonJS export names for ESM import in node:
225
238
  0 && (module.exports = {
226
239
  PayloadHasher,
227
240
  deepBy,
228
241
  deepOmitUnderscoreFields,
229
242
  deepPickUnderscoreFields,
230
- isHex,
231
243
  removeEmptyFields,
232
244
  sortFields
233
245
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[\\da-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { EmptyObject, ObjectWrapper } from '@xyo-network/object'\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 { typeOf } from '@xylabs/typeof'\nimport { AnyObject, EmptyObject } from '@xyo-network/object'\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 '@xyo-network/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 '@xyo-network/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","obj","shajs"]}
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 { subtle } from '@xylabs/platform'\nimport { EmptyObject, ObjectWrapper } from '@xyo-network/object'\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 { typeOf } from '@xylabs/typeof'\nimport { AnyObject, EmptyObject } from '@xyo-network/object'\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 '@xyo-network/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 '@xyo-network/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,4 +1,3 @@
1
- export * from './model';
2
1
  export * from './PayloadHasher';
3
2
  export * from './removeEmptyFields';
4
3
  export * from './removeFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,3 @@
1
- export * from './model';
2
1
  export * from './PayloadHasher';
3
2
  export * from './removeEmptyFields';
4
3
  export * from './removeFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,4 +1,3 @@
1
- export * from './model';
2
1
  export * from './PayloadHasher';
3
2
  export * from './removeEmptyFields';
4
3
  export * from './removeFields';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -1,6 +1,10 @@
1
- // src/model.ts
2
- var hexRegex = /[\da-f]+/i;
3
- var isHex = (value) => hexRegex.test(value);
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
4
8
 
5
9
  // src/PayloadHasher.ts
6
10
  import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
@@ -12,7 +16,7 @@ import shajs from "sha.js";
12
16
 
13
17
  // src/removeEmptyFields.ts
14
18
  import { typeOf } from "@xylabs/typeof";
15
- var removeEmptyFields = (obj) => {
19
+ var removeEmptyFields = /* @__PURE__ */ __name((obj) => {
16
20
  if (obj === null || Array.isArray(obj))
17
21
  return obj;
18
22
  const newObject = {};
@@ -24,11 +28,11 @@ var removeEmptyFields = (obj) => {
24
28
  }
25
29
  }
26
30
  return newObject;
27
- };
31
+ }, "removeEmptyFields");
28
32
 
29
33
  // src/removeFields.ts
30
34
  import { isObject, mapValues, merge, omitBy, pickBy } from "@xylabs/lodash";
31
- var deepBy = (obj, predicate, func) => {
35
+ var deepBy = /* @__PURE__ */ __name((obj, predicate, func) => {
32
36
  if (Array.isArray(obj)) {
33
37
  return obj;
34
38
  }
@@ -38,42 +42,45 @@ var deepBy = (obj, predicate, func) => {
38
42
  const pickedNonObjects = omitBy(nonObjects, predicate);
39
43
  const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
40
44
  return merge({}, pickedNonObjects, processedObjects);
41
- };
42
- var deepOmitUnderscoreFields = (obj) => {
45
+ }, "deepBy");
46
+ var deepOmitUnderscoreFields = /* @__PURE__ */ __name((obj) => {
43
47
  return deepBy(obj, (_, key) => key.startsWith("_"), omitBy);
44
- };
45
- var deepPickUnderscoreFields = (obj) => {
48
+ }, "deepOmitUnderscoreFields");
49
+ var deepPickUnderscoreFields = /* @__PURE__ */ __name((obj) => {
46
50
  return deepBy(obj, (_, key) => key.startsWith("_"), pickBy);
47
- };
51
+ }, "deepPickUnderscoreFields");
48
52
 
49
53
  // src/sortFields.ts
50
54
  import { isObject as isObject2 } from "@xyo-network/object";
51
- var subSort = (value) => {
55
+ var subSort = /* @__PURE__ */ __name((value) => {
52
56
  return isObject2(value) ? sortFields(value) : value;
53
- };
54
- var sortFields = (obj) => {
57
+ }, "subSort");
58
+ var sortFields = /* @__PURE__ */ __name((obj) => {
55
59
  const result = {};
56
60
  const keys = Object.keys(obj);
57
61
  for (const key of keys.sort()) {
58
62
  result[key] = subSort(obj[key]);
59
63
  }
60
64
  return result;
61
- };
65
+ }, "sortFields");
62
66
 
63
67
  // src/PayloadHasher.ts
64
- var wasmSupportStatic = new WasmSupport(["bigInt"]);
65
- var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
66
- static allowSubtle = true;
67
- static wasmInitialized = wasmSupportStatic.initialize();
68
- static wasmSupport = wasmSupportStatic;
68
+ var wasmSupportStatic = new WasmSupport([
69
+ "bigInt"
70
+ ]);
71
+ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
69
72
  static async filterExclude(objs = [], hash) {
70
73
  var _a;
71
- const hashes = Array.isArray(hash) ? hash : [hash];
74
+ const hashes = Array.isArray(hash) ? hash : [
75
+ hash
76
+ ];
72
77
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
73
78
  }
74
79
  static async filterInclude(objs = [], hash) {
75
80
  var _a;
76
- const hashes = Array.isArray(hash) ? hash : [hash];
81
+ const hashes = Array.isArray(hash) ? hash : [
82
+ hash
83
+ ];
77
84
  return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
78
85
  }
79
86
  static async find(objs = [], hash) {
@@ -81,10 +88,10 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
81
88
  return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
82
89
  }
83
90
  /**
84
- * Asynchronously hashes a payload
85
- * @param obj A payload
86
- * @returns The payload hash
87
- */
91
+ * Asynchronously hashes a payload
92
+ * @param obj A payload
93
+ * @returns The payload hash
94
+ */
88
95
  static async hashAsync(obj) {
89
96
  if (_PayloadHasher.allowSubtle) {
90
97
  try {
@@ -92,7 +99,9 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
92
99
  const stringToHash = this.stringifyHashFields(obj);
93
100
  const b = enc.encode(stringToHash);
94
101
  const hashArray = await subtle.digest("SHA-256", b);
95
- return hexFromArrayBuffer(hashArray, { bitLength: 256 });
102
+ return hexFromArrayBuffer(hashArray, {
103
+ bitLength: 256
104
+ });
96
105
  } catch (ex) {
97
106
  const error = ex;
98
107
  console.error(`Setting allowSubtle to false [${error.message}]`);
@@ -115,35 +124,38 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
115
124
  return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
116
125
  }
117
126
  /**
118
- * Creates an array of payload/hash tuples based on the payloads passed in
119
- * @param objs Any array of payloads
120
- * @returns An array of payload/hash tuples
121
- */
127
+ * Creates an array of payload/hash tuples based on the payloads passed in
128
+ * @param objs Any array of payloads
129
+ * @returns An array of payload/hash tuples
130
+ */
122
131
  static async hashPairs(objs) {
123
- return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
132
+ return await Promise.all(objs.map(async (obj) => [
133
+ obj,
134
+ await _PayloadHasher.hashAsync(obj)
135
+ ]));
124
136
  }
125
137
  /**
126
- * Synchronously hashes a payload
127
- * @param obj A payload
128
- * @returns The payload hash
129
- */
138
+ * Synchronously hashes a payload
139
+ * @param obj A payload
140
+ * @returns The payload hash
141
+ */
130
142
  static hashSync(obj) {
131
143
  return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
132
144
  }
133
145
  /**
134
- * Creates an array of payload hashes based on the payloads passed in
135
- * @param objs Any array of payloads
136
- * @returns An array of payload hashes
137
- */
146
+ * Creates an array of payload hashes based on the payloads passed in
147
+ * @param objs Any array of payloads
148
+ * @returns An array of payload hashes
149
+ */
138
150
  static async hashes(objs) {
139
151
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
140
152
  }
141
153
  /**
142
- * Returns a clone of the payload that is JSON safe
143
- * @param obj A payload
144
- * @param meta Keeps underscore (meta) fields if set to true
145
- * @returns Returns a clone of the payload that is JSON safe
146
- */
154
+ * Returns a clone of the payload that is JSON safe
155
+ * @param obj A payload
156
+ * @param meta Keeps underscore (meta) fields if set to true
157
+ * @returns Returns a clone of the payload that is JSON safe
158
+ */
147
159
  static jsonPayload(payload, meta = false) {
148
160
  return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)));
149
161
  }
@@ -151,18 +163,17 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
151
163
  return JSON.stringify(this.hashFields(obj));
152
164
  }
153
165
  /**
154
- * Creates an object map of payload hashes to payloads based on the payloads passed in
155
- * @param objs Any array of payloads
156
- * @returns A map of hashes to payloads
157
- */
166
+ * Creates an object map of payload hashes to payloads based on the payloads passed in
167
+ * @param objs Any array of payloads
168
+ * @returns A map of hashes to payloads
169
+ */
158
170
  static async toMap(objs) {
159
- return Object.fromEntries(
160
- await Promise.all(
161
- objs.map(async (obj) => {
162
- return [await _PayloadHasher.hashAsync(obj), obj];
163
- })
164
- )
165
- );
171
+ return Object.fromEntries(await Promise.all(objs.map(async (obj) => {
172
+ return [
173
+ await _PayloadHasher.hashAsync(obj),
174
+ obj
175
+ ];
176
+ })));
166
177
  }
167
178
  async hashAsync() {
168
179
  return await _PayloadHasher.hashAsync(this.obj);
@@ -171,20 +182,24 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
171
182
  return _PayloadHasher.hashSync(this.obj);
172
183
  }
173
184
  /**
174
- * Returns a clone of the payload that is JSON safe
175
- * @param meta Keeps underscore (meta) fields if set to true
176
- * @returns Returns a clone of the payload that is JSON safe
177
- */
185
+ * Returns a clone of the payload that is JSON safe
186
+ * @param meta Keeps underscore (meta) fields if set to true
187
+ * @returns Returns a clone of the payload that is JSON safe
188
+ */
178
189
  jsonPayload(meta = false) {
179
190
  return _PayloadHasher.jsonPayload(this.obj, meta);
180
191
  }
181
192
  };
193
+ __name(_PayloadHasher, "PayloadHasher");
194
+ __publicField(_PayloadHasher, "allowSubtle", true);
195
+ __publicField(_PayloadHasher, "wasmInitialized", wasmSupportStatic.initialize());
196
+ __publicField(_PayloadHasher, "wasmSupport", wasmSupportStatic);
197
+ var PayloadHasher = _PayloadHasher;
182
198
  export {
183
199
  PayloadHasher,
184
200
  deepBy,
185
201
  deepOmitUnderscoreFields,
186
202
  deepPickUnderscoreFields,
187
- isHex,
188
203
  removeEmptyFields,
189
204
  sortFields
190
205
  };