@xyo-network/payload-builder 2.95.9 → 2.96.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.
- package/dist/browser/Builder.d.cts +14 -10
- package/dist/browser/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts +14 -10
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts +14 -10
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/BuilderBase.d.cts +2 -2
- package/dist/browser/BuilderBase.d.cts.map +1 -1
- package/dist/browser/BuilderBase.d.mts +2 -2
- package/dist/browser/BuilderBase.d.mts.map +1 -1
- package/dist/browser/BuilderBase.d.ts +2 -2
- package/dist/browser/BuilderBase.d.ts.map +1 -1
- package/dist/browser/index.cjs +52 -35
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +52 -35
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts +14 -10
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts +14 -10
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts +14 -10
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/BuilderBase.d.cts +2 -2
- package/dist/node/BuilderBase.d.cts.map +1 -1
- package/dist/node/BuilderBase.d.mts +2 -2
- package/dist/node/BuilderBase.d.mts.map +1 -1
- package/dist/node/BuilderBase.d.ts +2 -2
- package/dist/node/BuilderBase.d.ts.map +1 -1
- package/dist/node/index.cjs +52 -35
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +52 -35
- package/dist/node/index.js.map +1 -1
- package/package.json +3 -3
- package/src/Builder.ts +52 -27
- package/src/BuilderBase.ts +6 -4
package/dist/node/index.cjs
CHANGED
|
@@ -63,11 +63,13 @@ var _PayloadBuilderBase = class _PayloadBuilderBase {
|
|
|
63
63
|
...cleanFields
|
|
64
64
|
}, "$"), "_");
|
|
65
65
|
}
|
|
66
|
-
static metaFields(dataHash, otherMeta) {
|
|
66
|
+
static metaFields(dataHash, otherMeta, stamp = true) {
|
|
67
67
|
const meta = {
|
|
68
68
|
...otherMeta
|
|
69
69
|
};
|
|
70
|
-
|
|
70
|
+
if (!meta.timestamp && stamp) {
|
|
71
|
+
meta.timestamp = meta.timestamp ?? Date.now();
|
|
72
|
+
}
|
|
71
73
|
return meta;
|
|
72
74
|
}
|
|
73
75
|
$meta(meta) {
|
|
@@ -94,8 +96,8 @@ var _PayloadBuilderBase = class _PayloadBuilderBase {
|
|
|
94
96
|
schema(value) {
|
|
95
97
|
this._schema = value;
|
|
96
98
|
}
|
|
97
|
-
async metaFields(dataHash) {
|
|
98
|
-
return await _PayloadBuilderBase.metaFields(dataHash, this._$meta);
|
|
99
|
+
async metaFields(dataHash, stamp = true) {
|
|
100
|
+
return await _PayloadBuilderBase.metaFields(dataHash, this._$meta, stamp);
|
|
99
101
|
}
|
|
100
102
|
};
|
|
101
103
|
__name(_PayloadBuilderBase, "PayloadBuilderBase");
|
|
@@ -103,40 +105,47 @@ var PayloadBuilderBase = _PayloadBuilderBase;
|
|
|
103
105
|
|
|
104
106
|
// src/Builder.ts
|
|
105
107
|
var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
106
|
-
static async build(payload,
|
|
108
|
+
static async build(payload, options = {}) {
|
|
107
109
|
if (Array.isArray(payload)) {
|
|
108
|
-
return await Promise.all(payload.map((payload2) => this.build(payload2)));
|
|
110
|
+
return await Promise.all(payload.map((payload2) => this.build(payload2, options)));
|
|
109
111
|
} else {
|
|
110
|
-
const {
|
|
112
|
+
const { stamp = true, validate = true } = options;
|
|
113
|
+
const { schema, $hash: incomingDataHash, $meta: incomingMeta } = payload;
|
|
111
114
|
const fields = removeMetaAndSchema(payload);
|
|
112
115
|
const dataHashableFields = await _PayloadBuilder.dataHashableFields(schema, fields);
|
|
113
116
|
const $hash = validate || incomingDataHash === void 0 ? await import_hash2.PayloadHasher.hash(dataHashableFields) : incomingDataHash;
|
|
117
|
+
const $meta = {
|
|
118
|
+
...incomingMeta
|
|
119
|
+
};
|
|
120
|
+
if ($meta.timestamp === void 0 && stamp) {
|
|
121
|
+
$meta.timestamp = Date.now();
|
|
122
|
+
}
|
|
114
123
|
const hashableFields = {
|
|
115
124
|
...dataHashableFields,
|
|
116
125
|
$hash,
|
|
117
|
-
|
|
118
|
-
...$meta,
|
|
119
|
-
timestamp: ($meta == null ? void 0 : $meta.timestamp) ?? Date.now()
|
|
120
|
-
}
|
|
126
|
+
schema
|
|
121
127
|
};
|
|
128
|
+
if (Object.keys($meta).length > 0) {
|
|
129
|
+
hashableFields.$meta = $meta;
|
|
130
|
+
}
|
|
122
131
|
return hashableFields;
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
|
-
static async dataHash(payload,
|
|
126
|
-
return (await this.build(payload,
|
|
134
|
+
static async dataHash(payload, options) {
|
|
135
|
+
return (await this.build(payload, options)).$hash;
|
|
127
136
|
}
|
|
128
|
-
static async dataHashPairs(payloads,
|
|
137
|
+
static async dataHashPairs(payloads, options) {
|
|
129
138
|
return await Promise.all(payloads.map(async (payload) => {
|
|
130
|
-
const built = await _PayloadBuilder.build(payload,
|
|
139
|
+
const built = await _PayloadBuilder.build(payload, options);
|
|
131
140
|
return [
|
|
132
141
|
built,
|
|
133
142
|
built.$hash
|
|
134
143
|
];
|
|
135
144
|
}));
|
|
136
145
|
}
|
|
137
|
-
static async dataHashes(payloads,
|
|
146
|
+
static async dataHashes(payloads, options) {
|
|
138
147
|
return payloads ? await Promise.all(payloads.map(async (payload) => {
|
|
139
|
-
const built = await _PayloadBuilder.build(payload,
|
|
148
|
+
const built = await _PayloadBuilder.build(payload, options);
|
|
140
149
|
return built.$hash;
|
|
141
150
|
})) : void 0;
|
|
142
151
|
}
|
|
@@ -161,35 +170,46 @@ var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
|
161
170
|
var _a;
|
|
162
171
|
return (_a = (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
163
172
|
}
|
|
164
|
-
static async hash(payload,
|
|
165
|
-
return await import_hash2.PayloadHasher.hash(await _PayloadBuilder.build(payload,
|
|
173
|
+
static async hash(payload, options) {
|
|
174
|
+
return await import_hash2.PayloadHasher.hash(await _PayloadBuilder.build(payload, options));
|
|
166
175
|
}
|
|
167
176
|
/**
|
|
168
177
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
169
178
|
* @param objs Any array of payloads
|
|
170
179
|
* @returns An array of payload/hash tuples
|
|
171
180
|
*/
|
|
172
|
-
static async hashPairs(payloads) {
|
|
181
|
+
static async hashPairs(payloads, stamp = true) {
|
|
173
182
|
return await Promise.all(payloads.map(async (payload) => {
|
|
174
|
-
const built = await _PayloadBuilder.build(payload
|
|
183
|
+
const built = await _PayloadBuilder.build(payload, {
|
|
184
|
+
stamp
|
|
185
|
+
});
|
|
175
186
|
return [
|
|
176
187
|
built,
|
|
177
188
|
await _PayloadBuilder.hash(built)
|
|
178
189
|
];
|
|
179
190
|
}));
|
|
180
191
|
}
|
|
181
|
-
static async hashableFields(schema, fields, $meta, $hash, timestamp) {
|
|
192
|
+
static async hashableFields(schema, fields, $meta, $hash, timestamp, stamp = true) {
|
|
182
193
|
const dataFields = await this.dataHashableFields(schema, fields);
|
|
183
194
|
(0, import_assert2.assertEx)($meta === void 0 || (0, import_object2.isJsonObject)($meta), () => "$meta must be JsonObject");
|
|
184
|
-
|
|
195
|
+
const result = (0, import_hash2.deepOmitPrefixedFields)({
|
|
185
196
|
...dataFields,
|
|
186
197
|
$hash: $hash ?? await _PayloadBuilder.dataHash(dataFields),
|
|
187
|
-
$meta: {
|
|
188
|
-
...$meta,
|
|
189
|
-
timestamp: timestamp ?? ($meta == null ? void 0 : $meta.timestamp) ?? Date.now()
|
|
190
|
-
},
|
|
191
198
|
schema
|
|
192
199
|
}, "_");
|
|
200
|
+
const clonedMeta = {
|
|
201
|
+
...$meta
|
|
202
|
+
};
|
|
203
|
+
if (timestamp) {
|
|
204
|
+
clonedMeta.timestamp = timestamp;
|
|
205
|
+
}
|
|
206
|
+
if (clonedMeta.timestamp === void 0 && stamp) {
|
|
207
|
+
clonedMeta.timestamp = Date.now();
|
|
208
|
+
}
|
|
209
|
+
if (Object.keys(clonedMeta).length > 0) {
|
|
210
|
+
result.$meta = clonedMeta;
|
|
211
|
+
}
|
|
212
|
+
return result;
|
|
193
213
|
}
|
|
194
214
|
static async hashes(payloads) {
|
|
195
215
|
return await import_hash2.PayloadHasher.hashes(payloads);
|
|
@@ -231,16 +251,13 @@ var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
|
231
251
|
}
|
|
232
252
|
}
|
|
233
253
|
}
|
|
234
|
-
async build() {
|
|
254
|
+
async build(options) {
|
|
235
255
|
const dataHashableFields = await this.dataHashableFields();
|
|
236
|
-
|
|
237
|
-
const $meta = await this.metaFields($hash);
|
|
238
|
-
const hashableFields = {
|
|
256
|
+
return await _PayloadBuilder.build({
|
|
239
257
|
...dataHashableFields,
|
|
240
|
-
$
|
|
241
|
-
|
|
242
|
-
};
|
|
243
|
-
return hashableFields;
|
|
258
|
+
$meta: this._$meta,
|
|
259
|
+
schema: this._schema
|
|
260
|
+
}, options);
|
|
244
261
|
}
|
|
245
262
|
async hashableFields() {
|
|
246
263
|
return await _PayloadBuilder.hashableFields((0, import_assert2.assertEx)(this._schema, () => "Payload: Missing Schema"), this._fields, this._$meta);
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/BuilderBase.ts"],"sourcesContent":["export * from './Builder'\nexport * from './BuilderBase'\nexport * from './Options'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject } from '@xylabs/object'\nimport { deepOmitPrefixedFields, PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderBase, removeMetaAndSchema, WithoutMeta, WithoutSchema } from './BuilderBase'\nimport { PayloadBuilderOptions } from './Options'\n\nexport class PayloadBuilder<\n T extends Payload = Payload<AnyObject>,\n O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>,\n> extends PayloadBuilderBase<T, O> {\n static async build<T extends Payload = Payload<AnyObject>>(payload: T, validate?: boolean): Promise<WithMeta<T>>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T[], validate?: boolean): Promise<WithMeta<T>[]>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T | T[], validate = true) {\n if (Array.isArray(payload)) {\n return await Promise.all(payload.map((payload) => this.build(payload)))\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { schema, $hash: incomingDataHash, $meta } = payload as WithMeta<T>\n const fields = removeMetaAndSchema(payload)\n const dataHashableFields = await PayloadBuilder.dataHashableFields(schema, fields)\n const $hash = validate || incomingDataHash === undefined ? await PayloadHasher.hash(dataHashableFields) : incomingDataHash\n const hashableFields = { ...dataHashableFields, $hash, $meta: { ...$meta, timestamp: $meta?.timestamp ?? Date.now() } as JsonObject }\n\n return hashableFields as WithMeta<T>\n }\n }\n\n static async dataHash<T extends Payload>(payload: T, validate = true): Promise<Hash> {\n return (await this.build(payload, validate)).$hash\n }\n\n static async dataHashPairs<T extends Payload>(payloads: T[], validate = true): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, validate)\n return [built, built.$hash]\n }),\n )\n }\n\n static async dataHashes(payloads: undefined, validate?: boolean): Promise<undefined>\n static async dataHashes<T extends Payload>(payloads: T[], validate?: boolean): Promise<Hash[]>\n static async dataHashes<T extends Payload>(payloads?: T[], validate = true): Promise<Hash[] | undefined> {\n return payloads ?\n await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, validate)\n return built.$hash\n }),\n )\n : undefined\n }\n\n static async filterExclude<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n return await PayloadHasher.filterExcludeByHash(await this.filterExcludeByDataHash(payloads, hash), hash)\n }\n\n static async filterExcludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hash<T extends Payload>(payload: T, validate = false): Promise<Hash> {\n return await PayloadHasher.hash(await PayloadBuilder.build(payload, validate))\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 Payload>(payloads: T[]): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map<Promise<[WithMeta<T>, Hash]>>(async (payload) => {\n const built = await PayloadBuilder.build(payload)\n return [built, await PayloadBuilder.hash(built)]\n }),\n )\n }\n\n static async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n const dataFields = await this.dataHashableFields<T>(schema, fields)\n assertEx($meta === undefined || isJsonObject($meta), () => '$meta must be JsonObject')\n return deepOmitPrefixedFields<WithMeta<T>>(\n {\n ...dataFields,\n $hash: $hash ?? (await PayloadBuilder.dataHash(dataFields)),\n $meta: { ...$meta, timestamp: timestamp ?? $meta?.timestamp ?? Date.now() } as JsonObject,\n schema,\n } as WithMeta<T>,\n '_',\n )\n }\n\n static async hashes(payloads: undefined): Promise<undefined>\n static async hashes<T extends Payload>(payloads: T[]): Promise<Hash[]>\n static async hashes<T extends Payload>(payloads?: T[]): Promise<Hash[] | undefined> {\n return await PayloadHasher.hashes(payloads)\n }\n\n static async toAllHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n result[pair[0].$hash] = pair[0]\n }\n return result\n }\n\n static async toDataHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.dataHashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\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 toHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\n }\n\n static withoutMeta(payload: undefined): undefined\n static withoutMeta<T extends PayloadWithMeta>(payload: T): Omit<T, '$meta'>\n static withoutMeta<T extends PayloadWithMeta>(payloads: T[]): Omit<T, '$meta'>[]\n static withoutMeta<T extends PayloadWithMeta>(payloads: T | T[]) {\n if (Array.isArray(payloads)) {\n return payloads.map((payload) => this.withoutMeta(payload))\n } else {\n if (payloads) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, ...result } = payloads\n return result as Omit<T, '$meta'>\n }\n }\n }\n\n async build(): Promise<WithMeta<T>> {\n const dataHashableFields = await this.dataHashableFields()\n const $hash = await PayloadHasher.hash(dataHashableFields)\n const $meta = await this.metaFields($hash)\n const hashableFields: PayloadWithMeta = { ...dataHashableFields, $hash, $meta }\n\n return hashableFields as WithMeta<T>\n }\n\n async hashableFields() {\n return await PayloadBuilder.hashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n this._$meta,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject, toJson } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { deepOmitPrefixedFields, removeEmptyFields } from '@xyo-network/hash'\nimport { Payload, Schema, WithMeta, WithOptionalMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderOptions } from './Options'\n\nexport type WithOptionalSchema<T extends Payload> = Omit<T, 'schema'> & Partial<T>\n\nexport type WithoutSchema<T extends WithOptionalSchema<Payload>> = Omit<T, 'schema'>\n\nexport type WithoutMeta<T extends WithOptionalMeta<Payload>> = Omit<T, '$hash' | '$meta'>\n\nexport const removeMetaAndSchema = <T extends Payload>(payload: WithOptionalSchema<WithOptionalMeta<T>>): WithoutSchema<WithoutMeta<T>> => {\n const { ...result } = payload\n delete result.$hash\n delete result.$meta\n delete result.schema\n return result as Omit<T, 'schema'>\n}\n\nexport class PayloadBuilderBase<T extends Payload = Payload<AnyObject>, O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>> {\n protected _$meta?: JsonObject\n protected _fields?: WithoutSchema<WithoutMeta<T>>\n protected _schema: Schema\n\n constructor(readonly options: O) {\n const { schema, fields, meta } = options\n this._schema = schema\n this._fields = removeEmptyFields(fields ?? {}) as WithoutSchema<WithoutMeta<T>>\n this._$meta = meta\n }\n\n static dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promisable<Omit<T, '$hash' | '$meta'>> {\n const cleanFields = fields ? removeEmptyFields(fields) : undefined\n assertEx(\n cleanFields === undefined || isJsonObject(cleanFields),\n () => `Fields must be JsonObject: ${JSON.stringify(toJson(cleanFields), null, 2)}`,\n )\n return deepOmitPrefixedFields(deepOmitPrefixedFields({ schema, ...cleanFields }, '$'), '_') as T\n }\n\n protected static metaFields(dataHash: Hash, otherMeta?: JsonObject): Promisable<JsonObject> {\n const meta: JsonObject = { ...otherMeta }\n\n meta.timestamp = meta.timestamp ?? Date.now()\n\n return meta\n }\n\n $meta(meta?: JsonObject) {\n this._$meta = meta ?? (this._fields as WithMeta<T>).$meta\n return this\n }\n\n async dataHashableFields() {\n return await PayloadBuilderBase.dataHashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n )\n }\n\n //we do not require sending in $hash since it will be generated anyway\n fields(fields: WithOptionalSchema<WithOptionalMeta<T>>) {\n if (fields) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, $hash, schema, ...fieldsOnly } = fields\n if ($meta) {\n this.$meta($meta)\n }\n if (schema) {\n this.schema(schema)\n }\n this._fields = removeMetaAndSchema<T>(fields)\n }\n return this\n }\n\n schema(value: Schema) {\n this._schema = value\n }\n\n protected async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await PayloadBuilderBase.metaFields(dataHash, this._$meta)\n }\n}\n"],"mappings":"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","names":["import_assert","import_object","import_hash","removeMetaAndSchema","payload","result","$hash","$meta","schema","PayloadBuilderBase","_$meta","_fields","_schema","constructor","options","fields","meta","removeEmptyFields","dataHashableFields","cleanFields","undefined","assertEx","isJsonObject","JSON","stringify","toJson","deepOmitPrefixedFields","metaFields","dataHash","otherMeta","timestamp","Date","now","fieldsOnly","value","PayloadBuilder","PayloadBuilderBase","build","payload","validate","Array","isArray","Promise","all","map","schema","$hash","incomingDataHash","$meta","fields","removeMetaAndSchema","dataHashableFields","undefined","PayloadHasher","hash","hashableFields","timestamp","Date","now","dataHash","dataHashPairs","payloads","built","dataHashes","filterExclude","filterExcludeByHash","filterExcludeByDataHash","hashes","filter","_","objHash","includes","pair","filterIncludeByDataHash","findByDataHash","find","hashPairs","dataFields","assertEx","isJsonObject","deepOmitPrefixedFields","toAllHashMap","objs","result","toDataHashMap","toHashMap","withoutMeta","metaFields","_schema","_fields","_$meta"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/BuilderBase.ts"],"sourcesContent":["export * from './Builder'\nexport * from './BuilderBase'\nexport * from './Options'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject } from '@xylabs/object'\nimport { deepOmitPrefixedFields, PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderBase, removeMetaAndSchema, WithoutMeta, WithoutSchema } from './BuilderBase'\nimport { PayloadBuilderOptions } from './Options'\n\nexport interface BuildOptions {\n stamp?: boolean\n validate?: boolean\n}\n\nexport class PayloadBuilder<\n T extends Payload = Payload<AnyObject>,\n O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>,\n> extends PayloadBuilderBase<T, O> {\n static async build<T extends Payload = Payload<AnyObject>>(payload: T, options?: BuildOptions): Promise<WithMeta<T>>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T[], options?: BuildOptions): Promise<WithMeta<T>[]>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T | T[], options: BuildOptions = {}) {\n if (Array.isArray(payload)) {\n return await Promise.all(payload.map((payload) => this.build(payload, options)))\n } else {\n const { stamp = true, validate = true } = options\n const { schema, $hash: incomingDataHash, $meta: incomingMeta } = payload as WithMeta<T>\n const fields = removeMetaAndSchema(payload)\n const dataHashableFields = await PayloadBuilder.dataHashableFields(schema, fields)\n const $hash = validate || incomingDataHash === undefined ? await PayloadHasher.hash(dataHashableFields) : incomingDataHash\n const $meta: JsonObject = { ...incomingMeta }\n if ($meta.timestamp === undefined && stamp) {\n $meta.timestamp = Date.now()\n }\n const hashableFields: WithMeta<Payload> = { ...dataHashableFields, $hash, schema }\n\n if (Object.keys($meta).length > 0) {\n hashableFields.$meta = $meta\n }\n\n return hashableFields as WithMeta<T>\n }\n }\n\n static async dataHash<T extends Payload>(payload: T, options?: BuildOptions): Promise<Hash> {\n return (await this.build(payload, options)).$hash\n }\n\n static async dataHashPairs<T extends Payload>(payloads: T[], options?: BuildOptions): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, options)\n return [built, built.$hash]\n }),\n )\n }\n\n static async dataHashes(payloads: undefined, options?: BuildOptions): Promise<undefined>\n static async dataHashes<T extends Payload>(payloads: T[], options?: BuildOptions): Promise<Hash[]>\n static async dataHashes<T extends Payload>(payloads?: T[], options?: BuildOptions): Promise<Hash[] | undefined> {\n return payloads ?\n await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, options)\n return built.$hash\n }),\n )\n : undefined\n }\n\n static async filterExclude<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n return await PayloadHasher.filterExcludeByHash(await this.filterExcludeByDataHash(payloads, hash), hash)\n }\n\n static async filterExcludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hash<T extends Payload>(payload: T, options?: BuildOptions): Promise<Hash> {\n return await PayloadHasher.hash(await PayloadBuilder.build(payload, options))\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 Payload>(payloads: T[], stamp = true): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map<Promise<[WithMeta<T>, Hash]>>(async (payload) => {\n const built = await PayloadBuilder.build(payload, { stamp })\n return [built, await PayloadBuilder.hash(built)]\n }),\n )\n }\n\n static async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n stamp = true,\n ): Promise<WithMeta<T>> {\n const dataFields = await this.dataHashableFields<T>(schema, fields)\n assertEx($meta === undefined || isJsonObject($meta), () => '$meta must be JsonObject')\n const result: WithMeta<T> = deepOmitPrefixedFields<WithMeta<T>>(\n {\n ...dataFields,\n $hash: $hash ?? (await PayloadBuilder.dataHash(dataFields)),\n schema,\n } as WithMeta<T>,\n '_',\n )\n\n const clonedMeta = { ...$meta }\n\n if (timestamp) {\n clonedMeta.timestamp = timestamp\n }\n\n if (clonedMeta.timestamp === undefined && stamp) {\n clonedMeta.timestamp = Date.now()\n }\n\n if (Object.keys(clonedMeta).length > 0) {\n result.$meta = clonedMeta\n }\n\n return result\n }\n\n static async hashes(payloads: undefined): Promise<undefined>\n static async hashes<T extends Payload>(payloads: T[]): Promise<Hash[]>\n static async hashes<T extends Payload>(payloads?: T[]): Promise<Hash[] | undefined> {\n return await PayloadHasher.hashes(payloads)\n }\n\n static async toAllHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n result[pair[0].$hash] = pair[0]\n }\n return result\n }\n\n static async toDataHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.dataHashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\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 toHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\n }\n\n static withoutMeta(payload: undefined): undefined\n static withoutMeta<T extends PayloadWithMeta>(payload: T): Omit<T, '$meta'>\n static withoutMeta<T extends PayloadWithMeta>(payloads: T[]): Omit<T, '$meta'>[]\n static withoutMeta<T extends PayloadWithMeta>(payloads: T | T[]) {\n if (Array.isArray(payloads)) {\n return payloads.map((payload) => this.withoutMeta(payload))\n } else {\n if (payloads) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, ...result } = payloads\n return result as Omit<T, '$meta'>\n }\n }\n }\n\n async build(options?: BuildOptions): Promise<WithMeta<T>> {\n const dataHashableFields = await this.dataHashableFields()\n return await PayloadBuilder.build<T>({ ...dataHashableFields, $meta: this._$meta, schema: this._schema } as Payload as T, options)\n }\n\n async hashableFields() {\n return await PayloadBuilder.hashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n this._$meta,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject, toJson } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { deepOmitPrefixedFields, removeEmptyFields } from '@xyo-network/hash'\nimport { Payload, Schema, WithMeta, WithOptionalMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderOptions } from './Options'\n\nexport type WithOptionalSchema<T extends Payload> = Omit<T, 'schema'> & Partial<T>\n\nexport type WithoutSchema<T extends WithOptionalSchema<Payload>> = Omit<T, 'schema'>\n\nexport type WithoutMeta<T extends WithOptionalMeta<Payload>> = Omit<T, '$hash' | '$meta'>\n\nexport const removeMetaAndSchema = <T extends Payload>(payload: WithOptionalSchema<WithOptionalMeta<T>>): WithoutSchema<WithoutMeta<T>> => {\n const { ...result } = payload\n delete result.$hash\n delete result.$meta\n delete result.schema\n return result as Omit<T, 'schema'>\n}\n\nexport class PayloadBuilderBase<T extends Payload = Payload<AnyObject>, O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>> {\n protected _$meta?: JsonObject\n protected _fields?: WithoutSchema<WithoutMeta<T>>\n protected _schema: Schema\n\n constructor(readonly options: O) {\n const { schema, fields, meta } = options\n this._schema = schema\n this._fields = removeEmptyFields(fields ?? {}) as WithoutSchema<WithoutMeta<T>>\n this._$meta = meta\n }\n\n static dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promisable<Omit<T, '$hash' | '$meta'>> {\n const cleanFields = fields ? removeEmptyFields(fields) : undefined\n assertEx(\n cleanFields === undefined || isJsonObject(cleanFields),\n () => `Fields must be JsonObject: ${JSON.stringify(toJson(cleanFields), null, 2)}`,\n )\n return deepOmitPrefixedFields(deepOmitPrefixedFields({ schema, ...cleanFields }, '$'), '_') as T\n }\n\n protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, stamp = true): Promisable<JsonObject> {\n const meta: JsonObject = { ...otherMeta }\n\n if (!meta.timestamp && stamp) {\n meta.timestamp = meta.timestamp ?? Date.now()\n }\n\n return meta\n }\n\n $meta(meta?: JsonObject) {\n this._$meta = meta ?? (this._fields as WithMeta<T>).$meta\n return this\n }\n\n async dataHashableFields() {\n return await PayloadBuilderBase.dataHashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n )\n }\n\n //we do not require sending in $hash since it will be generated anyway\n fields(fields: WithOptionalSchema<WithOptionalMeta<T>>) {\n if (fields) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, $hash, schema, ...fieldsOnly } = fields\n if ($meta) {\n this.$meta($meta)\n }\n if (schema) {\n this.schema(schema)\n }\n this._fields = removeMetaAndSchema<T>(fields)\n }\n return this\n }\n\n schema(value: Schema) {\n this._schema = value\n }\n\n protected async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await PayloadBuilderBase.metaFields(dataHash, this._$meta, stamp)\n }\n}\n"],"mappings":"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","names":["import_assert","import_object","import_hash","removeMetaAndSchema","payload","result","$hash","$meta","schema","PayloadBuilderBase","_$meta","_fields","_schema","constructor","options","fields","meta","removeEmptyFields","dataHashableFields","cleanFields","undefined","assertEx","isJsonObject","JSON","stringify","toJson","deepOmitPrefixedFields","metaFields","dataHash","otherMeta","stamp","timestamp","Date","now","fieldsOnly","value","PayloadBuilder","PayloadBuilderBase","build","payload","options","Array","isArray","Promise","all","map","stamp","validate","schema","$hash","incomingDataHash","$meta","incomingMeta","fields","removeMetaAndSchema","dataHashableFields","undefined","PayloadHasher","hash","timestamp","Date","now","hashableFields","Object","keys","length","dataHash","dataHashPairs","payloads","built","dataHashes","filterExclude","filterExcludeByHash","filterExcludeByDataHash","hashes","filter","_","objHash","includes","pair","filterIncludeByDataHash","findByDataHash","find","hashPairs","dataFields","assertEx","isJsonObject","result","deepOmitPrefixedFields","clonedMeta","toAllHashMap","objs","toDataHashMap","toHashMap","withoutMeta","_$meta","_schema","_fields"]}
|
package/dist/node/index.js
CHANGED
|
@@ -37,11 +37,13 @@ var _PayloadBuilderBase = class _PayloadBuilderBase {
|
|
|
37
37
|
...cleanFields
|
|
38
38
|
}, "$"), "_");
|
|
39
39
|
}
|
|
40
|
-
static metaFields(dataHash, otherMeta) {
|
|
40
|
+
static metaFields(dataHash, otherMeta, stamp = true) {
|
|
41
41
|
const meta = {
|
|
42
42
|
...otherMeta
|
|
43
43
|
};
|
|
44
|
-
|
|
44
|
+
if (!meta.timestamp && stamp) {
|
|
45
|
+
meta.timestamp = meta.timestamp ?? Date.now();
|
|
46
|
+
}
|
|
45
47
|
return meta;
|
|
46
48
|
}
|
|
47
49
|
$meta(meta) {
|
|
@@ -68,8 +70,8 @@ var _PayloadBuilderBase = class _PayloadBuilderBase {
|
|
|
68
70
|
schema(value) {
|
|
69
71
|
this._schema = value;
|
|
70
72
|
}
|
|
71
|
-
async metaFields(dataHash) {
|
|
72
|
-
return await _PayloadBuilderBase.metaFields(dataHash, this._$meta);
|
|
73
|
+
async metaFields(dataHash, stamp = true) {
|
|
74
|
+
return await _PayloadBuilderBase.metaFields(dataHash, this._$meta, stamp);
|
|
73
75
|
}
|
|
74
76
|
};
|
|
75
77
|
__name(_PayloadBuilderBase, "PayloadBuilderBase");
|
|
@@ -77,40 +79,47 @@ var PayloadBuilderBase = _PayloadBuilderBase;
|
|
|
77
79
|
|
|
78
80
|
// src/Builder.ts
|
|
79
81
|
var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
80
|
-
static async build(payload,
|
|
82
|
+
static async build(payload, options = {}) {
|
|
81
83
|
if (Array.isArray(payload)) {
|
|
82
|
-
return await Promise.all(payload.map((payload2) => this.build(payload2)));
|
|
84
|
+
return await Promise.all(payload.map((payload2) => this.build(payload2, options)));
|
|
83
85
|
} else {
|
|
84
|
-
const {
|
|
86
|
+
const { stamp = true, validate = true } = options;
|
|
87
|
+
const { schema, $hash: incomingDataHash, $meta: incomingMeta } = payload;
|
|
85
88
|
const fields = removeMetaAndSchema(payload);
|
|
86
89
|
const dataHashableFields = await _PayloadBuilder.dataHashableFields(schema, fields);
|
|
87
90
|
const $hash = validate || incomingDataHash === void 0 ? await PayloadHasher.hash(dataHashableFields) : incomingDataHash;
|
|
91
|
+
const $meta = {
|
|
92
|
+
...incomingMeta
|
|
93
|
+
};
|
|
94
|
+
if ($meta.timestamp === void 0 && stamp) {
|
|
95
|
+
$meta.timestamp = Date.now();
|
|
96
|
+
}
|
|
88
97
|
const hashableFields = {
|
|
89
98
|
...dataHashableFields,
|
|
90
99
|
$hash,
|
|
91
|
-
|
|
92
|
-
...$meta,
|
|
93
|
-
timestamp: ($meta == null ? void 0 : $meta.timestamp) ?? Date.now()
|
|
94
|
-
}
|
|
100
|
+
schema
|
|
95
101
|
};
|
|
102
|
+
if (Object.keys($meta).length > 0) {
|
|
103
|
+
hashableFields.$meta = $meta;
|
|
104
|
+
}
|
|
96
105
|
return hashableFields;
|
|
97
106
|
}
|
|
98
107
|
}
|
|
99
|
-
static async dataHash(payload,
|
|
100
|
-
return (await this.build(payload,
|
|
108
|
+
static async dataHash(payload, options) {
|
|
109
|
+
return (await this.build(payload, options)).$hash;
|
|
101
110
|
}
|
|
102
|
-
static async dataHashPairs(payloads,
|
|
111
|
+
static async dataHashPairs(payloads, options) {
|
|
103
112
|
return await Promise.all(payloads.map(async (payload) => {
|
|
104
|
-
const built = await _PayloadBuilder.build(payload,
|
|
113
|
+
const built = await _PayloadBuilder.build(payload, options);
|
|
105
114
|
return [
|
|
106
115
|
built,
|
|
107
116
|
built.$hash
|
|
108
117
|
];
|
|
109
118
|
}));
|
|
110
119
|
}
|
|
111
|
-
static async dataHashes(payloads,
|
|
120
|
+
static async dataHashes(payloads, options) {
|
|
112
121
|
return payloads ? await Promise.all(payloads.map(async (payload) => {
|
|
113
|
-
const built = await _PayloadBuilder.build(payload,
|
|
122
|
+
const built = await _PayloadBuilder.build(payload, options);
|
|
114
123
|
return built.$hash;
|
|
115
124
|
})) : void 0;
|
|
116
125
|
}
|
|
@@ -135,35 +144,46 @@ var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
|
135
144
|
var _a;
|
|
136
145
|
return (_a = (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
137
146
|
}
|
|
138
|
-
static async hash(payload,
|
|
139
|
-
return await PayloadHasher.hash(await _PayloadBuilder.build(payload,
|
|
147
|
+
static async hash(payload, options) {
|
|
148
|
+
return await PayloadHasher.hash(await _PayloadBuilder.build(payload, options));
|
|
140
149
|
}
|
|
141
150
|
/**
|
|
142
151
|
* Creates an array of payload/hash tuples based on the payloads passed in
|
|
143
152
|
* @param objs Any array of payloads
|
|
144
153
|
* @returns An array of payload/hash tuples
|
|
145
154
|
*/
|
|
146
|
-
static async hashPairs(payloads) {
|
|
155
|
+
static async hashPairs(payloads, stamp = true) {
|
|
147
156
|
return await Promise.all(payloads.map(async (payload) => {
|
|
148
|
-
const built = await _PayloadBuilder.build(payload
|
|
157
|
+
const built = await _PayloadBuilder.build(payload, {
|
|
158
|
+
stamp
|
|
159
|
+
});
|
|
149
160
|
return [
|
|
150
161
|
built,
|
|
151
162
|
await _PayloadBuilder.hash(built)
|
|
152
163
|
];
|
|
153
164
|
}));
|
|
154
165
|
}
|
|
155
|
-
static async hashableFields(schema, fields, $meta, $hash, timestamp) {
|
|
166
|
+
static async hashableFields(schema, fields, $meta, $hash, timestamp, stamp = true) {
|
|
156
167
|
const dataFields = await this.dataHashableFields(schema, fields);
|
|
157
168
|
assertEx2($meta === void 0 || isJsonObject2($meta), () => "$meta must be JsonObject");
|
|
158
|
-
|
|
169
|
+
const result = deepOmitPrefixedFields2({
|
|
159
170
|
...dataFields,
|
|
160
171
|
$hash: $hash ?? await _PayloadBuilder.dataHash(dataFields),
|
|
161
|
-
$meta: {
|
|
162
|
-
...$meta,
|
|
163
|
-
timestamp: timestamp ?? ($meta == null ? void 0 : $meta.timestamp) ?? Date.now()
|
|
164
|
-
},
|
|
165
172
|
schema
|
|
166
173
|
}, "_");
|
|
174
|
+
const clonedMeta = {
|
|
175
|
+
...$meta
|
|
176
|
+
};
|
|
177
|
+
if (timestamp) {
|
|
178
|
+
clonedMeta.timestamp = timestamp;
|
|
179
|
+
}
|
|
180
|
+
if (clonedMeta.timestamp === void 0 && stamp) {
|
|
181
|
+
clonedMeta.timestamp = Date.now();
|
|
182
|
+
}
|
|
183
|
+
if (Object.keys(clonedMeta).length > 0) {
|
|
184
|
+
result.$meta = clonedMeta;
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
167
187
|
}
|
|
168
188
|
static async hashes(payloads) {
|
|
169
189
|
return await PayloadHasher.hashes(payloads);
|
|
@@ -205,16 +225,13 @@ var _PayloadBuilder = class _PayloadBuilder extends PayloadBuilderBase {
|
|
|
205
225
|
}
|
|
206
226
|
}
|
|
207
227
|
}
|
|
208
|
-
async build() {
|
|
228
|
+
async build(options) {
|
|
209
229
|
const dataHashableFields = await this.dataHashableFields();
|
|
210
|
-
|
|
211
|
-
const $meta = await this.metaFields($hash);
|
|
212
|
-
const hashableFields = {
|
|
230
|
+
return await _PayloadBuilder.build({
|
|
213
231
|
...dataHashableFields,
|
|
214
|
-
$
|
|
215
|
-
|
|
216
|
-
};
|
|
217
|
-
return hashableFields;
|
|
232
|
+
$meta: this._$meta,
|
|
233
|
+
schema: this._schema
|
|
234
|
+
}, options);
|
|
218
235
|
}
|
|
219
236
|
async hashableFields() {
|
|
220
237
|
return await _PayloadBuilder.hashableFields(assertEx2(this._schema, () => "Payload: Missing Schema"), this._fields, this._$meta);
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/BuilderBase.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject } from '@xylabs/object'\nimport { deepOmitPrefixedFields, PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderBase, removeMetaAndSchema, WithoutMeta, WithoutSchema } from './BuilderBase'\nimport { PayloadBuilderOptions } from './Options'\n\nexport class PayloadBuilder<\n T extends Payload = Payload<AnyObject>,\n O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>,\n> extends PayloadBuilderBase<T, O> {\n static async build<T extends Payload = Payload<AnyObject>>(payload: T, validate?: boolean): Promise<WithMeta<T>>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T[], validate?: boolean): Promise<WithMeta<T>[]>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T | T[], validate = true) {\n if (Array.isArray(payload)) {\n return await Promise.all(payload.map((payload) => this.build(payload)))\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { schema, $hash: incomingDataHash, $meta } = payload as WithMeta<T>\n const fields = removeMetaAndSchema(payload)\n const dataHashableFields = await PayloadBuilder.dataHashableFields(schema, fields)\n const $hash = validate || incomingDataHash === undefined ? await PayloadHasher.hash(dataHashableFields) : incomingDataHash\n const hashableFields = { ...dataHashableFields, $hash, $meta: { ...$meta, timestamp: $meta?.timestamp ?? Date.now() } as JsonObject }\n\n return hashableFields as WithMeta<T>\n }\n }\n\n static async dataHash<T extends Payload>(payload: T, validate = true): Promise<Hash> {\n return (await this.build(payload, validate)).$hash\n }\n\n static async dataHashPairs<T extends Payload>(payloads: T[], validate = true): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, validate)\n return [built, built.$hash]\n }),\n )\n }\n\n static async dataHashes(payloads: undefined, validate?: boolean): Promise<undefined>\n static async dataHashes<T extends Payload>(payloads: T[], validate?: boolean): Promise<Hash[]>\n static async dataHashes<T extends Payload>(payloads?: T[], validate = true): Promise<Hash[] | undefined> {\n return payloads ?\n await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, validate)\n return built.$hash\n }),\n )\n : undefined\n }\n\n static async filterExclude<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n return await PayloadHasher.filterExcludeByHash(await this.filterExcludeByDataHash(payloads, hash), hash)\n }\n\n static async filterExcludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hash<T extends Payload>(payload: T, validate = false): Promise<Hash> {\n return await PayloadHasher.hash(await PayloadBuilder.build(payload, validate))\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 Payload>(payloads: T[]): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map<Promise<[WithMeta<T>, Hash]>>(async (payload) => {\n const built = await PayloadBuilder.build(payload)\n return [built, await PayloadBuilder.hash(built)]\n }),\n )\n }\n\n static async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n const dataFields = await this.dataHashableFields<T>(schema, fields)\n assertEx($meta === undefined || isJsonObject($meta), () => '$meta must be JsonObject')\n return deepOmitPrefixedFields<WithMeta<T>>(\n {\n ...dataFields,\n $hash: $hash ?? (await PayloadBuilder.dataHash(dataFields)),\n $meta: { ...$meta, timestamp: timestamp ?? $meta?.timestamp ?? Date.now() } as JsonObject,\n schema,\n } as WithMeta<T>,\n '_',\n )\n }\n\n static async hashes(payloads: undefined): Promise<undefined>\n static async hashes<T extends Payload>(payloads: T[]): Promise<Hash[]>\n static async hashes<T extends Payload>(payloads?: T[]): Promise<Hash[] | undefined> {\n return await PayloadHasher.hashes(payloads)\n }\n\n static async toAllHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n result[pair[0].$hash] = pair[0]\n }\n return result\n }\n\n static async toDataHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.dataHashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\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 toHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\n }\n\n static withoutMeta(payload: undefined): undefined\n static withoutMeta<T extends PayloadWithMeta>(payload: T): Omit<T, '$meta'>\n static withoutMeta<T extends PayloadWithMeta>(payloads: T[]): Omit<T, '$meta'>[]\n static withoutMeta<T extends PayloadWithMeta>(payloads: T | T[]) {\n if (Array.isArray(payloads)) {\n return payloads.map((payload) => this.withoutMeta(payload))\n } else {\n if (payloads) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, ...result } = payloads\n return result as Omit<T, '$meta'>\n }\n }\n }\n\n async build(): Promise<WithMeta<T>> {\n const dataHashableFields = await this.dataHashableFields()\n const $hash = await PayloadHasher.hash(dataHashableFields)\n const $meta = await this.metaFields($hash)\n const hashableFields: PayloadWithMeta = { ...dataHashableFields, $hash, $meta }\n\n return hashableFields as WithMeta<T>\n }\n\n async hashableFields() {\n return await PayloadBuilder.hashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n this._$meta,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject, toJson } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { deepOmitPrefixedFields, removeEmptyFields } from '@xyo-network/hash'\nimport { Payload, Schema, WithMeta, WithOptionalMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderOptions } from './Options'\n\nexport type WithOptionalSchema<T extends Payload> = Omit<T, 'schema'> & Partial<T>\n\nexport type WithoutSchema<T extends WithOptionalSchema<Payload>> = Omit<T, 'schema'>\n\nexport type WithoutMeta<T extends WithOptionalMeta<Payload>> = Omit<T, '$hash' | '$meta'>\n\nexport const removeMetaAndSchema = <T extends Payload>(payload: WithOptionalSchema<WithOptionalMeta<T>>): WithoutSchema<WithoutMeta<T>> => {\n const { ...result } = payload\n delete result.$hash\n delete result.$meta\n delete result.schema\n return result as Omit<T, 'schema'>\n}\n\nexport class PayloadBuilderBase<T extends Payload = Payload<AnyObject>, O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>> {\n protected _$meta?: JsonObject\n protected _fields?: WithoutSchema<WithoutMeta<T>>\n protected _schema: Schema\n\n constructor(readonly options: O) {\n const { schema, fields, meta } = options\n this._schema = schema\n this._fields = removeEmptyFields(fields ?? {}) as WithoutSchema<WithoutMeta<T>>\n this._$meta = meta\n }\n\n static dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promisable<Omit<T, '$hash' | '$meta'>> {\n const cleanFields = fields ? removeEmptyFields(fields) : undefined\n assertEx(\n cleanFields === undefined || isJsonObject(cleanFields),\n () => `Fields must be JsonObject: ${JSON.stringify(toJson(cleanFields), null, 2)}`,\n )\n return deepOmitPrefixedFields(deepOmitPrefixedFields({ schema, ...cleanFields }, '$'), '_') as T\n }\n\n protected static metaFields(dataHash: Hash, otherMeta?: JsonObject): Promisable<JsonObject> {\n const meta: JsonObject = { ...otherMeta }\n\n meta.timestamp = meta.timestamp ?? Date.now()\n\n return meta\n }\n\n $meta(meta?: JsonObject) {\n this._$meta = meta ?? (this._fields as WithMeta<T>).$meta\n return this\n }\n\n async dataHashableFields() {\n return await PayloadBuilderBase.dataHashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n )\n }\n\n //we do not require sending in $hash since it will be generated anyway\n fields(fields: WithOptionalSchema<WithOptionalMeta<T>>) {\n if (fields) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, $hash, schema, ...fieldsOnly } = fields\n if ($meta) {\n this.$meta($meta)\n }\n if (schema) {\n this.schema(schema)\n }\n this._fields = removeMetaAndSchema<T>(fields)\n }\n return this\n }\n\n schema(value: Schema) {\n this._schema = value\n }\n\n protected async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await PayloadBuilderBase.metaFields(dataHash, this._$meta)\n }\n}\n"],"mappings":"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","names":["assertEx","isJsonObject","deepOmitPrefixedFields","PayloadHasher","assertEx","isJsonObject","toJson","deepOmitPrefixedFields","removeEmptyFields","removeMetaAndSchema","payload","result","$hash","$meta","schema","PayloadBuilderBase","_$meta","_fields","_schema","constructor","options","fields","meta","removeEmptyFields","dataHashableFields","cleanFields","undefined","assertEx","isJsonObject","JSON","stringify","toJson","deepOmitPrefixedFields","metaFields","dataHash","otherMeta","timestamp","Date","now","fieldsOnly","value","PayloadBuilder","PayloadBuilderBase","build","payload","validate","Array","isArray","Promise","all","map","schema","$hash","incomingDataHash","$meta","fields","removeMetaAndSchema","dataHashableFields","undefined","PayloadHasher","hash","hashableFields","timestamp","Date","now","dataHash","dataHashPairs","payloads","built","dataHashes","filterExclude","filterExcludeByHash","filterExcludeByDataHash","hashes","filter","_","objHash","includes","pair","filterIncludeByDataHash","findByDataHash","find","hashPairs","dataFields","assertEx","isJsonObject","deepOmitPrefixedFields","toAllHashMap","objs","result","toDataHashMap","toHashMap","withoutMeta","metaFields","_schema","_fields","_$meta"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/BuilderBase.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject } from '@xylabs/object'\nimport { deepOmitPrefixedFields, PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderBase, removeMetaAndSchema, WithoutMeta, WithoutSchema } from './BuilderBase'\nimport { PayloadBuilderOptions } from './Options'\n\nexport interface BuildOptions {\n stamp?: boolean\n validate?: boolean\n}\n\nexport class PayloadBuilder<\n T extends Payload = Payload<AnyObject>,\n O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>,\n> extends PayloadBuilderBase<T, O> {\n static async build<T extends Payload = Payload<AnyObject>>(payload: T, options?: BuildOptions): Promise<WithMeta<T>>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T[], options?: BuildOptions): Promise<WithMeta<T>[]>\n static async build<T extends Payload = Payload<AnyObject>>(payload: T | T[], options: BuildOptions = {}) {\n if (Array.isArray(payload)) {\n return await Promise.all(payload.map((payload) => this.build(payload, options)))\n } else {\n const { stamp = true, validate = true } = options\n const { schema, $hash: incomingDataHash, $meta: incomingMeta } = payload as WithMeta<T>\n const fields = removeMetaAndSchema(payload)\n const dataHashableFields = await PayloadBuilder.dataHashableFields(schema, fields)\n const $hash = validate || incomingDataHash === undefined ? await PayloadHasher.hash(dataHashableFields) : incomingDataHash\n const $meta: JsonObject = { ...incomingMeta }\n if ($meta.timestamp === undefined && stamp) {\n $meta.timestamp = Date.now()\n }\n const hashableFields: WithMeta<Payload> = { ...dataHashableFields, $hash, schema }\n\n if (Object.keys($meta).length > 0) {\n hashableFields.$meta = $meta\n }\n\n return hashableFields as WithMeta<T>\n }\n }\n\n static async dataHash<T extends Payload>(payload: T, options?: BuildOptions): Promise<Hash> {\n return (await this.build(payload, options)).$hash\n }\n\n static async dataHashPairs<T extends Payload>(payloads: T[], options?: BuildOptions): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, options)\n return [built, built.$hash]\n }),\n )\n }\n\n static async dataHashes(payloads: undefined, options?: BuildOptions): Promise<undefined>\n static async dataHashes<T extends Payload>(payloads: T[], options?: BuildOptions): Promise<Hash[]>\n static async dataHashes<T extends Payload>(payloads?: T[], options?: BuildOptions): Promise<Hash[] | undefined> {\n return payloads ?\n await Promise.all(\n payloads.map(async (payload) => {\n const built = await PayloadBuilder.build(payload, options)\n return built.$hash\n }),\n )\n : undefined\n }\n\n static async filterExclude<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n return await PayloadHasher.filterExcludeByHash(await this.filterExcludeByDataHash(payloads, hash), hash)\n }\n\n static async filterExcludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterIncludeByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.dataHashPairs(payloads)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async findByDataHash<T extends Payload>(payloads: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.dataHashPairs(payloads)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hash<T extends Payload>(payload: T, options?: BuildOptions): Promise<Hash> {\n return await PayloadHasher.hash(await PayloadBuilder.build(payload, options))\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 Payload>(payloads: T[], stamp = true): Promise<[WithMeta<T>, Hash][]> {\n return await Promise.all(\n payloads.map<Promise<[WithMeta<T>, Hash]>>(async (payload) => {\n const built = await PayloadBuilder.build(payload, { stamp })\n return [built, await PayloadBuilder.hash(built)]\n }),\n )\n }\n\n static async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n stamp = true,\n ): Promise<WithMeta<T>> {\n const dataFields = await this.dataHashableFields<T>(schema, fields)\n assertEx($meta === undefined || isJsonObject($meta), () => '$meta must be JsonObject')\n const result: WithMeta<T> = deepOmitPrefixedFields<WithMeta<T>>(\n {\n ...dataFields,\n $hash: $hash ?? (await PayloadBuilder.dataHash(dataFields)),\n schema,\n } as WithMeta<T>,\n '_',\n )\n\n const clonedMeta = { ...$meta }\n\n if (timestamp) {\n clonedMeta.timestamp = timestamp\n }\n\n if (clonedMeta.timestamp === undefined && stamp) {\n clonedMeta.timestamp = Date.now()\n }\n\n if (Object.keys(clonedMeta).length > 0) {\n result.$meta = clonedMeta\n }\n\n return result\n }\n\n static async hashes(payloads: undefined): Promise<undefined>\n static async hashes<T extends Payload>(payloads: T[]): Promise<Hash[]>\n static async hashes<T extends Payload>(payloads?: T[]): Promise<Hash[] | undefined> {\n return await PayloadHasher.hashes(payloads)\n }\n\n static async toAllHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n result[pair[0].$hash] = pair[0]\n }\n return result\n }\n\n static async toDataHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.dataHashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\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 toHashMap<T extends Payload>(objs: T[]): Promise<Record<Hash, WithMeta<T>>> {\n const result: Record<Hash, WithMeta<T>> = {}\n for (const pair of await this.hashPairs(objs)) {\n result[pair[1]] = pair[0]\n }\n return result\n }\n\n static withoutMeta(payload: undefined): undefined\n static withoutMeta<T extends PayloadWithMeta>(payload: T): Omit<T, '$meta'>\n static withoutMeta<T extends PayloadWithMeta>(payloads: T[]): Omit<T, '$meta'>[]\n static withoutMeta<T extends PayloadWithMeta>(payloads: T | T[]) {\n if (Array.isArray(payloads)) {\n return payloads.map((payload) => this.withoutMeta(payload))\n } else {\n if (payloads) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, ...result } = payloads\n return result as Omit<T, '$meta'>\n }\n }\n }\n\n async build(options?: BuildOptions): Promise<WithMeta<T>> {\n const dataHashableFields = await this.dataHashableFields()\n return await PayloadBuilder.build<T>({ ...dataHashableFields, $meta: this._$meta, schema: this._schema } as Payload as T, options)\n }\n\n async hashableFields() {\n return await PayloadBuilder.hashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n this._$meta,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { AnyObject, isJsonObject, JsonObject, toJson } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { deepOmitPrefixedFields, removeEmptyFields } from '@xyo-network/hash'\nimport { Payload, Schema, WithMeta, WithOptionalMeta } from '@xyo-network/payload-model'\n\nimport { PayloadBuilderOptions } from './Options'\n\nexport type WithOptionalSchema<T extends Payload> = Omit<T, 'schema'> & Partial<T>\n\nexport type WithoutSchema<T extends WithOptionalSchema<Payload>> = Omit<T, 'schema'>\n\nexport type WithoutMeta<T extends WithOptionalMeta<Payload>> = Omit<T, '$hash' | '$meta'>\n\nexport const removeMetaAndSchema = <T extends Payload>(payload: WithOptionalSchema<WithOptionalMeta<T>>): WithoutSchema<WithoutMeta<T>> => {\n const { ...result } = payload\n delete result.$hash\n delete result.$meta\n delete result.schema\n return result as Omit<T, 'schema'>\n}\n\nexport class PayloadBuilderBase<T extends Payload = Payload<AnyObject>, O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>> {\n protected _$meta?: JsonObject\n protected _fields?: WithoutSchema<WithoutMeta<T>>\n protected _schema: Schema\n\n constructor(readonly options: O) {\n const { schema, fields, meta } = options\n this._schema = schema\n this._fields = removeEmptyFields(fields ?? {}) as WithoutSchema<WithoutMeta<T>>\n this._$meta = meta\n }\n\n static dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promisable<Omit<T, '$hash' | '$meta'>> {\n const cleanFields = fields ? removeEmptyFields(fields) : undefined\n assertEx(\n cleanFields === undefined || isJsonObject(cleanFields),\n () => `Fields must be JsonObject: ${JSON.stringify(toJson(cleanFields), null, 2)}`,\n )\n return deepOmitPrefixedFields(deepOmitPrefixedFields({ schema, ...cleanFields }, '$'), '_') as T\n }\n\n protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, stamp = true): Promisable<JsonObject> {\n const meta: JsonObject = { ...otherMeta }\n\n if (!meta.timestamp && stamp) {\n meta.timestamp = meta.timestamp ?? Date.now()\n }\n\n return meta\n }\n\n $meta(meta?: JsonObject) {\n this._$meta = meta ?? (this._fields as WithMeta<T>).$meta\n return this\n }\n\n async dataHashableFields() {\n return await PayloadBuilderBase.dataHashableFields(\n assertEx(this._schema, () => 'Payload: Missing Schema'),\n this._fields,\n )\n }\n\n //we do not require sending in $hash since it will be generated anyway\n fields(fields: WithOptionalSchema<WithOptionalMeta<T>>) {\n if (fields) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $meta, $hash, schema, ...fieldsOnly } = fields\n if ($meta) {\n this.$meta($meta)\n }\n if (schema) {\n this.schema(schema)\n }\n this._fields = removeMetaAndSchema<T>(fields)\n }\n return this\n }\n\n schema(value: Schema) {\n this._schema = value\n }\n\n protected async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await PayloadBuilderBase.metaFields(dataHash, this._$meta, stamp)\n }\n}\n"],"mappings":"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","names":["assertEx","isJsonObject","deepOmitPrefixedFields","PayloadHasher","assertEx","isJsonObject","toJson","deepOmitPrefixedFields","removeEmptyFields","removeMetaAndSchema","payload","result","$hash","$meta","schema","PayloadBuilderBase","_$meta","_fields","_schema","constructor","options","fields","meta","removeEmptyFields","dataHashableFields","cleanFields","undefined","assertEx","isJsonObject","JSON","stringify","toJson","deepOmitPrefixedFields","metaFields","dataHash","otherMeta","stamp","timestamp","Date","now","fieldsOnly","value","PayloadBuilder","PayloadBuilderBase","build","payload","options","Array","isArray","Promise","all","map","stamp","validate","schema","$hash","incomingDataHash","$meta","incomingMeta","fields","removeMetaAndSchema","dataHashableFields","undefined","PayloadHasher","hash","timestamp","Date","now","hashableFields","Object","keys","length","dataHash","dataHashPairs","payloads","built","dataHashes","filterExclude","filterExcludeByHash","filterExcludeByDataHash","hashes","filter","_","objHash","includes","pair","filterIncludeByDataHash","findByDataHash","find","hashPairs","dataFields","assertEx","isJsonObject","result","deepOmitPrefixedFields","clonedMeta","toAllHashMap","objs","toDataHashMap","toHashMap","withoutMeta","_$meta","_schema","_fields"]}
|
package/package.json
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"@xylabs/logger": "^3.1.8",
|
|
16
16
|
"@xylabs/object": "^3.1.8",
|
|
17
17
|
"@xylabs/promise": "^3.1.8",
|
|
18
|
-
"@xyo-network/hash": "~2.
|
|
19
|
-
"@xyo-network/payload-model": "~2.
|
|
18
|
+
"@xyo-network/hash": "~2.96.1",
|
|
19
|
+
"@xyo-network/payload-model": "~2.96.1"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@xylabs/ts-scripts-yarn3": "^3.9.1",
|
|
@@ -62,6 +62,6 @@
|
|
|
62
62
|
},
|
|
63
63
|
"sideEffects": false,
|
|
64
64
|
"types": "dist/node/index.d.ts",
|
|
65
|
-
"version": "2.
|
|
65
|
+
"version": "2.96.1",
|
|
66
66
|
"type": "module"
|
|
67
67
|
}
|