@xyo-network/boundwitness-wrapper 3.5.2 → 3.6.0-rc.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/BoundWitnessWrapper.d.ts +14 -18
- package/dist/browser/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/browser/QueryBoundWitnessWrapper.d.ts +3 -2
- package/dist/browser/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/browser/index.mjs +6 -6
- package/dist/browser/index.mjs.map +1 -1
- package/dist/neutral/BoundWitnessWrapper.d.ts +14 -18
- package/dist/neutral/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/neutral/QueryBoundWitnessWrapper.d.ts +3 -2
- package/dist/neutral/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/neutral/index.mjs +6 -6
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.ts +14 -18
- package/dist/node/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/node/QueryBoundWitnessWrapper.d.ts +3 -2
- package/dist/node/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/node/index.mjs +6 -6
- package/dist/node/index.mjs.map +1 -1
- package/package.json +16 -14
- package/src/BoundWitnessWrapper.ts +17 -17
- package/src/QueryBoundWitnessWrapper.ts +9 -10
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { Address, Hash } from '@xylabs/hex';
|
|
2
2
|
import type { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
-
import type { Payload
|
|
3
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
4
4
|
import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper';
|
|
5
|
-
export declare const isBoundWitnessWrapper: <T extends BoundWitness =
|
|
6
|
-
schema: "network.xyo.boundwitness";
|
|
7
|
-
}, P extends Payload = {
|
|
5
|
+
export declare const isBoundWitnessWrapper: <T extends BoundWitness = BoundWitness, P extends Payload = {
|
|
8
6
|
schema: string;
|
|
9
7
|
} & import("@xyo-network/payload-model").PayloadFields>(value?: unknown) => value is BoundWitnessWrapper<T, P>;
|
|
10
8
|
export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
11
9
|
schema: string;
|
|
12
10
|
}> = BoundWitness, TPayload extends Payload = Payload> extends PayloadWrapperBase<TBoundWitness> {
|
|
13
|
-
boundwitness:
|
|
14
|
-
payloads:
|
|
15
|
-
moduleErrors?:
|
|
11
|
+
boundwitness: TBoundWitness;
|
|
12
|
+
payloads: TPayload[];
|
|
13
|
+
moduleErrors?: Payload[] | undefined;
|
|
16
14
|
private _payloadDataMap;
|
|
17
15
|
private _payloadMap;
|
|
18
|
-
protected constructor(boundwitness:
|
|
16
|
+
protected constructor(boundwitness: TBoundWitness, payloads?: TPayload[], moduleErrors?: Payload[] | undefined);
|
|
19
17
|
get addresses(): Lowercase<string>[];
|
|
20
18
|
get payloadHashes(): Lowercase<string>[];
|
|
21
19
|
get payloadSchemas(): string[];
|
|
@@ -23,14 +21,12 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
23
21
|
static as<T extends BoundWitness = BoundWitness>(value: unknown): BoundWitnessWrapper<T, {
|
|
24
22
|
schema: string;
|
|
25
23
|
} & import("@xyo-network/payload-model").PayloadFields> | undefined;
|
|
26
|
-
static load(address: Address): Promise<BoundWitnessWrapper<
|
|
27
|
-
schema: "network.xyo.boundwitness";
|
|
28
|
-
}, {
|
|
24
|
+
static load(address: Address): Promise<BoundWitnessWrapper<BoundWitness, {
|
|
29
25
|
schema: string;
|
|
30
26
|
} & import("@xyo-network/payload-model").PayloadFields> | null>;
|
|
31
|
-
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?:
|
|
32
|
-
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?:
|
|
33
|
-
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?:
|
|
27
|
+
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P>;
|
|
28
|
+
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined;
|
|
29
|
+
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): Promise<BoundWitnessWrapper<T, P>>;
|
|
34
30
|
static wrappedDataHashMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>>;
|
|
35
31
|
dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>>;
|
|
36
32
|
getMissingPayloads(): Promise<Lowercase<string>[]>;
|
|
@@ -38,11 +34,11 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
38
34
|
hashesBySchema(schema: string): string[];
|
|
39
35
|
payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
40
36
|
payloadsByHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
41
|
-
payloadsBySchema<T extends TPayload>(schema: string):
|
|
42
|
-
payloadsDataHashMap(): Promise<Record<Hash,
|
|
43
|
-
payloadsHashMap(): Promise<Record<Hash,
|
|
37
|
+
payloadsBySchema<T extends TPayload>(schema: string): T[];
|
|
38
|
+
payloadsDataHashMap(): Promise<Record<Hash, TPayload>>;
|
|
39
|
+
payloadsHashMap(): Promise<Record<Hash, TPayload>>;
|
|
44
40
|
prev(address: Address): Lowercase<string> | null;
|
|
45
|
-
toResult(): (
|
|
41
|
+
toResult(): (TBoundWitness | TPayload[])[];
|
|
46
42
|
validate(): Promise<Error[]>;
|
|
47
43
|
}
|
|
48
44
|
//# sourceMappingURL=BoundWitnessWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAMnE,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAMnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EACiB,cAAc,EAAE,kBAAkB,EACzD,MAAM,8BAA8B,CAAA;AAErC,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,YAAY,iBAAiB,CAAC,SAAS,OAAO;;gEACpF,OAAO,KACd,KAAK,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAKnC,CAAA;AAED,qBAAa,mBAAmB,CAC9B,aAAa,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,EACrE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAClC,SAAQ,kBAAkB,CAAC,aAAa,CAAC;IAKhC,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,QAAQ,EAAE;IACpB,YAAY,CAAC,EAAE,OAAO,EAAE;IANjC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,WAAW,CAAoC;IAEvD,SAAS,aACA,YAAY,EAAE,aAAa,EAC3B,QAAQ,GAAE,QAAQ,EAAO,EACzB,YAAY,CAAC,EAAE,OAAO,EAAE,YAAA;IAKjC,IAAI,SAAS,wBAEZ;IAED,IAAI,aAAa,wBAEhB;IAED,IAAI,cAAc,aAEjB;IAED,IAAI,cAAc,iCAEjB;IAED,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,KAAK,EAAE,OAAO;;;WAIlD,IAAI,CAAC,OAAO,EAAE,OAAO;;;IASlC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAC7E,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,EAAE,GACb,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IA2B5B,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;WASlH,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,OAAO,EACzD,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,EAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,GACb,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;WAcxB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EACpD,cAAc,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAW5C,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAqBhE,kBAAkB;IAKlB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IAI/D,cAAc,CAAC,MAAM,EAAE,MAAM;IAUvB,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKzD,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK3D,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;IAInD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAKtD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAKxD,IAAI,CAAC,OAAO,EAAE,OAAO;IAIrB,QAAQ;IAIO,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAG5C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Promisable } from '@xylabs/promise';
|
|
1
2
|
import { type QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
3
|
import type { Payload, Query } from '@xyo-network/payload-model';
|
|
3
4
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper';
|
|
@@ -5,8 +6,8 @@ import { BoundWitnessWrapper } from './BoundWitnessWrapper.ts';
|
|
|
5
6
|
export declare class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
|
|
6
7
|
private _payloadsWithoutQuery;
|
|
7
8
|
private _query;
|
|
8
|
-
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]):
|
|
9
|
-
static tryParseQuery<T extends Query>(obj: unknown):
|
|
9
|
+
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T>;
|
|
10
|
+
static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined>;
|
|
10
11
|
getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]>;
|
|
11
12
|
getQuery(): Promise<T>;
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,wBAAwB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,mBAAmB,CAAC,iBAAiB,CAAC;IAC3G,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,MAAM,CAAe;IAE7B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAC;IA2B3G,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IASlG,uBAAuB,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAS7D,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;CAK7B"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -176,14 +176,14 @@ import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper"
|
|
|
176
176
|
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper {
|
|
177
177
|
_payloadsWithoutQuery;
|
|
178
178
|
_query;
|
|
179
|
-
static
|
|
179
|
+
static parseQuery(obj, payloads) {
|
|
180
180
|
assertEx2(!Array.isArray(obj), () => "Array can not be converted to QueryBoundWitnessWrapper");
|
|
181
181
|
switch (typeof obj) {
|
|
182
182
|
case "object": {
|
|
183
183
|
const castWrapper = obj;
|
|
184
184
|
const result = castWrapper instanceof _QueryBoundWitnessWrapper ? castWrapper : isQueryBoundWitness(obj) ? new _QueryBoundWitnessWrapper(
|
|
185
|
-
|
|
186
|
-
payloads
|
|
185
|
+
obj,
|
|
186
|
+
payloads
|
|
187
187
|
) : void 0;
|
|
188
188
|
if (result === void 0) {
|
|
189
189
|
throw new Error("Unable to parse. Failed isQueryBoundWitness.");
|
|
@@ -193,10 +193,10 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
193
193
|
}
|
|
194
194
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
195
195
|
}
|
|
196
|
-
static
|
|
196
|
+
static tryParseQuery(obj) {
|
|
197
197
|
if (obj === void 0) return void 0;
|
|
198
198
|
try {
|
|
199
|
-
return
|
|
199
|
+
return this.parseQuery(obj);
|
|
200
200
|
} catch {
|
|
201
201
|
return void 0;
|
|
202
202
|
}
|
|
@@ -210,7 +210,7 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
210
210
|
async getQuery() {
|
|
211
211
|
const payloadMap = await this.payloadsDataHashMap();
|
|
212
212
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
213
|
-
return assertEx2(this._query, () => `Missing Query [${this.boundwitness}]`);
|
|
213
|
+
return assertEx2(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`);
|
|
214
214
|
}
|
|
215
215
|
};
|
|
216
216
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithMeta } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, WithMeta<TPayload>> | undefined\n private _payloadMap: Record<Hash, WithMeta<TPayload>> | undefined\n\n protected constructor(\n public boundwitness: WithMeta<TBoundWitness>,\n public payloads: WithMeta<TPayload>[] = [],\n public moduleErrors?: WithMeta<Payload>[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: WithMeta<P>[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: WithMeta<T> | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as WithMeta<T>\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as WithMeta<T>\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: WithMeta<P>[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: WithMeta<P>[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<WithMeta<TBoundWitness>>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): WithMeta<T>[] {\n return this.payloads.filter(payload => payload?.schema === schema) as WithMeta<T>[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<QueryBoundWitnessWrapper<T>> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj),\n payloads ? await Promise.all(payloads.map(payload => PayloadBuilder.build(payload))) : undefined,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static async tryParseQuery<T extends Query>(obj: unknown): Promise<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return await this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as WithMeta<T> | undefined)\n return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, TPayload> | undefined\n private _payloadMap: Record<Hash, TPayload> | undefined\n\n protected constructor(\n public boundwitness: TBoundWitness,\n public payloads: TPayload[] = [],\n public moduleErrors?: Payload[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: P[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: T | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as T\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as T\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: P[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<TBoundWitness>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): T[] {\n return this.payloads.filter(payload => payload?.schema === schema) as T[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Promisable } from '@xylabs/promise'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Payload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n obj,\n payloads,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { Address, Hash } from '@xylabs/hex';
|
|
2
2
|
import type { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
-
import type { Payload
|
|
3
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
4
4
|
import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper';
|
|
5
|
-
export declare const isBoundWitnessWrapper: <T extends BoundWitness =
|
|
6
|
-
schema: "network.xyo.boundwitness";
|
|
7
|
-
}, P extends Payload = {
|
|
5
|
+
export declare const isBoundWitnessWrapper: <T extends BoundWitness = BoundWitness, P extends Payload = {
|
|
8
6
|
schema: string;
|
|
9
7
|
} & import("@xyo-network/payload-model").PayloadFields>(value?: unknown) => value is BoundWitnessWrapper<T, P>;
|
|
10
8
|
export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
11
9
|
schema: string;
|
|
12
10
|
}> = BoundWitness, TPayload extends Payload = Payload> extends PayloadWrapperBase<TBoundWitness> {
|
|
13
|
-
boundwitness:
|
|
14
|
-
payloads:
|
|
15
|
-
moduleErrors?:
|
|
11
|
+
boundwitness: TBoundWitness;
|
|
12
|
+
payloads: TPayload[];
|
|
13
|
+
moduleErrors?: Payload[] | undefined;
|
|
16
14
|
private _payloadDataMap;
|
|
17
15
|
private _payloadMap;
|
|
18
|
-
protected constructor(boundwitness:
|
|
16
|
+
protected constructor(boundwitness: TBoundWitness, payloads?: TPayload[], moduleErrors?: Payload[] | undefined);
|
|
19
17
|
get addresses(): Lowercase<string>[];
|
|
20
18
|
get payloadHashes(): Lowercase<string>[];
|
|
21
19
|
get payloadSchemas(): string[];
|
|
@@ -23,14 +21,12 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
23
21
|
static as<T extends BoundWitness = BoundWitness>(value: unknown): BoundWitnessWrapper<T, {
|
|
24
22
|
schema: string;
|
|
25
23
|
} & import("@xyo-network/payload-model").PayloadFields> | undefined;
|
|
26
|
-
static load(address: Address): Promise<BoundWitnessWrapper<
|
|
27
|
-
schema: "network.xyo.boundwitness";
|
|
28
|
-
}, {
|
|
24
|
+
static load(address: Address): Promise<BoundWitnessWrapper<BoundWitness, {
|
|
29
25
|
schema: string;
|
|
30
26
|
} & import("@xyo-network/payload-model").PayloadFields> | null>;
|
|
31
|
-
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?:
|
|
32
|
-
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?:
|
|
33
|
-
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?:
|
|
27
|
+
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P>;
|
|
28
|
+
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined;
|
|
29
|
+
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): Promise<BoundWitnessWrapper<T, P>>;
|
|
34
30
|
static wrappedDataHashMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>>;
|
|
35
31
|
dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>>;
|
|
36
32
|
getMissingPayloads(): Promise<Lowercase<string>[]>;
|
|
@@ -38,11 +34,11 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
38
34
|
hashesBySchema(schema: string): string[];
|
|
39
35
|
payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
40
36
|
payloadsByHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
41
|
-
payloadsBySchema<T extends TPayload>(schema: string):
|
|
42
|
-
payloadsDataHashMap(): Promise<Record<Hash,
|
|
43
|
-
payloadsHashMap(): Promise<Record<Hash,
|
|
37
|
+
payloadsBySchema<T extends TPayload>(schema: string): T[];
|
|
38
|
+
payloadsDataHashMap(): Promise<Record<Hash, TPayload>>;
|
|
39
|
+
payloadsHashMap(): Promise<Record<Hash, TPayload>>;
|
|
44
40
|
prev(address: Address): Lowercase<string> | null;
|
|
45
|
-
toResult(): (
|
|
41
|
+
toResult(): (TBoundWitness | TPayload[])[];
|
|
46
42
|
validate(): Promise<Error[]>;
|
|
47
43
|
}
|
|
48
44
|
//# sourceMappingURL=BoundWitnessWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAMnE,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Promisable } from '@xylabs/promise';
|
|
1
2
|
import { type QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
3
|
import type { Payload, Query } from '@xyo-network/payload-model';
|
|
3
4
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper';
|
|
@@ -5,8 +6,8 @@ import { BoundWitnessWrapper } from './BoundWitnessWrapper.ts';
|
|
|
5
6
|
export declare class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
|
|
6
7
|
private _payloadsWithoutQuery;
|
|
7
8
|
private _query;
|
|
8
|
-
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]):
|
|
9
|
-
static tryParseQuery<T extends Query>(obj: unknown):
|
|
9
|
+
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T>;
|
|
10
|
+
static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined>;
|
|
10
11
|
getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]>;
|
|
11
12
|
getQuery(): Promise<T>;
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,wBAAwB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,mBAAmB,CAAC,iBAAiB,CAAC;IAC3G,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,MAAM,CAAe;IAE7B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAC;IA2B3G,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IASlG,uBAAuB,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAS7D,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;CAK7B"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -176,14 +176,14 @@ import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper"
|
|
|
176
176
|
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper {
|
|
177
177
|
_payloadsWithoutQuery;
|
|
178
178
|
_query;
|
|
179
|
-
static
|
|
179
|
+
static parseQuery(obj, payloads) {
|
|
180
180
|
assertEx2(!Array.isArray(obj), () => "Array can not be converted to QueryBoundWitnessWrapper");
|
|
181
181
|
switch (typeof obj) {
|
|
182
182
|
case "object": {
|
|
183
183
|
const castWrapper = obj;
|
|
184
184
|
const result = castWrapper instanceof _QueryBoundWitnessWrapper ? castWrapper : isQueryBoundWitness(obj) ? new _QueryBoundWitnessWrapper(
|
|
185
|
-
|
|
186
|
-
payloads
|
|
185
|
+
obj,
|
|
186
|
+
payloads
|
|
187
187
|
) : void 0;
|
|
188
188
|
if (result === void 0) {
|
|
189
189
|
throw new Error("Unable to parse. Failed isQueryBoundWitness.");
|
|
@@ -193,10 +193,10 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
193
193
|
}
|
|
194
194
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
195
195
|
}
|
|
196
|
-
static
|
|
196
|
+
static tryParseQuery(obj) {
|
|
197
197
|
if (obj === void 0) return void 0;
|
|
198
198
|
try {
|
|
199
|
-
return
|
|
199
|
+
return this.parseQuery(obj);
|
|
200
200
|
} catch {
|
|
201
201
|
return void 0;
|
|
202
202
|
}
|
|
@@ -210,7 +210,7 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
210
210
|
async getQuery() {
|
|
211
211
|
const payloadMap = await this.payloadsDataHashMap();
|
|
212
212
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
213
|
-
return assertEx2(this._query, () => `Missing Query [${this.boundwitness}]`);
|
|
213
|
+
return assertEx2(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`);
|
|
214
214
|
}
|
|
215
215
|
};
|
|
216
216
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithMeta } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, WithMeta<TPayload>> | undefined\n private _payloadMap: Record<Hash, WithMeta<TPayload>> | undefined\n\n protected constructor(\n public boundwitness: WithMeta<TBoundWitness>,\n public payloads: WithMeta<TPayload>[] = [],\n public moduleErrors?: WithMeta<Payload>[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: WithMeta<P>[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: WithMeta<T> | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as WithMeta<T>\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as WithMeta<T>\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: WithMeta<P>[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: WithMeta<P>[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<WithMeta<TBoundWitness>>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): WithMeta<T>[] {\n return this.payloads.filter(payload => payload?.schema === schema) as WithMeta<T>[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<QueryBoundWitnessWrapper<T>> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj),\n payloads ? await Promise.all(payloads.map(payload => PayloadBuilder.build(payload))) : undefined,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static async tryParseQuery<T extends Query>(obj: unknown): Promise<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return await this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as WithMeta<T> | undefined)\n return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, TPayload> | undefined\n private _payloadMap: Record<Hash, TPayload> | undefined\n\n protected constructor(\n public boundwitness: TBoundWitness,\n public payloads: TPayload[] = [],\n public moduleErrors?: Payload[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: P[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: T | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as T\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as T\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: P[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<TBoundWitness>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): T[] {\n return this.payloads.filter(payload => payload?.schema === schema) as T[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Promisable } from '@xylabs/promise'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Payload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n obj,\n payloads,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { Address, Hash } from '@xylabs/hex';
|
|
2
2
|
import type { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
-
import type { Payload
|
|
3
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
4
4
|
import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper';
|
|
5
|
-
export declare const isBoundWitnessWrapper: <T extends BoundWitness =
|
|
6
|
-
schema: "network.xyo.boundwitness";
|
|
7
|
-
}, P extends Payload = {
|
|
5
|
+
export declare const isBoundWitnessWrapper: <T extends BoundWitness = BoundWitness, P extends Payload = {
|
|
8
6
|
schema: string;
|
|
9
7
|
} & import("@xyo-network/payload-model").PayloadFields>(value?: unknown) => value is BoundWitnessWrapper<T, P>;
|
|
10
8
|
export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
11
9
|
schema: string;
|
|
12
10
|
}> = BoundWitness, TPayload extends Payload = Payload> extends PayloadWrapperBase<TBoundWitness> {
|
|
13
|
-
boundwitness:
|
|
14
|
-
payloads:
|
|
15
|
-
moduleErrors?:
|
|
11
|
+
boundwitness: TBoundWitness;
|
|
12
|
+
payloads: TPayload[];
|
|
13
|
+
moduleErrors?: Payload[] | undefined;
|
|
16
14
|
private _payloadDataMap;
|
|
17
15
|
private _payloadMap;
|
|
18
|
-
protected constructor(boundwitness:
|
|
16
|
+
protected constructor(boundwitness: TBoundWitness, payloads?: TPayload[], moduleErrors?: Payload[] | undefined);
|
|
19
17
|
get addresses(): Lowercase<string>[];
|
|
20
18
|
get payloadHashes(): Lowercase<string>[];
|
|
21
19
|
get payloadSchemas(): string[];
|
|
@@ -23,14 +21,12 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
23
21
|
static as<T extends BoundWitness = BoundWitness>(value: unknown): BoundWitnessWrapper<T, {
|
|
24
22
|
schema: string;
|
|
25
23
|
} & import("@xyo-network/payload-model").PayloadFields> | undefined;
|
|
26
|
-
static load(address: Address): Promise<BoundWitnessWrapper<
|
|
27
|
-
schema: "network.xyo.boundwitness";
|
|
28
|
-
}, {
|
|
24
|
+
static load(address: Address): Promise<BoundWitnessWrapper<BoundWitness, {
|
|
29
25
|
schema: string;
|
|
30
26
|
} & import("@xyo-network/payload-model").PayloadFields> | null>;
|
|
31
|
-
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?:
|
|
32
|
-
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?:
|
|
33
|
-
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?:
|
|
27
|
+
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P>;
|
|
28
|
+
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined;
|
|
29
|
+
static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): Promise<BoundWitnessWrapper<T, P>>;
|
|
34
30
|
static wrappedDataHashMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>>;
|
|
35
31
|
dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>>;
|
|
36
32
|
getMissingPayloads(): Promise<Lowercase<string>[]>;
|
|
@@ -38,11 +34,11 @@ export declare class BoundWitnessWrapper<TBoundWitness extends BoundWitness<{
|
|
|
38
34
|
hashesBySchema(schema: string): string[];
|
|
39
35
|
payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
40
36
|
payloadsByHashes(hashes: Hash[]): Promise<TPayload[]>;
|
|
41
|
-
payloadsBySchema<T extends TPayload>(schema: string):
|
|
42
|
-
payloadsDataHashMap(): Promise<Record<Hash,
|
|
43
|
-
payloadsHashMap(): Promise<Record<Hash,
|
|
37
|
+
payloadsBySchema<T extends TPayload>(schema: string): T[];
|
|
38
|
+
payloadsDataHashMap(): Promise<Record<Hash, TPayload>>;
|
|
39
|
+
payloadsHashMap(): Promise<Record<Hash, TPayload>>;
|
|
44
40
|
prev(address: Address): Lowercase<string> | null;
|
|
45
|
-
toResult(): (
|
|
41
|
+
toResult(): (TBoundWitness | TPayload[])[];
|
|
46
42
|
validate(): Promise<Error[]>;
|
|
47
43
|
}
|
|
48
44
|
//# sourceMappingURL=BoundWitnessWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAMnE,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/BoundWitnessWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAMnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EACiB,cAAc,EAAE,kBAAkB,EACzD,MAAM,8BAA8B,CAAA;AAErC,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,YAAY,iBAAiB,CAAC,SAAS,OAAO;;gEACpF,OAAO,KACd,KAAK,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAKnC,CAAA;AAED,qBAAa,mBAAmB,CAC9B,aAAa,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,EACrE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAClC,SAAQ,kBAAkB,CAAC,aAAa,CAAC;IAKhC,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,QAAQ,EAAE;IACpB,YAAY,CAAC,EAAE,OAAO,EAAE;IANjC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,WAAW,CAAoC;IAEvD,SAAS,aACA,YAAY,EAAE,aAAa,EAC3B,QAAQ,GAAE,QAAQ,EAAO,EACzB,YAAY,CAAC,EAAE,OAAO,EAAE,YAAA;IAKjC,IAAI,SAAS,wBAEZ;IAED,IAAI,aAAa,wBAEhB;IAED,IAAI,cAAc,aAEjB;IAED,IAAI,cAAc,iCAEjB;IAED,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,KAAK,EAAE,OAAO;;;WAIlD,IAAI,CAAC,OAAO,EAAE,OAAO;;;IASlC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAC7E,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,EAAE,GACb,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IA2B5B,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;WASlH,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,OAAO,EACzD,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,EAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,GACb,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;WAcxB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EACpD,cAAc,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAW5C,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAqBhE,kBAAkB;IAKlB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IAI/D,cAAc,CAAC,MAAM,EAAE,MAAM;IAUvB,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKzD,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK3D,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;IAInD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAKtD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAKxD,IAAI,CAAC,OAAO,EAAE,OAAO;IAIrB,QAAQ;IAIO,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAG5C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Promisable } from '@xylabs/promise';
|
|
1
2
|
import { type QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
3
|
import type { Payload, Query } from '@xyo-network/payload-model';
|
|
3
4
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper';
|
|
@@ -5,8 +6,8 @@ import { BoundWitnessWrapper } from './BoundWitnessWrapper.ts';
|
|
|
5
6
|
export declare class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
|
|
6
7
|
private _payloadsWithoutQuery;
|
|
7
8
|
private _query;
|
|
8
|
-
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]):
|
|
9
|
-
static tryParseQuery<T extends Query>(obj: unknown):
|
|
9
|
+
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T>;
|
|
10
|
+
static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined>;
|
|
10
11
|
getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]>;
|
|
11
12
|
getQuery(): Promise<T>;
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../src/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,wBAAwB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,mBAAmB,CAAC,iBAAiB,CAAC;IAC3G,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,MAAM,CAAe;IAE7B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAC;IA2B3G,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IASlG,uBAAuB,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAS7D,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;CAK7B"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -176,14 +176,14 @@ import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper"
|
|
|
176
176
|
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper {
|
|
177
177
|
_payloadsWithoutQuery;
|
|
178
178
|
_query;
|
|
179
|
-
static
|
|
179
|
+
static parseQuery(obj, payloads) {
|
|
180
180
|
assertEx2(!Array.isArray(obj), () => "Array can not be converted to QueryBoundWitnessWrapper");
|
|
181
181
|
switch (typeof obj) {
|
|
182
182
|
case "object": {
|
|
183
183
|
const castWrapper = obj;
|
|
184
184
|
const result = castWrapper instanceof _QueryBoundWitnessWrapper ? castWrapper : isQueryBoundWitness(obj) ? new _QueryBoundWitnessWrapper(
|
|
185
|
-
|
|
186
|
-
payloads
|
|
185
|
+
obj,
|
|
186
|
+
payloads
|
|
187
187
|
) : void 0;
|
|
188
188
|
if (result === void 0) {
|
|
189
189
|
throw new Error("Unable to parse. Failed isQueryBoundWitness.");
|
|
@@ -193,10 +193,10 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
193
193
|
}
|
|
194
194
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
195
195
|
}
|
|
196
|
-
static
|
|
196
|
+
static tryParseQuery(obj) {
|
|
197
197
|
if (obj === void 0) return void 0;
|
|
198
198
|
try {
|
|
199
|
-
return
|
|
199
|
+
return this.parseQuery(obj);
|
|
200
200
|
} catch {
|
|
201
201
|
return void 0;
|
|
202
202
|
}
|
|
@@ -210,7 +210,7 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
210
210
|
async getQuery() {
|
|
211
211
|
const payloadMap = await this.payloadsDataHashMap();
|
|
212
212
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
213
|
-
return assertEx2(this._query, () => `Missing Query [${this.boundwitness}]`);
|
|
213
|
+
return assertEx2(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`);
|
|
214
214
|
}
|
|
215
215
|
};
|
|
216
216
|
export {
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithMeta } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, WithMeta<TPayload>> | undefined\n private _payloadMap: Record<Hash, WithMeta<TPayload>> | undefined\n\n protected constructor(\n public boundwitness: WithMeta<TBoundWitness>,\n public payloads: WithMeta<TPayload>[] = [],\n public moduleErrors?: WithMeta<Payload>[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: WithMeta<P>[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: WithMeta<T> | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as WithMeta<T>\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as WithMeta<T>\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: WithMeta<P>[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: WithMeta<P>[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<WithMeta<TBoundWitness>>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): WithMeta<T>[] {\n return this.payloads.filter(payload => payload?.schema === schema) as WithMeta<T>[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, WithMeta<TPayload>>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<QueryBoundWitnessWrapper<T>> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj),\n payloads ? await Promise.all(payloads.map(payload => PayloadBuilder.build(payload))) : undefined,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static async tryParseQuery<T extends Query>(obj: unknown): Promise<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return await this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as WithMeta<T> | undefined)\n return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n asBoundWitness, BoundWitnessSchema, isBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport {\n isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,\n} from '@xyo-network/payload-wrapper'\n\nexport const isBoundWitnessWrapper = <T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n value?: unknown,\n): value is BoundWitnessWrapper<T, P> => {\n if (isPayloadWrapperBase(value)) {\n return typeof (value as BoundWitnessWrapper<T, P>).payloadsDataHashMap === 'function'\n }\n return false\n}\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _payloadDataMap: Record<Hash, TPayload> | undefined\n private _payloadMap: Record<Hash, TPayload> | undefined\n\n protected constructor(\n public boundwitness: TBoundWitness,\n public payloads: TPayload[] = [],\n public moduleErrors?: Payload[],\n ) {\n super(boundwitness)\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : undefined\n }\n\n static async load(address: Address) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload\n assertEx(payload && isBoundWitness(payload), () => 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(\n obj: unknown,\n payloads?: P[],\n ): BoundWitnessWrapper<T, P> {\n let hydratedObj: T | undefined = undefined\n switch (typeof obj) {\n case 'string': {\n hydratedObj = JSON.parse(obj) as T\n break\n }\n case 'object': {\n if (isObject(obj)) {\n hydratedObj = obj as unknown as T\n }\n break\n }\n }\n\n if (hydratedObj) {\n if (isBoundWitnessWrapper<T, P>(hydratedObj)) {\n return hydratedObj as BoundWitnessWrapper<T, P>\n }\n if (isBoundWitness(hydratedObj)) {\n return new BoundWitnessWrapper(hydratedObj, payloads ?? [])\n }\n }\n\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static async wrap<T extends BoundWitness, P extends Payload>(\n obj: PayloadWrapperBase<T> | T,\n payloads?: P[],\n ): Promise<BoundWitnessWrapper<T, P>> {\n switch (typeof obj) {\n case 'object': {\n if (obj instanceof BoundWitnessWrapper) {\n return obj\n } else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {\n return await BoundWitnessWrapper.parse(obj.payload, payloads)\n } else {\n return await BoundWitnessWrapper.parse(obj, payloads)\n }\n }\n }\n }\n\n static async wrappedDataHashMap<T extends BoundWitness>(\n boundWitnesses: (T | BoundWitnessWrapper<T>)[],\n ): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n const bw = BoundWitnessWrapper.parse<T, Payload>(payload)\n result[await bw.dataHash()] = bw\n }),\n )\n return result\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex !== -1) {\n const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = asBoundWitness<TBoundWitness>(\n (await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],\n )\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined\n = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(innerBoundwitnessPayload, await PayloadBuilder.filterExclude(this.payloads, innerBoundwitnessHash))\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, () => `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getMissingPayloads() {\n const payloadMap = await this.payloadsDataHashMap()\n return this.payloadHashes.filter(hash => !payloadMap[hash])\n }\n\n async getWrappedPayloads(): Promise<PayloadWrapper<TPayload>[]> {\n return await Promise.all(this.payloads.map(payload => PayloadWrapper.wrap(payload)))\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadsByDataHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsDataHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n async payloadsByHashes(hashes: Hash[]): Promise<TPayload[]> {\n const map = await this.payloadsHashMap()\n return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)\n }\n\n payloadsBySchema<T extends TPayload>(schema: string): T[] {\n return this.payloads.filter(payload => payload?.schema === schema) as T[]\n }\n\n async payloadsDataHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))\n return this._payloadDataMap\n }\n\n async payloadsHashMap(): Promise<Record<Hash, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))\n return this._payloadMap\n }\n\n prev(address: Address) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloads]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Promisable } from '@xylabs/promise'\nimport { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Payload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n /* if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n } */\n const result = castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : isQueryBoundWitness(obj)\n ? (\n new QueryBoundWitnessWrapper<T>(\n obj,\n payloads,\n )\n )\n : undefined\n if (result === undefined) {\n throw new Error('Unable to parse. Failed isQueryBoundWitness.')\n }\n return result\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined> {\n if (obj === undefined) return undefined\n try {\n return this.parseQuery<T>(obj)\n } catch {\n return undefined\n }\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery\n = this._payloadsWithoutQuery\n ?? (await Promise.all(\n (await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map(payload => PayloadWrapper.wrap(payload)).filter(exists),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`)\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadWrapper","assertEx","PayloadBuilder","PayloadWrapper"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/boundwitness-wrapper",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0-rc.1",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,25 +29,27 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/assert": "^4.4.
|
|
33
|
-
"@xylabs/exists": "^4.4.
|
|
34
|
-
"@xylabs/hex": "^4.4.
|
|
35
|
-
"@xylabs/object": "^4.4.
|
|
36
|
-
"@
|
|
37
|
-
"@xyo-network/boundwitness-
|
|
38
|
-
"@xyo-network/
|
|
39
|
-
"@xyo-network/payload
|
|
40
|
-
"@xyo-network/payload-
|
|
41
|
-
"@xyo-network/payload-
|
|
32
|
+
"@xylabs/assert": "^4.4.12",
|
|
33
|
+
"@xylabs/exists": "^4.4.12",
|
|
34
|
+
"@xylabs/hex": "^4.4.12",
|
|
35
|
+
"@xylabs/object": "^4.4.12",
|
|
36
|
+
"@xylabs/promise": "^4.4.12",
|
|
37
|
+
"@xyo-network/boundwitness-model": "^3.6.0-rc.1",
|
|
38
|
+
"@xyo-network/boundwitness-validator": "^3.6.0-rc.1",
|
|
39
|
+
"@xyo-network/payload": "^3.6.0-rc.1",
|
|
40
|
+
"@xyo-network/payload-builder": "^3.6.0-rc.1",
|
|
41
|
+
"@xyo-network/payload-model": "^3.6.0-rc.1",
|
|
42
|
+
"@xyo-network/payload-wrapper": "^3.6.0-rc.1"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@xylabs/ts-scripts-yarn3": "^4.2.4",
|
|
45
46
|
"@xylabs/tsconfig": "^4.2.4",
|
|
46
|
-
"@xylabs/vitest-extended": "^4.4.
|
|
47
|
+
"@xylabs/vitest-extended": "^4.4.12",
|
|
47
48
|
"typescript": "^5.7.2",
|
|
48
|
-
"vitest": "^2.1.
|
|
49
|
+
"vitest": "^2.1.8"
|
|
49
50
|
},
|
|
50
51
|
"publishConfig": {
|
|
51
52
|
"access": "public"
|
|
52
|
-
}
|
|
53
|
+
},
|
|
54
|
+
"stableVersion": "3.5.2"
|
|
53
55
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from '@xyo-network/boundwitness-model'
|
|
8
8
|
import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
|
|
9
9
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
10
|
-
import type { Payload
|
|
10
|
+
import type { Payload } from '@xyo-network/payload-model'
|
|
11
11
|
import {
|
|
12
12
|
isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase,
|
|
13
13
|
} from '@xyo-network/payload-wrapper'
|
|
@@ -25,13 +25,13 @@ export class BoundWitnessWrapper<
|
|
|
25
25
|
TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,
|
|
26
26
|
TPayload extends Payload = Payload,
|
|
27
27
|
> extends PayloadWrapperBase<TBoundWitness> {
|
|
28
|
-
private _payloadDataMap: Record<Hash,
|
|
29
|
-
private _payloadMap: Record<Hash,
|
|
28
|
+
private _payloadDataMap: Record<Hash, TPayload> | undefined
|
|
29
|
+
private _payloadMap: Record<Hash, TPayload> | undefined
|
|
30
30
|
|
|
31
31
|
protected constructor(
|
|
32
|
-
public boundwitness:
|
|
33
|
-
public payloads:
|
|
34
|
-
public moduleErrors?:
|
|
32
|
+
public boundwitness: TBoundWitness,
|
|
33
|
+
public payloads: TPayload[] = [],
|
|
34
|
+
public moduleErrors?: Payload[],
|
|
35
35
|
) {
|
|
36
36
|
super(boundwitness)
|
|
37
37
|
}
|
|
@@ -67,17 +67,17 @@ export class BoundWitnessWrapper<
|
|
|
67
67
|
|
|
68
68
|
static parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(
|
|
69
69
|
obj: unknown,
|
|
70
|
-
payloads?:
|
|
70
|
+
payloads?: P[],
|
|
71
71
|
): BoundWitnessWrapper<T, P> {
|
|
72
|
-
let hydratedObj:
|
|
72
|
+
let hydratedObj: T | undefined = undefined
|
|
73
73
|
switch (typeof obj) {
|
|
74
74
|
case 'string': {
|
|
75
|
-
hydratedObj = JSON.parse(obj) as
|
|
75
|
+
hydratedObj = JSON.parse(obj) as T
|
|
76
76
|
break
|
|
77
77
|
}
|
|
78
78
|
case 'object': {
|
|
79
79
|
if (isObject(obj)) {
|
|
80
|
-
hydratedObj = obj as unknown as
|
|
80
|
+
hydratedObj = obj as unknown as T
|
|
81
81
|
}
|
|
82
82
|
break
|
|
83
83
|
}
|
|
@@ -95,7 +95,7 @@ export class BoundWitnessWrapper<
|
|
|
95
95
|
throw new Error(`Unable to parse [${typeof obj}]`)
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?:
|
|
98
|
+
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {
|
|
99
99
|
if (obj === undefined) return undefined
|
|
100
100
|
try {
|
|
101
101
|
return this.parse(obj, payloads)
|
|
@@ -106,7 +106,7 @@ export class BoundWitnessWrapper<
|
|
|
106
106
|
|
|
107
107
|
static async wrap<T extends BoundWitness, P extends Payload>(
|
|
108
108
|
obj: PayloadWrapperBase<T> | T,
|
|
109
|
-
payloads?:
|
|
109
|
+
payloads?: P[],
|
|
110
110
|
): Promise<BoundWitnessWrapper<T, P>> {
|
|
111
111
|
switch (typeof obj) {
|
|
112
112
|
case 'object': {
|
|
@@ -140,7 +140,7 @@ export class BoundWitnessWrapper<
|
|
|
140
140
|
const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)
|
|
141
141
|
if (innerBoundwitnessIndex !== -1) {
|
|
142
142
|
const innerBoundwitnessHash: Hash = this.payloadHashes[innerBoundwitnessIndex]
|
|
143
|
-
const innerBoundwitnessPayload = asBoundWitness<
|
|
143
|
+
const innerBoundwitnessPayload = asBoundWitness<TBoundWitness>(
|
|
144
144
|
(await PayloadBuilder.toDataHashMap(this.payloads))[innerBoundwitnessHash],
|
|
145
145
|
)
|
|
146
146
|
const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined
|
|
@@ -184,16 +184,16 @@ export class BoundWitnessWrapper<
|
|
|
184
184
|
return hashes.map(hash => assertEx(map[hash], () => 'Hash not found') as TPayload)
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
payloadsBySchema<T extends TPayload>(schema: string):
|
|
188
|
-
return this.payloads.filter(payload => payload?.schema === schema) as
|
|
187
|
+
payloadsBySchema<T extends TPayload>(schema: string): T[] {
|
|
188
|
+
return this.payloads.filter(payload => payload?.schema === schema) as T[]
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
async payloadsDataHashMap(): Promise<Record<Hash,
|
|
191
|
+
async payloadsDataHashMap(): Promise<Record<Hash, TPayload>> {
|
|
192
192
|
this._payloadDataMap = this._payloadDataMap ?? (await PayloadBuilder.toDataHashMap<TPayload>(this.payloads))
|
|
193
193
|
return this._payloadDataMap
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
async payloadsHashMap(): Promise<Record<Hash,
|
|
196
|
+
async payloadsHashMap(): Promise<Record<Hash, TPayload>> {
|
|
197
197
|
this._payloadMap = this._payloadMap ?? (await PayloadBuilder.toHashMap<TPayload>(this.payloads))
|
|
198
198
|
return this._payloadMap
|
|
199
199
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { exists } from '@xylabs/exists'
|
|
3
|
+
import type { Promisable } from '@xylabs/promise'
|
|
3
4
|
import { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
4
5
|
import { PayloadBuilder } from '@xyo-network/payload'
|
|
5
|
-
import type {
|
|
6
|
-
Payload, Query, WithMeta,
|
|
7
|
-
} from '@xyo-network/payload-model'
|
|
6
|
+
import type { Payload, Query } from '@xyo-network/payload-model'
|
|
8
7
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
9
8
|
|
|
10
9
|
import { BoundWitnessWrapper } from './BoundWitnessWrapper.ts'
|
|
@@ -13,7 +12,7 @@ export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitn
|
|
|
13
12
|
private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined
|
|
14
13
|
private _query: T | undefined
|
|
15
14
|
|
|
16
|
-
static
|
|
15
|
+
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {
|
|
17
16
|
assertEx(!Array.isArray(obj), () => 'Array can not be converted to QueryBoundWitnessWrapper')
|
|
18
17
|
switch (typeof obj) {
|
|
19
18
|
case 'object': {
|
|
@@ -26,8 +25,8 @@ export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitn
|
|
|
26
25
|
: isQueryBoundWitness(obj)
|
|
27
26
|
? (
|
|
28
27
|
new QueryBoundWitnessWrapper<T>(
|
|
29
|
-
|
|
30
|
-
payloads
|
|
28
|
+
obj,
|
|
29
|
+
payloads,
|
|
31
30
|
)
|
|
32
31
|
)
|
|
33
32
|
: undefined
|
|
@@ -40,10 +39,10 @@ export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitn
|
|
|
40
39
|
throw new Error(`Unable to parse [${typeof obj}]`)
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
static
|
|
42
|
+
static tryParseQuery<T extends Query>(obj: unknown): Promisable<QueryBoundWitnessWrapper<T> | undefined> {
|
|
44
43
|
if (obj === undefined) return undefined
|
|
45
44
|
try {
|
|
46
|
-
return
|
|
45
|
+
return this.parseQuery<T>(obj)
|
|
47
46
|
} catch {
|
|
48
47
|
return undefined
|
|
49
48
|
}
|
|
@@ -60,7 +59,7 @@ export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitn
|
|
|
60
59
|
|
|
61
60
|
async getQuery(): Promise<T> {
|
|
62
61
|
const payloadMap = await this.payloadsDataHashMap()
|
|
63
|
-
this._query = this._query ?? (payloadMap[this.boundwitness.query] as
|
|
64
|
-
return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)
|
|
62
|
+
this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)
|
|
63
|
+
return assertEx(this._query, () => `Missing Query [${JSON.stringify(this.boundwitness)}]`)
|
|
65
64
|
}
|
|
66
65
|
}
|