@mdbase-dev/connect 0.1.0-beta.70 → 0.1.0-beta.75
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/README.md +6 -0
- package/dist/browser/integrity.json +1 -1
- package/dist/browser/mdbase-connect.min.js +3 -3
- package/dist/browser/mdbase-connect.min.js.sha384 +1 -1
- package/dist/collection-client.d.ts +2 -1
- package/dist/collection-client.js +9 -1
- package/dist/connection.d.ts +2 -1
- package/dist/connection.js +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/operation-types.d.ts +28 -1
- package/dist/saved-view-pagination.d.ts +6 -0
- package/dist/saved-view-pagination.js +76 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
sha384-
|
|
1
|
+
sha384-2NXwGD96iZvxt5iZ6vfV4ZTuoY3PG7RMPOn+wmXEq+K+i06SN/u0vdHtOUb+Mj2p
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CollectionOperation, CollectionTypeDocument, JsonObject } from "@mdbase-dev/connect-protocol";
|
|
2
2
|
import { type CollectionChangesProblemCode, type CollectionDescriptionProblemCode, type CollectionMutationProblemCode, type CollectionQueryProblemCode, type CollectionReadProblemCode, type CollectionTypeProblemCode, type ConnectOutcome } from "./outcomes.js";
|
|
3
|
-
import type { ChangesInput, CollectionChange, CollectionChangesPage, CollectionDescription, CollectionSetupApplyResult, CollectionSetupAssessment, AssessCollectionSetupInput, AssessTypePackInput, ApplyCollectionSetupInput, ApplyTypePackInput, CreateInput, CreateTypeInput, CreateViewSourceInput, DeleteInput, DeletePreflightResult, DeleteResult, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, MdbaseCollectionTransport, MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ConnectRequestOptions, QueryAllOptions, QueryInput, QueryPage, QueryPagesOptions, QueryResult, ReadInput, ReadTypeInput, ReadViewSourceInput, RenameInput, RenamePreflightResult, RenameResult, RecordDocument, SavedViewExecution, SavedViewList, SavedViewSourceDocument, TypePackApplyResult, TypePackAssessment, UpdateInput, UpdateTypeInput, UpdateViewSourceInput, WatchOptions } from "./operation-types.js";
|
|
3
|
+
import type { ChangesInput, CollectionChange, CollectionChangesPage, CollectionDescription, CollectionSetupApplyResult, CollectionSetupAssessment, AssessCollectionSetupInput, AssessTypePackInput, ApplyCollectionSetupInput, ApplyTypePackInput, CreateInput, CreateTypeInput, CreateViewSourceInput, DeleteInput, DeletePreflightResult, DeleteResult, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, MdbaseCollectionTransport, MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ConnectRequestOptions, QueryAllOptions, QueryInput, QueryPage, QueryPagesOptions, QueryResult, ReadInput, ReadTypeInput, ReadViewSourceInput, RenameInput, RenamePreflightResult, RenameResult, RecordDocument, SavedViewExecution, SavedViewPage, SavedViewPagesOptions, SavedViewList, SavedViewSourceDocument, TypePackApplyResult, TypePackAssessment, UpdateInput, UpdateTypeInput, UpdateViewSourceInput, WatchOptions } from "./operation-types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Typed collection operations independent of OAuth, HTTP, or storage.
|
|
6
6
|
*
|
|
@@ -20,6 +20,7 @@ export declare class MdbaseCollectionClient<Frontmatter extends JsonObject = Jso
|
|
|
20
20
|
queryAll(input?: QueryInput, options?: QueryAllOptions<Frontmatter>): Promise<ConnectOutcome<QueryResult<Frontmatter>, CollectionQueryProblemCode>>;
|
|
21
21
|
listViews(options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewList, CollectionReadProblemCode>>;
|
|
22
22
|
executeView(input: ExecuteViewInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewExecution<Frontmatter>, CollectionReadProblemCode>>;
|
|
23
|
+
executeViewPages(input: ExecuteViewInput, options?: SavedViewPagesOptions<Frontmatter>): AsyncGenerator<ConnectOutcome<SavedViewPage<Frontmatter>, CollectionReadProblemCode>>;
|
|
23
24
|
readViewSource(input: ReadViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionReadProblemCode>>;
|
|
24
25
|
createViewSource(input: CreateViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionMutationProblemCode>>;
|
|
25
26
|
updateViewSource(input: UpdateViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionMutationProblemCode>>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { abortableDelay } from "./async.js";
|
|
2
2
|
import { coordinatedQueryPages } from "./query-pagination.js";
|
|
3
|
+
import { coordinatedSavedViewPages } from "./saved-view-pagination.js";
|
|
3
4
|
import { MdbaseConnectError, connectError, connectProblem, operationProblem } from "./errors.js";
|
|
4
5
|
import { COLLECTION_CHANGES_PROBLEM_CODES, COLLECTION_DESCRIPTION_PROBLEM_CODES, COLLECTION_MUTATION_PROBLEM_CODES, COLLECTION_QUERY_PROBLEM_CODES, COLLECTION_READ_PROBLEM_CODES, COLLECTION_TYPE_PROBLEM_CODES, ALL_CONNECT_PROBLEM_CODES, captureConnectOutcome, connectFailure, connectSuccess } from "./outcomes.js";
|
|
5
6
|
import { createRequestBudget, DEFAULT_REQUEST_TIMEOUT_MS, requestAbortReason } from "./request-budget.js";
|
|
@@ -38,7 +39,10 @@ export class MdbaseCollectionClient {
|
|
|
38
39
|
results: results.map(wireQueryRecord),
|
|
39
40
|
...(meta ? {
|
|
40
41
|
meta: {
|
|
41
|
-
totalCount: meta.total_count,
|
|
42
|
+
...(typeof meta.total_count === "number" ? { totalCount: meta.total_count } : {}),
|
|
43
|
+
...(meta.total_count_outcome === undefined
|
|
44
|
+
? {}
|
|
45
|
+
: { totalCountOutcome: meta.total_count_outcome }),
|
|
42
46
|
hasMore: meta.has_more,
|
|
43
47
|
...(meta.cursor ? { cursor: meta.cursor } : {}),
|
|
44
48
|
...(meta.snapshot ? { snapshot: meta.snapshot } : {})
|
|
@@ -99,6 +103,9 @@ export class MdbaseCollectionClient {
|
|
|
99
103
|
const outcome = await this.envelopeOperation("execute_view", input, COLLECTION_READ_PROBLEM_CODES, options);
|
|
100
104
|
return mapOutcome(outcome, wireSavedViewExecution);
|
|
101
105
|
}
|
|
106
|
+
async *executeViewPages(input, options = {}) {
|
|
107
|
+
yield* coordinatedSavedViewPages((pageInput, pageOptions) => this.executeView(pageInput, pageOptions), (cursor) => this.releaseQueryCursor(cursor), input, options);
|
|
108
|
+
}
|
|
102
109
|
readViewSource(input, options) {
|
|
103
110
|
return this.envelopeOperation("read_view_source", input, COLLECTION_READ_PROBLEM_CODES, options);
|
|
104
111
|
}
|
|
@@ -530,6 +537,7 @@ function wireSavedViewExecution(value) {
|
|
|
530
537
|
meta: {
|
|
531
538
|
totalCount: value.meta.total_count,
|
|
532
539
|
hasMore: value.meta.has_more,
|
|
540
|
+
...(value.meta.cursor ? { cursor: value.meta.cursor } : {}),
|
|
533
541
|
view: value.meta.view,
|
|
534
542
|
...(value.meta.context ? { context: value.meta.context } : {}),
|
|
535
543
|
...(value.meta.groups ? { groups: value.meta.groups } : {})
|
package/dist/connection.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { GrantKeyStore } from "./crypto.js";
|
|
|
5
5
|
import { MdbaseFileClient } from "./files.js";
|
|
6
6
|
import { type Application } from "./internal-types.js";
|
|
7
7
|
import type { MdbaseNativeNotificationRegistration, MdbaseNativeNotificationRegistrationOptions, MdbaseNotificationRegistration, MdbaseNotificationRegistrationOptions } from "./notifications.js";
|
|
8
|
-
import type { ChangesInput, CollectionChangesPage, CollectionDescription, CollectionSetupApplyResult, CollectionSetupAssessment, ApplyCollectionSetupInput, ApplyTypePackInput, AssessCollectionSetupInput, AssessTypePackInput, CreateInput, CreateTypeInput, CreateViewSourceInput, DeleteInput, DeletePreflightResult, DeleteProgressOptions, DeleteResult, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ConnectRequestOptions, PendingMutation, QueryAllOptions, QueryInput, QueryPage, QueryPagesOptions, QueryResult, ReadInput, ReadTypeInput, ReadViewSourceInput, RenameInput, RenamePreflightResult, RenameProgressOptions, RenameResult, RecordDocument, SavedViewExecution, SavedViewList, SavedViewSourceDocument, TypePackApplyResult, TypePackAssessment, UpdateInput, UpdateTypeInput, UpdateViewSourceInput, MdbaseWatchSubscription, WatchInput } from "./operation-types.js";
|
|
8
|
+
import type { ChangesInput, CollectionChangesPage, CollectionDescription, CollectionSetupApplyResult, CollectionSetupAssessment, ApplyCollectionSetupInput, ApplyTypePackInput, AssessCollectionSetupInput, AssessTypePackInput, CreateInput, CreateTypeInput, CreateViewSourceInput, DeleteInput, DeletePreflightResult, DeleteProgressOptions, DeleteResult, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ConnectRequestOptions, PendingMutation, QueryAllOptions, QueryInput, QueryPage, QueryPagesOptions, QueryResult, ReadInput, ReadTypeInput, ReadViewSourceInput, RenameInput, RenamePreflightResult, RenameProgressOptions, RenameResult, RecordDocument, SavedViewExecution, SavedViewPage, SavedViewPagesOptions, SavedViewList, SavedViewSourceDocument, TypePackApplyResult, TypePackAssessment, UpdateInput, UpdateTypeInput, UpdateViewSourceInput, MdbaseWatchSubscription, WatchInput } from "./operation-types.js";
|
|
9
9
|
import { type AuthorizationProblemCode, type CollectionChangesProblemCode, type CollectionDescriptionProblemCode, type CollectionMutationProblemCode, type CollectionQueryProblemCode, type CollectionReadProblemCode, type CollectionTypeProblemCode, type ConnectOutcome, type DirectAccessProblemCode, type NotificationProblemCode, type RegistrationProblemCode } from "./outcomes.js";
|
|
10
10
|
import type { MdbaseDeviceAuthorization } from "./authorization-types.js";
|
|
11
11
|
import { type ResolvedConnectTimeouts } from "./request-budget.js";
|
|
@@ -112,6 +112,7 @@ export declare class MdbaseConnection<Frontmatter extends JsonObject = JsonObjec
|
|
|
112
112
|
queryAll(input?: QueryInput, options?: QueryAllOptions<Frontmatter>): Promise<ConnectOutcome<QueryResult<Frontmatter>, CollectionQueryProblemCode>>;
|
|
113
113
|
listViews(options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewList, CollectionReadProblemCode>>;
|
|
114
114
|
executeView(input: ExecuteViewInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewExecution<Frontmatter>, CollectionReadProblemCode>>;
|
|
115
|
+
executeViewPages(input: ExecuteViewInput, options?: SavedViewPagesOptions<Frontmatter>): AsyncGenerator<ConnectOutcome<SavedViewPage<Frontmatter>, CollectionReadProblemCode>>;
|
|
115
116
|
readViewSource(input: ReadViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionReadProblemCode>>;
|
|
116
117
|
createViewSource(input: CreateViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionMutationProblemCode>>;
|
|
117
118
|
updateViewSource(input: UpdateViewSourceInput, options?: ConnectRequestOptions): Promise<ConnectOutcome<SavedViewSourceDocument, CollectionMutationProblemCode>>;
|
package/dist/connection.js
CHANGED
|
@@ -237,6 +237,9 @@ export class MdbaseConnection {
|
|
|
237
237
|
executeView(input, options) {
|
|
238
238
|
return this.collectionClient.executeView(input, options);
|
|
239
239
|
}
|
|
240
|
+
executeViewPages(input, options = {}) {
|
|
241
|
+
return this.collectionClient.executeViewPages(input, options);
|
|
242
|
+
}
|
|
240
243
|
readViewSource(input, options) {
|
|
241
244
|
return this.collectionClient.readViewSource(input, options);
|
|
242
245
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export type { MdbaseFileSource, CollectionFileDescriptor, MdbaseFileDeleteReceip
|
|
|
15
15
|
export { parseMdbasePushPayload, parseMdbaseNativeNotificationData, showMdbasePushNotification } from "./notifications.js";
|
|
16
16
|
export type { MdbaseNotificationRegistrationOptions, MdbaseNotificationRegistration, MdbaseNativeNotificationRegistrationOptions, MdbaseNativeNotificationRegistration, MdbaseNativeNotificationData, MdbasePushPayload } from "./notifications.js";
|
|
17
17
|
export type { ConnectSuccess, ConnectFailure, ConnectOutcome, CommonOperationProblemCode, RegistrationProblemCode, AuthorizationProblemCode, NotificationProblemCode, DirectAccessProblemCode, SessionProblemCode, CollectionSetupProblemCode, CollectionDescriptionProblemCode, CollectionReadProblemCode, CollectionQueryProblemCode, CollectionMutationProblemCode, CollectionChangesProblemCode, CollectionTypeProblemCode } from "./outcomes.js";
|
|
18
|
-
export type { MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ReadInput, DataContractSelector, CollectionFileMetadata, DataContractViewIdentity, QueryRecord, RecordDocument, QueryInput, QueryProjection, QuerySelectionExpression, QueryOrder, QuerySummary, QueryResult, QueryPagesOptions, QueryAllOptions, QueryPage, ConnectRequestOptions, MutationEstimate, MutationProgressState, MutationProgress, MutationProgressOptions, RequestCoordinationOptions, RenameProgressOptions, DeleteProgressOptions, PendingMutationSummary, PendingMutation, CreateInput, UpdateInput, DeleteInput, DeleteResult, DeletePreflightResult, RenameInput, RenameResult, RenamePreflightResult, ReadTypeInput, CreateTypeInput, UpdateTypeInput, ReadViewSourceInput, CreateViewSourceInput, UpdateViewSourceInput, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, SavedViewPresentation, SavedViewSource, SavedViewProperty, SavedNamedView, SavedViewDocument, SavedViewList, SavedViewSourceDocument, SavedViewExecution, ContractSetupChoice, TypePackResourceDiff, TypePackReceipt, TypePackAssessment, TypePackApplyResult, ConfigurationContributionValue, ConfigurationRequirement, ConfigurationProvision, ApplicationCollectionSetupRequirements, ApplicationCollectionSetupProvisions, ConfigurationSetupConflict, ConfigurationSetupAssessment, CollectionSetupAssessment, CollectionSetupReceipt, CollectionSetupApplyResult, AssessTypePackInput, ApplyTypePackInput, AssessCollectionSetupInput, ApplyCollectionSetupInput, ChangesInput, WatchOptions, WatchRetryOptions, WatchStatus, WatchInput, MdbaseWatchSubscription, CollectionChange, CollectionChangesPage, CollectionDescription, CollectionContractDescriptor, CollectionContractImplementationDescriptor, CollectionTypeDescriptor } from "./operation-types.js";
|
|
18
|
+
export type { MdbaseDesiredTimer, MdbaseTimer, MdbaseTimerList, MdbaseTimerReconciliation, ReadInput, DataContractSelector, CollectionFileMetadata, DataContractViewIdentity, QueryRecord, RecordDocument, QueryInput, QueryProjection, QuerySelectionExpression, QueryOrder, QuerySummary, QueryResult, QueryPagesOptions, QueryAllOptions, QueryPage, ConnectRequestOptions, MutationEstimate, MutationProgressState, MutationProgress, MutationProgressOptions, RequestCoordinationOptions, RenameProgressOptions, DeleteProgressOptions, PendingMutationSummary, PendingMutation, CreateInput, UpdateInput, DeleteInput, DeleteResult, DeletePreflightResult, RenameInput, RenameResult, RenamePreflightResult, ReadTypeInput, CreateTypeInput, UpdateTypeInput, ReadViewSourceInput, CreateViewSourceInput, UpdateViewSourceInput, DeleteViewSourceInput, DeleteViewSourceResult, ExecuteViewInput, SavedViewPresentation, SavedViewSource, SavedViewProperty, SavedNamedView, SavedViewDocument, SavedViewList, SavedViewSourceDocument, SavedViewExecution, SavedViewPage, SavedViewPagesOptions, ContractSetupChoice, TypePackResourceDiff, TypePackReceipt, TypePackAssessment, TypePackApplyResult, ConfigurationContributionValue, ConfigurationRequirement, ConfigurationProvision, ApplicationCollectionSetupRequirements, ApplicationCollectionSetupProvisions, ConfigurationSetupConflict, ConfigurationSetupAssessment, CollectionSetupAssessment, CollectionSetupReceipt, CollectionSetupApplyResult, AssessTypePackInput, ApplyTypePackInput, AssessCollectionSetupInput, ApplyCollectionSetupInput, ChangesInput, WatchOptions, WatchRetryOptions, WatchStatus, WatchInput, MdbaseWatchSubscription, CollectionChange, CollectionChangesPage, CollectionDescription, CollectionContractDescriptor, CollectionContractImplementationDescriptor, CollectionTypeDescriptor } from "./operation-types.js";
|
|
19
19
|
export { externalStore } from "./external-store.js";
|
|
20
20
|
export type { MdbaseExternalStore } from "./external-store.js";
|
|
21
21
|
export { MdbaseBrowserSelection, MdbaseMemorySelection } from "./selection.js";
|
|
@@ -172,7 +172,14 @@ export interface QueryInput {
|
|
|
172
172
|
export interface QueryResult<Record extends JsonObject = JsonObject> {
|
|
173
173
|
results: Array<QueryRecord<Record>>;
|
|
174
174
|
meta?: {
|
|
175
|
-
|
|
175
|
+
/** Exact total when it is available within the page summary budget. */
|
|
176
|
+
totalCount?: number;
|
|
177
|
+
/** Typed successful outcome when exact counting is deferred for paging. */
|
|
178
|
+
totalCountOutcome?: {
|
|
179
|
+
status: "deferred";
|
|
180
|
+
budget: "eager_summary_rows";
|
|
181
|
+
limit: number;
|
|
182
|
+
};
|
|
176
183
|
hasMore: boolean;
|
|
177
184
|
cursor?: string;
|
|
178
185
|
snapshot?: string;
|
|
@@ -385,8 +392,19 @@ export interface ExecuteViewInput {
|
|
|
385
392
|
} | null;
|
|
386
393
|
limit?: number;
|
|
387
394
|
offset?: number;
|
|
395
|
+
/** Opaque, single-use token returned for the next snapshot-pinned page. */
|
|
396
|
+
cursor?: string;
|
|
388
397
|
render?: boolean;
|
|
389
398
|
}
|
|
399
|
+
export interface SavedViewPagesOptions<Frontmatter extends JsonObject = JsonObject> {
|
|
400
|
+
firstPageSize?: number;
|
|
401
|
+
pageSize?: number;
|
|
402
|
+
signal?: AbortSignal;
|
|
403
|
+
/** Independent budget for each page requested by this caller-driven iterator. */
|
|
404
|
+
pageTimeoutMs?: number | null;
|
|
405
|
+
coordination?: RequestCoordinationOptions;
|
|
406
|
+
onProgress?: (page: SavedViewPage<Frontmatter>) => void;
|
|
407
|
+
}
|
|
390
408
|
export interface SavedViewPresentation extends JsonObject {
|
|
391
409
|
type: string;
|
|
392
410
|
fallback?: string;
|
|
@@ -439,6 +457,7 @@ export interface SavedViewExecution<Frontmatter extends JsonObject = JsonObject>
|
|
|
439
457
|
meta: {
|
|
440
458
|
totalCount: number;
|
|
441
459
|
hasMore: boolean;
|
|
460
|
+
cursor?: string;
|
|
442
461
|
view: {
|
|
443
462
|
path: string;
|
|
444
463
|
id: string;
|
|
@@ -453,6 +472,14 @@ export interface SavedViewExecution<Frontmatter extends JsonObject = JsonObject>
|
|
|
453
472
|
}>;
|
|
454
473
|
};
|
|
455
474
|
}
|
|
475
|
+
export interface SavedViewPage<Frontmatter extends JsonObject = JsonObject> extends SavedViewExecution<Frontmatter> {
|
|
476
|
+
page: number;
|
|
477
|
+
offset: number;
|
|
478
|
+
loaded: number;
|
|
479
|
+
complete: boolean;
|
|
480
|
+
/** Opaque token for the next page while this iterator remains open. */
|
|
481
|
+
cursor?: string;
|
|
482
|
+
}
|
|
456
483
|
export type ContractSetupChoice = {
|
|
457
484
|
contract: ContractRequirement;
|
|
458
485
|
mode: "starter";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { JsonObject } from "@mdbase-dev/connect-protocol";
|
|
2
|
+
import { type CollectionReadProblemCode, type ConnectOutcome } from "./outcomes.js";
|
|
3
|
+
import type { ConnectRequestOptions, ExecuteViewInput, SavedViewExecution, SavedViewPage, SavedViewPagesOptions } from "./operation-types.js";
|
|
4
|
+
type SavedViewOperation<Frontmatter extends JsonObject> = (input: ExecuteViewInput, options?: ConnectRequestOptions) => Promise<ConnectOutcome<SavedViewExecution<Frontmatter>, CollectionReadProblemCode>>;
|
|
5
|
+
export declare function coordinatedSavedViewPages<Frontmatter extends JsonObject>(executeView: SavedViewOperation<Frontmatter>, releaseQueryCursor: (cursor: string) => Promise<void>, input: ExecuteViewInput, options?: SavedViewPagesOptions<Frontmatter>): AsyncGenerator<ConnectOutcome<SavedViewPage<Frontmatter>, CollectionReadProblemCode>>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { connectProblem } from "./errors.js";
|
|
2
|
+
import { connectFailure, connectSuccess } from "./outcomes.js";
|
|
3
|
+
export async function* coordinatedSavedViewPages(executeView, releaseQueryCursor, input, options = {}) {
|
|
4
|
+
const { offset: requestedOffset, limit: requestedLimit, cursor: requestedCursor, ...criteria } = input;
|
|
5
|
+
let offset = nonNegativeInteger(requestedOffset, 0);
|
|
6
|
+
const firstPageSize = positiveInteger(options.firstPageSize ?? requestedLimit, 200);
|
|
7
|
+
const pageSize = positiveInteger(options.pageSize ?? requestedLimit, 1_000);
|
|
8
|
+
let cursor = requestedCursor;
|
|
9
|
+
let cursorMode = requestedCursor !== undefined;
|
|
10
|
+
let cursorToRelease = requestedCursor;
|
|
11
|
+
let loaded = 0;
|
|
12
|
+
let pageNumber = 0;
|
|
13
|
+
try {
|
|
14
|
+
while (!options.signal?.aborted) {
|
|
15
|
+
const pageCursor = cursor;
|
|
16
|
+
const outcome = await executeView({
|
|
17
|
+
...criteria,
|
|
18
|
+
limit: pageNumber === 0 ? firstPageSize : pageSize,
|
|
19
|
+
...(cursorMode && pageCursor ? { cursor: pageCursor } : { offset })
|
|
20
|
+
}, {
|
|
21
|
+
signal: options.signal,
|
|
22
|
+
timeoutMs: options.pageTimeoutMs,
|
|
23
|
+
coordination: { ...options.coordination, coalesce: false }
|
|
24
|
+
});
|
|
25
|
+
if (!outcome.ok) {
|
|
26
|
+
yield outcome;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const result = outcome.value;
|
|
30
|
+
const returnedCursor = result.meta.cursor;
|
|
31
|
+
if (returnedCursor) {
|
|
32
|
+
cursorMode = true;
|
|
33
|
+
cursor = returnedCursor;
|
|
34
|
+
cursorToRelease = returnedCursor;
|
|
35
|
+
}
|
|
36
|
+
else if (cursorMode) {
|
|
37
|
+
cursor = undefined;
|
|
38
|
+
cursorToRelease = pageCursor;
|
|
39
|
+
}
|
|
40
|
+
if (cursorMode && result.meta.hasMore && !returnedCursor) {
|
|
41
|
+
yield connectFailure(connectProblem("invalid_operation_response", "The collection authority omitted the cursor required for the next saved-view page."));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
loaded += result.results.length;
|
|
45
|
+
const complete = !result.meta.hasMore || result.results.length === 0;
|
|
46
|
+
const page = {
|
|
47
|
+
...result,
|
|
48
|
+
page: pageNumber,
|
|
49
|
+
offset,
|
|
50
|
+
loaded,
|
|
51
|
+
complete,
|
|
52
|
+
...(returnedCursor ? { cursor: returnedCursor } : {})
|
|
53
|
+
};
|
|
54
|
+
options.onProgress?.(page);
|
|
55
|
+
yield connectSuccess(page, outcome.diagnostics);
|
|
56
|
+
if (complete)
|
|
57
|
+
return;
|
|
58
|
+
offset += result.results.length;
|
|
59
|
+
pageNumber += 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
if (cursorMode && cursorToRelease)
|
|
64
|
+
await releaseQueryCursor(cursorToRelease);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function nonNegativeInteger(value, fallback) {
|
|
68
|
+
return typeof value === "number" && Number.isFinite(value)
|
|
69
|
+
? Math.max(0, Math.floor(value))
|
|
70
|
+
: fallback;
|
|
71
|
+
}
|
|
72
|
+
function positiveInteger(value, fallback) {
|
|
73
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
74
|
+
? Math.floor(value)
|
|
75
|
+
: fallback;
|
|
76
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdbase-dev/connect",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.75",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"README.md"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@mdbase-dev/connect-protocol": "0.1.0-beta.
|
|
36
|
+
"@mdbase-dev/connect-protocol": "0.1.0-beta.75"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"esbuild": "^0.28.1",
|