@xyo-network/boundwitness-wrapper 2.103.9 → 2.104.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/index.cjs +2 -4
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +2 -4
- package/dist/browser/index.js.map +1 -1
- package/dist/neutral/index.cjs +2 -4
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +2 -4
- package/dist/neutral/index.js.map +1 -1
- package/dist/node/index.cjs +2 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +2 -4
- package/dist/node/index.js.map +1 -1
- package/package.json +13 -13
package/dist/browser/index.cjs
CHANGED
|
@@ -102,8 +102,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
102
102
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
103
103
|
}
|
|
104
104
|
static tryParse(obj, payloads) {
|
|
105
|
-
if (obj === void 0)
|
|
106
|
-
return void 0;
|
|
105
|
+
if (obj === void 0) return void 0;
|
|
107
106
|
try {
|
|
108
107
|
return this.parse(obj, payloads);
|
|
109
108
|
} catch {
|
|
@@ -132,8 +131,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
132
131
|
return result;
|
|
133
132
|
}
|
|
134
133
|
async dig(depth) {
|
|
135
|
-
if (depth === 0)
|
|
136
|
-
return this;
|
|
134
|
+
if (depth === 0) return this;
|
|
137
135
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(import_boundwitness_model.BoundWitnessSchema);
|
|
138
136
|
if (innerBoundwitnessIndex > -1) {
|
|
139
137
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -76,8 +76,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
76
76
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
77
77
|
}
|
|
78
78
|
static tryParse(obj, payloads) {
|
|
79
|
-
if (obj === void 0)
|
|
80
|
-
return void 0;
|
|
79
|
+
if (obj === void 0) return void 0;
|
|
81
80
|
try {
|
|
82
81
|
return this.parse(obj, payloads);
|
|
83
82
|
} catch {
|
|
@@ -106,8 +105,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
106
105
|
return result;
|
|
107
106
|
}
|
|
108
107
|
async dig(depth) {
|
|
109
|
-
if (depth === 0)
|
|
110
|
-
return this;
|
|
108
|
+
if (depth === 0) return this;
|
|
111
109
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(BoundWitnessSchema);
|
|
112
110
|
if (innerBoundwitnessIndex > -1) {
|
|
113
111
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/dist/neutral/index.cjs
CHANGED
|
@@ -102,8 +102,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
102
102
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
103
103
|
}
|
|
104
104
|
static tryParse(obj, payloads) {
|
|
105
|
-
if (obj === void 0)
|
|
106
|
-
return void 0;
|
|
105
|
+
if (obj === void 0) return void 0;
|
|
107
106
|
try {
|
|
108
107
|
return this.parse(obj, payloads);
|
|
109
108
|
} catch {
|
|
@@ -132,8 +131,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
132
131
|
return result;
|
|
133
132
|
}
|
|
134
133
|
async dig(depth) {
|
|
135
|
-
if (depth === 0)
|
|
136
|
-
return this;
|
|
134
|
+
if (depth === 0) return this;
|
|
137
135
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(import_boundwitness_model.BoundWitnessSchema);
|
|
138
136
|
if (innerBoundwitnessIndex > -1) {
|
|
139
137
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AAEzB,oBAAyB;AACzB,gCAAiF;AACjF,oCAAsC;AACtC,6BAA+B;AAE/B,6BAAyE;AAElE,IAAMA,wBAAwB,wBACnCC,UAAAA;AAEA,UAAIC,6CAAqBD,KAAAA,GAAQ;AAC/B,WAAO,OAAQA,MAAoCE,wBAAwB;EAC7E;AACA,SAAO;AACT,GAPqC;AAS9B,IAAMC,sBAAN,MAAMA,6BAGHC,0CAAAA;EArBV,OAqBUA;;;;;;EACAC;EACAC;EAER,YACSC,cACAC,WAAiC,CAAA,GACjCC,cACP;AACA,UAAMF,YAAAA;SAJCA,eAAAA;SACAC,WAAAA;SACAC,eAAAA;EAGT;EAEA,IAAIC,YAAY;AACd,WAAO,KAAKH,aAAaG;EAC3B;EAEA,IAAIC,gBAAgB;AAClB,WAAO,KAAKJ,aAAaK;EAC3B;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKN,aAAaO;EAC3B;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKR,aAAaS;EAC3B;EAEA,OAAOC,GAA0CjB,OAAgB;AAC/D,WAAOA,iBAAiBG,uBAAuBH,QAAmCkB;EACpF;EAEA,aAAaC,KAAKC,SAAkB;AAClC,UAAMC,UAAU,MAAMC,sCAAeH,KAAKC,OAAAA;AAC1C,UAAMG,UAAUF,SAASE;AACzBC,gCAASD,eAAWE,0CAAeF,OAAAA,GAAU,MAAM,kCAAA;AAEnD,UAAMG,eAAyCH,eAAWE,0CAAeF,OAAAA,IAAWA,UAAUL;AAC9F,WAAOQ,eAAe,MAAMvB,qBAAoBwB,KAAKD,YAAAA,IAAgB;EACvE;EAEA,OAAOE,MACLC,KACArB,UAC2B;AAC3B,QAAIsB,cAAuCZ;AAC3C,YAAQ,OAAOW,KAAAA;MACb,KAAK,UAAU;AACbC,sBAAcC,KAAKH,MAAMC,GAAAA;AACzB;MACF;MACA,KAAK,UAAU;AACb,gBAAIG,wBAASH,GAAAA,GAAM;AACjBC,wBAAcD;QAChB;AACA;MACF;IACF;AAEA,QAAIC,aAAa;AACf,UAAI/B,sBAA4B+B,WAAAA,GAAc;AAC5C,eAAOA;MACT;AACA,cAAIL,0CAAeK,WAAAA,GAAc;AAC/B,eAAO,IAAI3B,qBAAoB2B,aAAatB,YAAY,CAAA,CAAE;MAC5D;IACF;AAEA,UAAM,IAAIyB,MAAM,oBAAoB,OAAOJ,GAAAA,GAAM;EACnD;EAEA,OAAOK,SAAoDL,KAAcrB,UAAiE;AACxI,QAAIqB,QAAQX,OAAW,QAAOA;AAC9B,QAAI;AACF,aAAO,KAAKU,MAAMC,KAAKrB,QAAAA;IACzB,QAAQ;AACN,aAAOU;IACT;EACF;EAEA,aAAaS,KACXE,KACArB,UACoC;AACpC,YAAQ,OAAOqB,KAAAA;MACb,KAAK,UAAU;AACb,YAAIA,eAAe1B,sBAAqB;AACtC,iBAAO0B;QACT,WAAWA,eAAeP,yCAAkBO,IAAIM,OAAM,MAAOC,8CAAoB;AAC/E,iBAAO,MAAMjC,qBAAoByB,MAAMC,IAAIN,SAASf,QAAAA;QACtD,OAAO;AACL,iBAAO,MAAML,qBAAoByB,MAAMC,KAAKrB,QAAAA;QAC9C;MACF;IACF;EACF;EAEA,aAAa6B,mBACXC,gBACiD;AACjD,UAAMC,SAAiD,CAAC;AACxD,UAAMC,QAAQC,IACZH,eAAeI,IAAI,OAAOnB,YAAAA;AACxB,YAAMoB,KAAKxC,qBAAoByB,MAAkBL,OAAAA;AACjDgB,aAAO,MAAMI,GAAGC,SAAQ,CAAA,IAAMD;IAChC,CAAA,CAAA;AAEF,WAAOJ;EACT;EAEA,MAAMM,IAAIC,OAA6D;AACrE,QAAIA,UAAU,EAAG,QAAO;AAExB,UAAMC,yBAAiC,KAAKlC,eAAemC,QAAQZ,4CAAAA;AACnE,QAAIW,yBAAyB,IAAI;AAC/B,YAAME,wBAA8B,KAAKtC,cAAcoC,sBAAAA;AACvD,YAAMG,+BAA2BC,2CAC9B,MAAMC,sCAAeC,cAAc,KAAK7C,QAAQ,GAAGyC,qBAAAA,CAAsB;AAE5E,YAAMK,oBACJJ,2BACE,IAAI/C,qBAAmC+C,0BAA0B,MAAME,sCAAeG,cAAc,KAAK/C,UAAUyC,qBAAAA,CAAAA,IACnH/B;AACJ,UAAIoC,mBAAmB;AACrB,eAAOA,kBAAkBT,IAAIC,QAAQA,QAAQ,IAAI5B,MAAAA;MACnD;IACF;AACAM,gCAAS,CAACsB,OAAO,MAAM,gCAAgCA,KAAAA,GAAQ;AAC/D,WAAO;EACT;EAEA,MAAMU,qBAAqB;AACzB,UAAMC,aAAa,MAAM,KAAKvD,oBAAmB;AACjD,WAAO,KAAKS,cAAc+C,OAAO,CAACC,SAAS,CAACF,WAAWE,IAAAA,CAAK;EAC9D;EAEA,MAAMC,qBAA0D;AAC9D,WAAO,MAAMpB,QAAQC,IAAI,KAAKjC,SAASkC,IAAI,CAACnB,YAAYD,sCAAeK,KAAKJ,OAAAA,CAAAA,CAAAA;EAC9E;EAEAsC,eAAe1B,QAAgB;AAC7B,UAAMI,SAAmB,CAAA;AACzB,eAAW,CAACuB,OAAOC,aAAAA,KAAkB,KAAKlD,eAAemD,QAAO,GAAI;AAClE,UAAID,kBAAkB5B,QAAQ;AAC5BI,eAAO0B,KAAK,KAAKtD,cAAcmD,KAAAA,CAAM;MACvC;IACF;AACA,WAAOvB;EACT;EAEA,MAAM2B,qBAAqBC,QAAqC;AAC9D,UAAMzB,MAAM,MAAM,KAAKxC,oBAAmB;AAC1C,WAAOiE,OAAOzB,IAAI,CAACiB,aAASnC,wBAASkB,IAAIiB,IAAAA,GAAO,MAAM,gBAAA,CAAA;EACxD;EAEA,MAAMS,iBAAiBD,QAAqC;AAC1D,UAAMzB,MAAM,MAAM,KAAK2B,gBAAe;AACtC,WAAOF,OAAOzB,IAAI,CAACiB,aAASnC,wBAASkB,IAAIiB,IAAAA,GAAO,MAAM,gBAAA,CAAA;EACxD;EAEAW,iBAAqCnC,QAA+B;AAClE,WAAO,KAAK3B,SAASkD,OAAO,CAACnC,YAAYA,SAASY,WAAWA,MAAAA;EAC/D;EAEA,MAAMjC,sBAAiE;AACrE,SAAKG,kBAAkB,KAAKA,mBAAoB,MAAM+C,sCAAeC,cAAwB,KAAK7C,QAAQ;AAC1G,WAAO,KAAKH;EACd;EAEA,MAAMgE,kBAA6D;AACjE,SAAK/D,cAAc,KAAKA,eAAgB,MAAM8C,sCAAemB,UAAoB,KAAK/D,QAAQ;AAC9F,WAAO,KAAKF;EACd;EAEAkE,KAAKpD,SAAkB;AACrB,WAAO,KAAKL,eAAe,KAAKL,UAAUsC,QAAQ5B,OAAAA,CAAAA;EACpD;EAEAqD,WAAW;AACT,WAAO;MAAC,KAAKlE;MAAc,KAAKC;;EAClC;EAEA,MAAekE,WAA6B;AAC1C,WAAO,MAAM,IAAIC,oDAAsB,KAAKpE,YAAY,EAAEmE,SAAQ;EACpE;AACF;;;AC9MA,IAAAE,iBAAyB;AACzB,oBAAwB;AAExB,qBAA+B;AAE/B,IAAAC,0BAA+B;AAIxB,IAAMC,2BAAN,MAAMA,kCAA0DC,oBAAAA;EATvE,OASuEA;;;EAC7DC;EACAC;EAER,aAAaC,WAAoCC,KAAcC,UAA4D;AACzHC,iCAAS,CAACC,MAAMC,QAAQJ,GAAAA,GAAM,MAAM,wDAAA;AACpC,YAAQ,OAAOA,KAAAA;MACb,KAAK,UAAU;AACb,cAAMK,cAAcL;AACpB,cAAMM,UACJD,uBAAuBV,4BAA2BU,cAChD,IAAIV,0BACF,MAAMY,8BAAeC,MAAMR,GAAAA,GAC3BC,WAAW,MAAMQ,QAAQC,IAAIT,SAASU,IAAI,CAACC,YAAYL,8BAAeC,MAAMI,OAAAA,CAAAA,CAAAA,IAAaC,MAAAA;AAM/F,eAAOP;MACT;IACF;AACA,UAAM,IAAIQ,MAAM,oBAAoB,OAAOd,GAAAA,GAAM;EACnD;EAEA,MAAMe,0BAA8D;AAClE,SAAKlB,wBACH,KAAKA,yBACJ,MAAMY,QAAQC,QACbM,wBAAS,MAAMT,8BAAeU,cAAc,KAAKhB,UAAU,KAAKW,QAAQM,KAAK,GAAGP,IAAI,CAACC,YAAYO,uCAAeC,KAAKR,OAAAA,CAAAA,CAAAA,CAAAA;AAEzH,WAAO,KAAKf;EACd;EAEA,MAAMwB,WAAuB;AAC3B,UAAMC,aAAa,MAAM,KAAKC,oBAAmB;AACjD,SAAKzB,SAAS,KAAKA,UAAWwB,WAAW,KAAKE,aAAaN,KAAK;AAChE,eAAOhB,yBAAS,KAAKJ,QAAQ,MAAM,kBAAkB,KAAK0B,YAAY,GAAG;EAC3E;AACF;","names":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/dist/neutral/index.js
CHANGED
|
@@ -76,8 +76,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
76
76
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
77
77
|
}
|
|
78
78
|
static tryParse(obj, payloads) {
|
|
79
|
-
if (obj === void 0)
|
|
80
|
-
return void 0;
|
|
79
|
+
if (obj === void 0) return void 0;
|
|
81
80
|
try {
|
|
82
81
|
return this.parse(obj, payloads);
|
|
83
82
|
} catch {
|
|
@@ -106,8 +105,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
106
105
|
return result;
|
|
107
106
|
}
|
|
108
107
|
async dig(depth) {
|
|
109
|
-
if (depth === 0)
|
|
110
|
-
return this;
|
|
108
|
+
if (depth === 0) return this;
|
|
111
109
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(BoundWitnessSchema);
|
|
112
110
|
if (innerBoundwitnessIndex > -1) {
|
|
113
111
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":";;;;AAAA,SAASA,gBAAgB;AAEzB,SAASC,gBAAgB;AACzB,SAASC,gBAA8BC,oBAAoBC,sBAAsB;AACjF,SAASC,6BAA6B;AACtC,SAASC,sBAAsB;AAE/B,SAASC,sBAAsBC,gBAAgBC,0BAA0B;AAElE,IAAMC,wBAAwB,wBACnCC,UAAAA;AAEA,MAAIC,qBAAqBD,KAAAA,GAAQ;AAC/B,WAAO,OAAQA,MAAoCE,wBAAwB;EAC7E;AACA,SAAO;AACT,GAPqC;AAS9B,IAAMC,sBAAN,MAAMA,6BAGHC,mBAAAA;EArBV,OAqBUA;;;;;;EACAC;EACAC;EAER,YACSC,cACAC,WAAiC,CAAA,GACjCC,cACP;AACA,UAAMF,YAAAA;SAJCA,eAAAA;SACAC,WAAAA;SACAC,eAAAA;EAGT;EAEA,IAAIC,YAAY;AACd,WAAO,KAAKH,aAAaG;EAC3B;EAEA,IAAIC,gBAAgB;AAClB,WAAO,KAAKJ,aAAaK;EAC3B;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKN,aAAaO;EAC3B;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKR,aAAaS;EAC3B;EAEA,OAAOC,GAA0CjB,OAAgB;AAC/D,WAAOA,iBAAiBG,uBAAuBH,QAAmCkB;EACpF;EAEA,aAAaC,KAAKC,SAAkB;AAClC,UAAMC,UAAU,MAAMC,eAAeH,KAAKC,OAAAA;AAC1C,UAAMG,UAAUF,SAASE;AACzBC,aAASD,WAAWE,eAAeF,OAAAA,GAAU,MAAM,kCAAA;AAEnD,UAAMG,eAAyCH,WAAWE,eAAeF,OAAAA,IAAWA,UAAUL;AAC9F,WAAOQ,eAAe,MAAMvB,qBAAoBwB,KAAKD,YAAAA,IAAgB;EACvE;EAEA,OAAOE,MACLC,KACArB,UAC2B;AAC3B,QAAIsB,cAAuCZ;AAC3C,YAAQ,OAAOW,KAAAA;MACb,KAAK,UAAU;AACbC,sBAAcC,KAAKH,MAAMC,GAAAA;AACzB;MACF;MACA,KAAK,UAAU;AACb,YAAIG,SAASH,GAAAA,GAAM;AACjBC,wBAAcD;QAChB;AACA;MACF;IACF;AAEA,QAAIC,aAAa;AACf,UAAI/B,sBAA4B+B,WAAAA,GAAc;AAC5C,eAAOA;MACT;AACA,UAAIL,eAAeK,WAAAA,GAAc;AAC/B,eAAO,IAAI3B,qBAAoB2B,aAAatB,YAAY,CAAA,CAAE;MAC5D;IACF;AAEA,UAAM,IAAIyB,MAAM,oBAAoB,OAAOJ,GAAAA,GAAM;EACnD;EAEA,OAAOK,SAAoDL,KAAcrB,UAAiE;AACxI,QAAIqB,QAAQX;AAAW,aAAOA;AAC9B,QAAI;AACF,aAAO,KAAKU,MAAMC,KAAKrB,QAAAA;IACzB,QAAQ;AACN,aAAOU;IACT;EACF;EAEA,aAAaS,KACXE,KACArB,UACoC;AACpC,YAAQ,OAAOqB,KAAAA;MACb,KAAK,UAAU;AACb,YAAIA,eAAe1B,sBAAqB;AACtC,iBAAO0B;QACT,WAAWA,eAAeP,kBAAkBO,IAAIM,OAAM,MAAOC,oBAAoB;AAC/E,iBAAO,MAAMjC,qBAAoByB,MAAMC,IAAIN,SAASf,QAAAA;QACtD,OAAO;AACL,iBAAO,MAAML,qBAAoByB,MAAMC,KAAKrB,QAAAA;QAC9C;MACF;IACF;EACF;EAEA,aAAa6B,mBACXC,gBACiD;AACjD,UAAMC,SAAiD,CAAC;AACxD,UAAMC,QAAQC,IACZH,eAAeI,IAAI,OAAOnB,YAAAA;AACxB,YAAMoB,KAAKxC,qBAAoByB,MAAkBL,OAAAA;AACjDgB,aAAO,MAAMI,GAAGC,SAAQ,CAAA,IAAMD;IAChC,CAAA,CAAA;AAEF,WAAOJ;EACT;EAEA,MAAMM,IAAIC,OAA6D;AACrE,QAAIA,UAAU;AAAG,aAAO;AAExB,UAAMC,yBAAiC,KAAKlC,eAAemC,QAAQZ,kBAAAA;AACnE,QAAIW,yBAAyB,IAAI;AAC/B,YAAME,wBAA8B,KAAKtC,cAAcoC,sBAAAA;AACvD,YAAMG,2BAA2BC,gBAC9B,MAAMC,eAAeC,cAAc,KAAK7C,QAAQ,GAAGyC,qBAAAA,CAAsB;AAE5E,YAAMK,oBACJJ,2BACE,IAAI/C,qBAAmC+C,0BAA0B,MAAME,eAAeG,cAAc,KAAK/C,UAAUyC,qBAAAA,CAAAA,IACnH/B;AACJ,UAAIoC,mBAAmB;AACrB,eAAOA,kBAAkBT,IAAIC,QAAQA,QAAQ,IAAI5B,MAAAA;MACnD;IACF;AACAM,aAAS,CAACsB,OAAO,MAAM,gCAAgCA,KAAAA,GAAQ;AAC/D,WAAO;EACT;EAEA,MAAMU,qBAAqB;AACzB,UAAMC,aAAa,MAAM,KAAKvD,oBAAmB;AACjD,WAAO,KAAKS,cAAc+C,OAAO,CAACC,SAAS,CAACF,WAAWE,IAAAA,CAAK;EAC9D;EAEA,MAAMC,qBAA0D;AAC9D,WAAO,MAAMpB,QAAQC,IAAI,KAAKjC,SAASkC,IAAI,CAACnB,YAAYD,eAAeK,KAAKJ,OAAAA,CAAAA,CAAAA;EAC9E;EAEAsC,eAAe1B,QAAgB;AAC7B,UAAMI,SAAmB,CAAA;AACzB,eAAW,CAACuB,OAAOC,aAAAA,KAAkB,KAAKlD,eAAemD,QAAO,GAAI;AAClE,UAAID,kBAAkB5B,QAAQ;AAC5BI,eAAO0B,KAAK,KAAKtD,cAAcmD,KAAAA,CAAM;MACvC;IACF;AACA,WAAOvB;EACT;EAEA,MAAM2B,qBAAqBC,QAAqC;AAC9D,UAAMzB,MAAM,MAAM,KAAKxC,oBAAmB;AAC1C,WAAOiE,OAAOzB,IAAI,CAACiB,SAASnC,SAASkB,IAAIiB,IAAAA,GAAO,MAAM,gBAAA,CAAA;EACxD;EAEA,MAAMS,iBAAiBD,QAAqC;AAC1D,UAAMzB,MAAM,MAAM,KAAK2B,gBAAe;AACtC,WAAOF,OAAOzB,IAAI,CAACiB,SAASnC,SAASkB,IAAIiB,IAAAA,GAAO,MAAM,gBAAA,CAAA;EACxD;EAEAW,iBAAqCnC,QAA+B;AAClE,WAAO,KAAK3B,SAASkD,OAAO,CAACnC,YAAYA,SAASY,WAAWA,MAAAA;EAC/D;EAEA,MAAMjC,sBAAiE;AACrE,SAAKG,kBAAkB,KAAKA,mBAAoB,MAAM+C,eAAeC,cAAwB,KAAK7C,QAAQ;AAC1G,WAAO,KAAKH;EACd;EAEA,MAAMgE,kBAA6D;AACjE,SAAK/D,cAAc,KAAKA,eAAgB,MAAM8C,eAAemB,UAAoB,KAAK/D,QAAQ;AAC9F,WAAO,KAAKF;EACd;EAEAkE,KAAKpD,SAAkB;AACrB,WAAO,KAAKL,eAAe,KAAKL,UAAUsC,QAAQ5B,OAAAA,CAAAA;EACpD;EAEAqD,WAAW;AACT,WAAO;MAAC,KAAKlE;MAAc,KAAKC;;EAClC;EAEA,MAAekE,WAA6B;AAC1C,WAAO,MAAM,IAAIC,sBAAsB,KAAKpE,YAAY,EAAEmE,SAAQ;EACpE;AACF;;;AC9MA,SAASE,YAAAA,iBAAgB;AACzB,SAASC,eAAe;AAExB,SAASC,kBAAAA,uBAAsB;AAE/B,SAASC,kBAAAA,uBAAsB;AAIxB,IAAMC,2BAAN,MAAMA,kCAA0DC,oBAAAA;EATvE,OASuEA;;;EAC7DC;EACAC;EAER,aAAaC,WAAoCC,KAAcC,UAA4D;AACzHC,IAAAA,UAAS,CAACC,MAAMC,QAAQJ,GAAAA,GAAM,MAAM,wDAAA;AACpC,YAAQ,OAAOA,KAAAA;MACb,KAAK,UAAU;AACb,cAAMK,cAAcL;AACpB,cAAMM,UACJD,uBAAuBV,4BAA2BU,cAChD,IAAIV,0BACF,MAAMY,gBAAeC,MAAMR,GAAAA,GAC3BC,WAAW,MAAMQ,QAAQC,IAAIT,SAASU,IAAI,CAACC,YAAYL,gBAAeC,MAAMI,OAAAA,CAAAA,CAAAA,IAAaC,MAAAA;AAM/F,eAAOP;MACT;IACF;AACA,UAAM,IAAIQ,MAAM,oBAAoB,OAAOd,GAAAA,GAAM;EACnD;EAEA,MAAMe,0BAA8D;AAClE,SAAKlB,wBACH,KAAKA,yBACJ,MAAMY,QAAQC,IACbM,SAAS,MAAMT,gBAAeU,cAAc,KAAKhB,UAAU,KAAKW,QAAQM,KAAK,GAAGP,IAAI,CAACC,YAAYO,gBAAeC,KAAKR,OAAAA,CAAAA,CAAAA,CAAAA;AAEzH,WAAO,KAAKf;EACd;EAEA,MAAMwB,WAAuB;AAC3B,UAAMC,aAAa,MAAM,KAAKC,oBAAmB;AACjD,SAAKzB,SAAS,KAAKA,UAAWwB,WAAW,KAAKE,aAAaN,KAAK;AAChE,WAAOhB,UAAS,KAAKJ,QAAQ,MAAM,kBAAkB,KAAK0B,YAAY,GAAG;EAC3E;AACF;","names":["assertEx","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/dist/node/index.cjs
CHANGED
|
@@ -99,8 +99,7 @@ var _BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wra
|
|
|
99
99
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
100
100
|
}
|
|
101
101
|
static tryParse(obj, payloads) {
|
|
102
|
-
if (obj === void 0)
|
|
103
|
-
return void 0;
|
|
102
|
+
if (obj === void 0) return void 0;
|
|
104
103
|
try {
|
|
105
104
|
return this.parse(obj, payloads);
|
|
106
105
|
} catch {
|
|
@@ -129,8 +128,7 @@ var _BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wra
|
|
|
129
128
|
return result;
|
|
130
129
|
}
|
|
131
130
|
async dig(depth) {
|
|
132
|
-
if (depth === 0)
|
|
133
|
-
return this;
|
|
131
|
+
if (depth === 0) return this;
|
|
134
132
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(import_boundwitness_model.BoundWitnessSchema);
|
|
135
133
|
if (innerBoundwitnessIndex > -1) {
|
|
136
134
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\nexport * from './QueryBoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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":["isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","import_assert","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/dist/node/index.js
CHANGED
|
@@ -73,8 +73,7 @@ var _BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
73
73
|
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
74
74
|
}
|
|
75
75
|
static tryParse(obj, payloads) {
|
|
76
|
-
if (obj === void 0)
|
|
77
|
-
return void 0;
|
|
76
|
+
if (obj === void 0) return void 0;
|
|
78
77
|
try {
|
|
79
78
|
return this.parse(obj, payloads);
|
|
80
79
|
} catch {
|
|
@@ -103,8 +102,7 @@ var _BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
103
102
|
return result;
|
|
104
103
|
}
|
|
105
104
|
async dig(depth) {
|
|
106
|
-
if (depth === 0)
|
|
107
|
-
return this;
|
|
105
|
+
if (depth === 0) return this;
|
|
108
106
|
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(BoundWitnessSchema);
|
|
109
107
|
if (innerBoundwitnessIndex > -1) {
|
|
110
108
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts","../../src/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\nimport { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\nimport { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } 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 { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessWrapper } from './BoundWitnessWrapper'\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 const wrapper =\n castWrapper instanceof QueryBoundWitnessWrapper ? castWrapper : (\n new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),\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","isObject","asBoundWitness","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadBuilder","isPayloadWrapperBase","PayloadWrapper","PayloadWrapperBase","isBoundWitnessWrapper","value","isPayloadWrapperBase","payloadsDataHashMap","BoundWitnessWrapper","PayloadWrapperBase","_payloadDataMap","_payloadMap","boundwitness","payloads","moduleErrors","addresses","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","previousHashes","previous_hashes","as","undefined","load","address","wrapper","PayloadWrapper","payload","assertEx","isBoundWitness","boundWitness","wrap","parse","obj","hydratedObj","JSON","isObject","Error","tryParse","schema","BoundWitnessSchema","wrappedDataHashMap","boundWitnesses","result","Promise","all","map","bw","dataHash","dig","depth","innerBoundwitnessIndex","indexOf","innerBoundwitnessHash","innerBoundwitnessPayload","asBoundWitness","PayloadBuilder","toDataHashMap","innerBoundwitness","filterExclude","getMissingPayloads","payloadMap","filter","hash","getWrappedPayloads","hashesBySchema","index","payloadSchema","entries","push","payloadsByDataHashes","hashes","payloadsByHashes","payloadsHashMap","payloadsBySchema","toHashMap","prev","toResult","validate","BoundWitnessValidator","assertEx","compact","PayloadBuilder","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
package/package.json
CHANGED
|
@@ -10,21 +10,21 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^3.5.
|
|
14
|
-
"@xylabs/hex": "^3.5.
|
|
15
|
-
"@xylabs/lodash": "^3.5.
|
|
16
|
-
"@xylabs/object": "^3.5.
|
|
17
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
18
|
-
"@xyo-network/boundwitness-validator": "~2.
|
|
19
|
-
"@xyo-network/payload": "~2.
|
|
20
|
-
"@xyo-network/payload-builder": "~2.
|
|
21
|
-
"@xyo-network/payload-model": "~2.
|
|
22
|
-
"@xyo-network/payload-wrapper": "~2.
|
|
13
|
+
"@xylabs/assert": "^3.5.1",
|
|
14
|
+
"@xylabs/hex": "^3.5.1",
|
|
15
|
+
"@xylabs/lodash": "^3.5.1",
|
|
16
|
+
"@xylabs/object": "^3.5.1",
|
|
17
|
+
"@xyo-network/boundwitness-model": "~2.104.1",
|
|
18
|
+
"@xyo-network/boundwitness-validator": "~2.104.1",
|
|
19
|
+
"@xyo-network/payload": "~2.104.1",
|
|
20
|
+
"@xyo-network/payload-builder": "~2.104.1",
|
|
21
|
+
"@xyo-network/payload-model": "~2.104.1",
|
|
22
|
+
"@xyo-network/payload-wrapper": "~2.104.1"
|
|
23
23
|
},
|
|
24
24
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@xylabs/ts-scripts-yarn3": "^3.
|
|
27
|
-
"@xylabs/tsconfig": "^3.
|
|
26
|
+
"@xylabs/ts-scripts-yarn3": "^3.11.2",
|
|
27
|
+
"@xylabs/tsconfig": "^3.11.2",
|
|
28
28
|
"typescript": "^5.4.5"
|
|
29
29
|
},
|
|
30
30
|
"exports": {
|
|
@@ -65,6 +65,6 @@
|
|
|
65
65
|
},
|
|
66
66
|
"sideEffects": false,
|
|
67
67
|
"types": "dist/node/index.d.ts",
|
|
68
|
-
"version": "2.
|
|
68
|
+
"version": "2.104.1",
|
|
69
69
|
"type": "module"
|
|
70
70
|
}
|