MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / queryCollection

Function queryCollection

packages/core/sdk/src/executor.ts:1368–1422  ·  view source on GitHub ↗
(
    definition: TDefinition,
    queryInput?: PluginStorageCollectionQueryInput<TDefinition>,
  )

Source from the content-addressed store, hash-verified

1366 });
1367
1368 const queryCollection = <TDefinition extends PluginStorageCollectionDefinition>(
1369 definition: TDefinition,
1370 queryInput?: PluginStorageCollectionQueryInput<TDefinition>,
1371 ) =>
1372 Effect.gen(function* () {
1373 const validationError = pluginStorageQueryValidationError(
1374 definition,
1375 queryInput as
1376 | PluginStorageCollectionQueryInput<PluginStorageCollectionDefinition>
1377 | undefined,
1378 );
1379 if (validationError) return yield* validationError;
1380
1381 const rows = yield* input.core.findMany("plugin_storage", {
1382 where: whereFor(definition.name),
1383 });
1384 const filtered = sortByOwnerPrecedence(rows)
1385 .filter((row) =>
1386 queryInput?.keyPrefix === undefined ? true : row.key.startsWith(queryInput.keyPrefix),
1387 )
1388 .filter((row) =>
1389 rowMatchesPluginStorageWhere(
1390 row,
1391 queryInput?.where as Readonly<Record<string, unknown>> | undefined,
1392 ),
1393 );
1394
1395 const sorted =
1396 queryInput?.orderBy && queryInput.orderBy.length > 0
1397 ? [...filtered].sort((left, right) => {
1398 for (const order of queryInput.orderBy ?? []) {
1399 const direction = order.direction === "desc" ? -1 : 1;
1400 const compared =
1401 comparePluginStorageValues(
1402 pluginStorageDataField(left.data, order.field),
1403 pluginStorageDataField(right.data, order.field),
1404 ) * direction;
1405 if (compared !== 0) return compared;
1406 }
1407 return (
1408 ownerRank(left.owner as Owner) - ownerRank(right.owner as Owner) ||
1409 left.key.localeCompare(right.key)
1410 );
1411 })
1412 : filtered;
1413
1414 const offset = queryInput?.offset ?? 0;
1415 const limited =
1416 queryInput?.limit === undefined
1417 ? sorted.slice(offset)
1418 : sorted.slice(offset, offset + queryInput.limit);
1419 return limited.map((row) =>
1420 pluginStorageEntryFromRow<PluginStorageCollectionData<TDefinition>>(row),
1421 );
1422 });
1423
1424 return {
1425 collection: (definition) => ({

Callers 1

makePluginStorageFacadeFunction · 0.85

Calls 8

whereForFunction · 0.85
sortByOwnerPrecedenceFunction · 0.85
pluginStorageDataFieldFunction · 0.85
ownerRankFunction · 0.70

Tested by

no test coverage detected