@peerbit/document
Advanced tools
Comparing version 9.0.26-aea0cef to 9.0.26-f0d763d
@@ -76,3 +76,3 @@ import { type AbstractType } from "@dao-xyz/borsh"; | ||
canSearch?: CanSearch; | ||
replicate: (request: types.SearchRequest | types.SearchRequestIndexed, results: types.Results<types.ResultTypeFromRequest<types.SearchRequest | types.SearchRequestIndexed>>) => Promise<void>; | ||
replicate: (request: types.SearchRequest | types.SearchRequestIndexed, results: types.Results<types.ResultTypeFromRequest<types.SearchRequest | types.SearchRequestIndexed, T, I>>) => Promise<void>; | ||
indexBy?: string | string[]; | ||
@@ -120,3 +120,3 @@ transform?: TransformOptions<T, I>; | ||
del(key: indexerTypes.IdKey): indexerTypes.IdKey[] | Promise<indexerTypes.IdKey[]>; | ||
getDetailed<Options extends QueryOptions<T, D, Resolve>, Resolve extends boolean | undefined = ExtractResolveFromOptions<Options>, RT extends types.Result = Resolve extends true ? types.ResultValue<T> : types.ResultIndexedValue<I>>(key: indexerTypes.IdKey | indexerTypes.IdPrimitive, options?: QueryOptions<T, D, Resolve>): Promise<types.Results<RT>[] | undefined>; | ||
getDetailed<Options extends QueryOptions<T, D, Resolve>, Resolve extends boolean | undefined = ExtractResolveFromOptions<Options>, RT extends types.Result = Resolve extends true ? types.ResultValue<WithContext<T>> : types.ResultIndexedValue<WithContext<I>>>(key: indexerTypes.IdKey | indexerTypes.IdPrimitive, options?: QueryOptions<T, D, Resolve>): Promise<types.Results<RT>[] | undefined>; | ||
getSize(): Promise<number> | number; | ||
@@ -126,3 +126,3 @@ private resolveDocument; | ||
canRead?: CanRead<I>; | ||
}): Promise<types.Results<types.ResultTypeFromRequest<R>>>; | ||
}): Promise<types.Results<types.ResultTypeFromRequest<R, T, I>>>; | ||
private clearResultsQueue; | ||
@@ -129,0 +129,0 @@ private clearAllResultQueues; |
@@ -154,5 +154,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
}; | ||
const coerceWithContext = (properties) => { | ||
let valueWithContext = properties.value; | ||
valueWithContext.__context = properties.context; | ||
const coerceWithContext = (value, context) => { | ||
if (value.__context) { | ||
return value; | ||
} | ||
let valueWithContext = value; | ||
valueWithContext.__context = context; | ||
return valueWithContext; | ||
@@ -333,5 +336,3 @@ }; | ||
const result = (await this.getDetailed(key instanceof indexerTypes.IdKey ? key : indexerTypes.toId(key), options))?.[0]?.results[0]; | ||
if (result) { | ||
return coerceWithContext(result); | ||
} | ||
return result?.value; | ||
} | ||
@@ -429,23 +430,35 @@ async getFromGid(gid) { | ||
} | ||
if (resolve && | ||
// if we are to resolve the document we need to go through all results and replace the results with the resolved values | ||
const shouldResolve = resolve && | ||
requestClazz === types.SearchRequestIndexed && | ||
!this.indexedTypeIsDocumentType && | ||
results) { | ||
results; | ||
if (results) { | ||
for (const set of results) { | ||
let coercedResult = []; | ||
for (const value of set.results) { | ||
const resolved = value instanceof types.ResultIndexedValue | ||
? (await this.resolveDocument({ | ||
indexed: value.value, | ||
head: value.context.head, | ||
}))?.value | ||
: value.value; | ||
let missingValues = false; | ||
for (let i = 0; i < set.results.length; i++) { | ||
let value = set.results[i]; | ||
let resolved; | ||
if (shouldResolve) { | ||
resolved = | ||
value instanceof types.ResultIndexedValue | ||
? (await this.resolveDocument({ | ||
indexed: value.value, | ||
head: value.context.head, | ||
}))?.value | ||
: value.value; | ||
} | ||
else { | ||
resolved = value.value; | ||
} | ||
if (resolved) { | ||
coercedResult.push(new types.ResultValue({ | ||
context: value.context, | ||
value: resolved, | ||
})); | ||
set.results[i]._value = coerceWithContext(resolved, value.context); | ||
} | ||
else { | ||
missingValues = true; | ||
} | ||
} | ||
set.results = coercedResult; | ||
if (missingValues) { | ||
set.results = set.results.filter((x) => !!x); | ||
} | ||
} | ||
@@ -808,4 +821,4 @@ } | ||
from, | ||
indexed: result.indexed || | ||
(await this.transformer(result.value, result.context)), | ||
indexed: coerceWithContext(result.indexed || | ||
(await this.transformer(result.value, result.context)), result.context), | ||
}); | ||
@@ -823,3 +836,3 @@ } | ||
from, | ||
indexed: result.indexed || result.value, | ||
indexed: coerceWithContext(result.indexed || result.value, result.context), | ||
}); | ||
@@ -899,4 +912,5 @@ } | ||
from: this.node.identity.publicKey, | ||
indexed: result.indexed || | ||
(await this.transformer(result.value, result.context)), | ||
indexed: coerceWithContext(result.indexed || | ||
(await this.transformer(result.value, // TODO tyes | ||
result.context)), result.context), | ||
}); | ||
@@ -950,5 +964,5 @@ } | ||
from: from, | ||
indexed: result instanceof types.ResultIndexedValue | ||
indexed: coerceWithContext(result instanceof types.ResultIndexedValue | ||
? result.value | ||
: await this.transformer(result.value, result.context), | ||
: await this.transformer(result.value, result.context), result.context), | ||
}); | ||
@@ -1004,3 +1018,3 @@ } | ||
if (resolve) { | ||
coercedBatch = (await Promise.all(batch.map(async (x) => x.value instanceof this.documentType | ||
coercedBatch = (await Promise.all(batch.map(async (x) => coerceWithContext(x.value instanceof this.documentType | ||
? x.value | ||
@@ -1010,6 +1024,6 @@ : (await this.resolveDocument({ | ||
indexed: x.indexed, | ||
}))?.value))).filter((x) => !!x); | ||
}))?.value, x.context)))).filter((x) => !!x); | ||
} | ||
else { | ||
coercedBatch = batch.map((x) => coerceWithContext(x)); | ||
coercedBatch = batch.map((x) => coerceWithContext(x.value, x.context)); | ||
} | ||
@@ -1016,0 +1030,0 @@ return dedup(coercedBatch, this.indexByResolver); |
{ | ||
"name": "@peerbit/document", | ||
"version": "9.0.26-aea0cef", | ||
"version": "9.0.26-f0d763d", | ||
"description": "Document store implementation", | ||
@@ -62,13 +62,13 @@ "type": "module", | ||
"@dao-xyz/borsh": "^5.2.3", | ||
"@peerbit/program": "5.1.6-aea0cef", | ||
"@peerbit/rpc": "5.0.36-aea0cef", | ||
"@peerbit/shared-log": "10.3.21-aea0cef", | ||
"@peerbit/indexer-interface": "2.0.6-aea0cef", | ||
"@peerbit/indexer-simple": "1.1.9-aea0cef", | ||
"@peerbit/indexer-sqlite3": "1.2.10-aea0cef", | ||
"@peerbit/document-interface": "2.0.11-aea0cef" | ||
"@peerbit/program": "5.1.6-f0d763d", | ||
"@peerbit/rpc": "5.0.36-f0d763d", | ||
"@peerbit/shared-log": "10.3.21-f0d763d", | ||
"@peerbit/indexer-interface": "2.0.6-f0d763d", | ||
"@peerbit/indexer-simple": "1.1.9-f0d763d", | ||
"@peerbit/indexer-sqlite3": "1.2.10-f0d763d", | ||
"@peerbit/document-interface": "2.0.11-f0d763d" | ||
}, | ||
"devDependencies": { | ||
"@peerbit/test-utils": "2.1.26-aea0cef", | ||
"@peerbit/time": "2.0.8-aea0cef", | ||
"@peerbit/test-utils": "2.1.26-f0d763d", | ||
"@peerbit/time": "2.0.8-f0d763d", | ||
"@types/pidusage": "^2.0.5", | ||
@@ -75,0 +75,0 @@ "pidusage": "^3.0.2" |
@@ -37,3 +37,3 @@ import { type AbstractType, field, serialize, variant } from "@dao-xyz/borsh"; | ||
value: T; | ||
indexed: I; | ||
indexed: WithContext<I>; | ||
context: types.Context; | ||
@@ -149,3 +149,5 @@ from: PublicSignKey; | ||
options?: QueryDetailedOptions<T, D, any>, | ||
): Promise<RPCResponse<types.Results<types.ResultTypeFromRequest<R>>>[]> => { | ||
): Promise< | ||
RPCResponse<types.Results<types.ResultTypeFromRequest<R, T, I>>>[] | ||
> => { | ||
const results: RPCResponse<types.Results<any>>[] = []; | ||
@@ -322,3 +324,5 @@ for (const response of responses) { | ||
types.ResultTypeFromRequest< | ||
types.SearchRequest | types.SearchRequestIndexed | ||
types.SearchRequest | types.SearchRequestIndexed, | ||
T, | ||
I | ||
> | ||
@@ -339,8 +343,12 @@ >, | ||
const coerceWithContext = <T>(properties: { | ||
value: T; | ||
context: types.Context; | ||
}): WithContext<T> => { | ||
let valueWithContext: WithContext<T> = properties.value as any; | ||
valueWithContext.__context = properties.context; | ||
const coerceWithContext = <T>( | ||
value: T | WithContext<T>, | ||
context: types.Context, | ||
): WithContext<T> => { | ||
if ((value as WithContext<T>).__context) { | ||
return value as WithContext<T>; | ||
} | ||
let valueWithContext: WithContext<T> = value as any; | ||
valueWithContext.__context = context; | ||
return valueWithContext; | ||
@@ -621,7 +629,3 @@ }; | ||
)?.[0]?.results[0]; | ||
if (result) { | ||
return coerceWithContext( | ||
result as { value: unknown; context: types.Context }, | ||
); | ||
} | ||
return result?.value; | ||
} | ||
@@ -685,4 +689,4 @@ | ||
RT extends types.Result = Resolve extends true | ||
? types.ResultValue<T> | ||
: types.ResultIndexedValue<I>, | ||
? types.ResultValue<WithContext<T>> | ||
: types.ResultIndexedValue<WithContext<I>>, | ||
>( | ||
@@ -693,3 +697,6 @@ key: indexerTypes.IdKey | indexerTypes.IdPrimitive, | ||
let results: | ||
| types.Results<types.ResultValue<T> | types.ResultIndexedValue<I>>[] | ||
| types.Results< | ||
| types.ResultValue<WithContext<T>> | ||
| types.ResultIndexedValue<WithContext<I>> | ||
>[] | ||
| undefined; | ||
@@ -755,31 +762,38 @@ const resolve = options?.resolve || options?.resolve == null; | ||
if ( | ||
// if we are to resolve the document we need to go through all results and replace the results with the resolved values | ||
const shouldResolve = | ||
resolve && | ||
requestClazz === types.SearchRequestIndexed && | ||
!this.indexedTypeIsDocumentType && | ||
results | ||
) { | ||
results; | ||
if (results) { | ||
for (const set of results) { | ||
let coercedResult: types.ResultValue<T>[] = []; | ||
for (const value of set.results) { | ||
const resolved = | ||
value instanceof types.ResultIndexedValue | ||
? ( | ||
await this.resolveDocument({ | ||
indexed: value.value, | ||
head: value.context.head, | ||
}) | ||
)?.value | ||
: value.value; | ||
let missingValues = false; | ||
for (let i = 0; i < set.results.length; i++) { | ||
let value = set.results[i]; | ||
let resolved: T | undefined; | ||
if (shouldResolve) { | ||
resolved = | ||
value instanceof types.ResultIndexedValue | ||
? ( | ||
await this.resolveDocument({ | ||
indexed: value.value, | ||
head: value.context.head, | ||
}) | ||
)?.value | ||
: value.value; | ||
} else { | ||
resolved = value.value as T; | ||
} | ||
if (resolved) { | ||
coercedResult.push( | ||
new types.ResultValue({ | ||
context: value.context, | ||
value: resolved, | ||
}), | ||
); | ||
set.results[i]._value = coerceWithContext(resolved, value.context); | ||
} else { | ||
missingValues = true; | ||
} | ||
} | ||
set.results = coercedResult; | ||
if (missingValues) { | ||
set.results = set.results.filter((x) => !!x); | ||
} | ||
} | ||
@@ -851,3 +865,3 @@ } | ||
}, | ||
): Promise<types.Results<types.ResultTypeFromRequest<R>>> { | ||
): Promise<types.Results<types.ResultTypeFromRequest<R, T, I>>> { | ||
// We do special case for querying the id as we can do it faster than iterating | ||
@@ -1027,5 +1041,3 @@ | ||
R extends types.SearchRequest | types.SearchRequestIndexed, | ||
RT extends types.Result = R extends types.SearchRequest | ||
? types.ResultValue<T> | ||
: types.ResultIndexedValue<I>, | ||
RT extends types.Result = types.ResultTypeFromRequest<R, T, I>, | ||
>( | ||
@@ -1059,3 +1071,4 @@ queryRequest: R, | ||
} | ||
const allResults: types.Results<types.ResultTypeFromRequest<R>>[] = []; | ||
const allResults: types.Results<types.ResultTypeFromRequest<R, T, I>>[] = | ||
[]; | ||
@@ -1075,3 +1088,3 @@ if (local) { | ||
let resolved: types.Results<types.ResultTypeFromRequest<R>>[] = []; | ||
let resolved: types.Results<types.ResultTypeFromRequest<R, T, I>>[] = []; | ||
if (remote) { | ||
@@ -1266,6 +1279,3 @@ const replicatorGroups = await this._log.getCover( | ||
kept: number; | ||
buffer: BufferedResult< | ||
types.ResultValue<T> | types.ResultIndexedValue<I>, | ||
I | ||
>[]; | ||
buffer: BufferedResult<types.ResultTypeFromRequest<R, T, I> | I, I>[]; | ||
} | ||
@@ -1282,4 +1292,4 @@ > = new Map(); | ||
const peerBuffers = (): { | ||
indexed: I; | ||
value: types.ResultValue<T> | types.ResultIndexedValue<I>; | ||
indexed: WithContext<I>; | ||
value: types.ResultTypeFromRequest<R, T, I> | I; | ||
from: PublicSignKey; | ||
@@ -1306,3 +1316,3 @@ context: types.Context; | ||
const results = response as types.Results< | ||
types.ResultTypeFromRequest<R> | ||
types.ResultTypeFromRequest<R, T, I> | ||
>; | ||
@@ -1316,4 +1326,6 @@ if (results.kept === 0n && results.results.length === 0) { | ||
} | ||
const buffer: BufferedResult<types.ResultTypeFromRequest<R>, I>[] = | ||
[]; | ||
const buffer: BufferedResult< | ||
types.ResultTypeFromRequest<R, T, I> | I, | ||
I | ||
>[] = []; | ||
@@ -1330,8 +1342,10 @@ for (const result of results.results) { | ||
buffer.push({ | ||
value: result.value, | ||
value: result.value as types.ResultTypeFromRequest<R, T, I>, | ||
context: result.context, | ||
from, | ||
indexed: | ||
indexed: coerceWithContext( | ||
(result.indexed as I) || | ||
(await this.transformer(result.value, result.context)), | ||
(await this.transformer(result.value, result.context)), | ||
result.context, | ||
), | ||
}); | ||
@@ -1351,3 +1365,6 @@ } else { | ||
from, | ||
indexed: result.indexed || result.value, | ||
indexed: coerceWithContext( | ||
result.indexed || result.value, | ||
result.context, | ||
), | ||
}); | ||
@@ -1450,8 +1467,10 @@ } | ||
from: this.node.identity.publicKey, | ||
indexed: | ||
indexed: coerceWithContext( | ||
result.indexed || | ||
(await this.transformer( | ||
result.value, | ||
result.context, | ||
)), | ||
(await this.transformer( | ||
result.value as any as T, // TODO tyes | ||
result.context, | ||
)), | ||
result.context, | ||
), | ||
}); | ||
@@ -1516,6 +1535,11 @@ } | ||
peerBuffer.buffer.push({ | ||
value: result.value, | ||
value: | ||
result.value as types.ResultTypeFromRequest< | ||
R, | ||
T, | ||
I | ||
>, | ||
context: result.context, | ||
from: from!, | ||
indexed: | ||
indexed: coerceWithContext( | ||
result instanceof types.ResultIndexedValue | ||
@@ -1527,2 +1551,4 @@ ? result.value | ||
), | ||
result.context, | ||
), | ||
}); | ||
@@ -1599,10 +1625,13 @@ } | ||
batch.map(async (x) => | ||
x.value instanceof this.documentType | ||
? x.value | ||
: ( | ||
await this.resolveDocument({ | ||
head: x.context.head, | ||
indexed: x.indexed, | ||
}) | ||
)?.value, | ||
coerceWithContext( | ||
x.value instanceof this.documentType | ||
? x.value | ||
: ( | ||
await this.resolveDocument({ | ||
head: x.context.head, | ||
indexed: x.indexed, | ||
}) | ||
)?.value, | ||
x.context, | ||
), | ||
), | ||
@@ -1613,3 +1642,3 @@ ) | ||
coercedBatch = batch.map((x) => | ||
coerceWithContext(x as { value: unknown; context: types.Context }), | ||
coerceWithContext(x.value, x.context), | ||
) as ValueTypeFromRequest<Resolve, T, I>[]; | ||
@@ -1616,0 +1645,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
303233
5501
+ Added@peerbit/any-store@2.1.6-f0d763d(transitive)
+ Added@peerbit/any-store-interface@1.0.0-f0d763d(transitive)
+ Added@peerbit/any-store-opfs@1.0.6-f0d763d(transitive)
+ Added@peerbit/blocks-interface@1.3.12-f0d763d(transitive)
+ Added@peerbit/cache@2.1.2-f0d763d(transitive)
+ Added@peerbit/crypto@2.3.5-f0d763d(transitive)
+ Added@peerbit/document-interface@2.0.11-f0d763d(transitive)
+ Added@peerbit/indexer-interface@2.0.6-f0d763d(transitive)
+ Added@peerbit/indexer-simple@1.1.9-f0d763d(transitive)
+ Added@peerbit/indexer-sqlite3@1.2.10-f0d763d(transitive)
+ Added@peerbit/keychain@1.0.24-f0d763d(transitive)
+ Added@peerbit/log@4.0.38-f0d763d(transitive)
+ Added@peerbit/logger@1.0.3-f0d763d(transitive)
+ Added@peerbit/program@5.1.6-f0d763d(transitive)
+ Added@peerbit/pubsub-interface@3.1.4-f0d763d(transitive)
+ Added@peerbit/riblt@1.0.6-f0d763d(transitive)
+ Added@peerbit/rpc@5.0.36-f0d763d(transitive)
+ Added@peerbit/shared-log@10.3.21-f0d763d(transitive)
+ Added@peerbit/stream-interface@5.1.4-f0d763d(transitive)
+ Added@peerbit/time@2.0.8-f0d763d(transitive)
- Removed@peerbit/any-store@2.1.6-aea0cef(transitive)
- Removed@peerbit/any-store-interface@1.0.0-aea0cef(transitive)
- Removed@peerbit/any-store-opfs@1.0.6-aea0cef(transitive)
- Removed@peerbit/blocks-interface@1.3.12-aea0cef(transitive)
- Removed@peerbit/cache@2.1.2-aea0cef(transitive)
- Removed@peerbit/crypto@2.3.5-aea0cef(transitive)
- Removed@peerbit/document-interface@2.0.11-aea0cef(transitive)
- Removed@peerbit/indexer-interface@2.0.6-aea0cef(transitive)
- Removed@peerbit/indexer-simple@1.1.9-aea0cef(transitive)
- Removed@peerbit/indexer-sqlite3@1.2.10-aea0cef(transitive)
- Removed@peerbit/keychain@1.0.24-aea0cef(transitive)
- Removed@peerbit/log@4.0.38-aea0cef(transitive)
- Removed@peerbit/logger@1.0.3-aea0cef(transitive)
- Removed@peerbit/program@5.1.6-aea0cef(transitive)
- Removed@peerbit/pubsub-interface@3.1.4-aea0cef(transitive)
- Removed@peerbit/riblt@1.0.6-aea0cef(transitive)
- Removed@peerbit/rpc@5.0.36-aea0cef(transitive)
- Removed@peerbit/shared-log@10.3.21-aea0cef(transitive)
- Removed@peerbit/stream-interface@5.1.4-aea0cef(transitive)
- Removed@peerbit/time@2.0.8-aea0cef(transitive)
Updated@peerbit/rpc@5.0.36-f0d763d