@sunfall/arc-db 0.1.0-alpha.0
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/LICENSE +21 -0
- package/dist/change-feed-dispatcher.d.ts +21 -0
- package/dist/change-feed-dispatcher.d.ts.map +1 -0
- package/dist/change-feed-dispatcher.js +53 -0
- package/dist/change-feed-dispatcher.js.map +1 -0
- package/dist/collection-change-feed-runtime.d.ts +32 -0
- package/dist/collection-change-feed-runtime.d.ts.map +1 -0
- package/dist/collection-change-feed-runtime.js +50 -0
- package/dist/collection-change-feed-runtime.js.map +1 -0
- package/dist/collection-contract.d.ts +525 -0
- package/dist/collection-contract.d.ts.map +1 -0
- package/dist/collection-contract.js +4 -0
- package/dist/collection-contract.js.map +1 -0
- package/dist/collection-definition-snapshot.d.ts +64 -0
- package/dist/collection-definition-snapshot.d.ts.map +1 -0
- package/dist/collection-definition-snapshot.js +122 -0
- package/dist/collection-definition-snapshot.js.map +1 -0
- package/dist/collection-errors.d.ts +38 -0
- package/dist/collection-errors.d.ts.map +1 -0
- package/dist/collection-errors.js +17 -0
- package/dist/collection-errors.js.map +1 -0
- package/dist/collection-ids.d.ts +6 -0
- package/dist/collection-ids.d.ts.map +1 -0
- package/dist/collection-ids.js +6 -0
- package/dist/collection-ids.js.map +1 -0
- package/dist/collection-index-materialization.d.ts +29 -0
- package/dist/collection-index-materialization.d.ts.map +1 -0
- package/dist/collection-index-materialization.js +118 -0
- package/dist/collection-index-materialization.js.map +1 -0
- package/dist/collection-mutation-queue.d.ts +10 -0
- package/dist/collection-mutation-queue.d.ts.map +1 -0
- package/dist/collection-mutation-queue.js +46 -0
- package/dist/collection-mutation-queue.js.map +1 -0
- package/dist/collection-mutation-workflow.d.ts +18 -0
- package/dist/collection-mutation-workflow.d.ts.map +1 -0
- package/dist/collection-mutation-workflow.js +252 -0
- package/dist/collection-mutation-workflow.js.map +1 -0
- package/dist/collection-persistence.d.ts +48 -0
- package/dist/collection-persistence.d.ts.map +1 -0
- package/dist/collection-persistence.js +323 -0
- package/dist/collection-persistence.js.map +1 -0
- package/dist/collection-policy.d.ts +5 -0
- package/dist/collection-policy.d.ts.map +1 -0
- package/dist/collection-policy.js +7 -0
- package/dist/collection-policy.js.map +1 -0
- package/dist/collection-preload.d.ts +21 -0
- package/dist/collection-preload.d.ts.map +1 -0
- package/dist/collection-preload.js +4 -0
- package/dist/collection-preload.js.map +1 -0
- package/dist/collection-projection-callback-policy.d.ts +14 -0
- package/dist/collection-projection-callback-policy.d.ts.map +1 -0
- package/dist/collection-projection-callback-policy.js +25 -0
- package/dist/collection-projection-callback-policy.js.map +1 -0
- package/dist/collection-reactive-binding.d.ts +72 -0
- package/dist/collection-reactive-binding.d.ts.map +1 -0
- package/dist/collection-reactive-binding.js +95 -0
- package/dist/collection-reactive-binding.js.map +1 -0
- package/dist/collection-registry.d.ts +56 -0
- package/dist/collection-registry.d.ts.map +1 -0
- package/dist/collection-registry.js +123 -0
- package/dist/collection-registry.js.map +1 -0
- package/dist/collection-row-ingress.d.ts +16 -0
- package/dist/collection-row-ingress.d.ts.map +1 -0
- package/dist/collection-row-ingress.js +110 -0
- package/dist/collection-row-ingress.js.map +1 -0
- package/dist/collection-runtime.d.ts +20 -0
- package/dist/collection-runtime.d.ts.map +1 -0
- package/dist/collection-runtime.js +256 -0
- package/dist/collection-runtime.js.map +1 -0
- package/dist/collection-snapshot-codec.d.ts +62 -0
- package/dist/collection-snapshot-codec.d.ts.map +1 -0
- package/dist/collection-snapshot-codec.js +563 -0
- package/dist/collection-snapshot-codec.js.map +1 -0
- package/dist/collection-state.d.ts +72 -0
- package/dist/collection-state.d.ts.map +1 -0
- package/dist/collection-state.js +276 -0
- package/dist/collection-state.js.map +1 -0
- package/dist/collection-sync-load-policy.d.ts +17 -0
- package/dist/collection-sync-load-policy.d.ts.map +1 -0
- package/dist/collection-sync-load-policy.js +245 -0
- package/dist/collection-sync-load-policy.js.map +1 -0
- package/dist/collection-value-detachment.d.ts +34 -0
- package/dist/collection-value-detachment.d.ts.map +1 -0
- package/dist/collection-value-detachment.js +248 -0
- package/dist/collection-value-detachment.js.map +1 -0
- package/dist/collection-write-commit.d.ts +32 -0
- package/dist/collection-write-commit.d.ts.map +1 -0
- package/dist/collection-write-commit.js +51 -0
- package/dist/collection-write-commit.js.map +1 -0
- package/dist/flush-policy.d.ts +130 -0
- package/dist/flush-policy.d.ts.map +1 -0
- package/dist/flush-policy.js +96 -0
- package/dist/flush-policy.js.map +1 -0
- package/dist/index.d.ts +481 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +251 -0
- package/dist/index.js.map +1 -0
- package/dist/live-query-collection-materialization.d.ts +47 -0
- package/dist/live-query-collection-materialization.d.ts.map +1 -0
- package/dist/live-query-collection-materialization.js +231 -0
- package/dist/live-query-collection-materialization.js.map +1 -0
- package/dist/live-query-collection.d.ts +23 -0
- package/dist/live-query-collection.d.ts.map +1 -0
- package/dist/live-query-collection.js +94 -0
- package/dist/live-query-collection.js.map +1 -0
- package/dist/live-query-runtime.d.ts +8 -0
- package/dist/live-query-runtime.d.ts.map +1 -0
- package/dist/live-query-runtime.js +228 -0
- package/dist/live-query-runtime.js.map +1 -0
- package/dist/live-query-state.d.ts +11 -0
- package/dist/live-query-state.d.ts.map +1 -0
- package/dist/live-query-state.js +130 -0
- package/dist/live-query-state.js.map +1 -0
- package/dist/query-builder.d.ts +294 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +373 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/query-context-identity.d.ts +19 -0
- package/dist/query-context-identity.d.ts.map +1 -0
- package/dist/query-context-identity.js +41 -0
- package/dist/query-context-identity.js.map +1 -0
- package/dist/query-execution-plan.d.ts +27 -0
- package/dist/query-execution-plan.d.ts.map +1 -0
- package/dist/query-execution-plan.js +69 -0
- package/dist/query-execution-plan.js.map +1 -0
- package/dist/query-plan.d.ts +200 -0
- package/dist/query-plan.d.ts.map +1 -0
- package/dist/query-plan.js +524 -0
- package/dist/query-plan.js.map +1 -0
- package/dist/query-source-adapter.d.ts +25 -0
- package/dist/query-source-adapter.d.ts.map +1 -0
- package/dist/query-source-adapter.js +14 -0
- package/dist/query-source-adapter.js.map +1 -0
- package/dist/runtime-collection-store.d.ts +38 -0
- package/dist/runtime-collection-store.d.ts.map +1 -0
- package/dist/runtime-collection-store.js +149 -0
- package/dist/runtime-collection-store.js.map +1 -0
- package/dist/server-collection.d.ts +84 -0
- package/dist/server-collection.d.ts.map +1 -0
- package/dist/server-collection.js +84 -0
- package/dist/server-collection.js.map +1 -0
- package/dist/sqlite-persistence.d.ts +239 -0
- package/dist/sqlite-persistence.d.ts.map +1 -0
- package/dist/sqlite-persistence.js +345 -0
- package/dist/sqlite-persistence.js.map +1 -0
- package/dist/sync-adapter.d.ts +233 -0
- package/dist/sync-adapter.d.ts.map +1 -0
- package/dist/sync-adapter.js +226 -0
- package/dist/sync-adapter.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
import { type EffectInputCallbackError, type EffectInput, type ReadableSignal } from "@sunfall/arc-core";
|
|
2
|
+
import { Effect, type PubSub, type Scope, type Schedule } from "effect";
|
|
3
|
+
import { CollectionStoreTypeId, CollectionTypeId } from "./collection-ids.js";
|
|
4
|
+
import type { CollectionRowKeyChanged, CollectionRowNotFound } from "./collection-errors.js";
|
|
5
|
+
import type { CollectionSnapshotCodecError } from "./collection-snapshot-codec.js";
|
|
6
|
+
/** Stable row identity accepted by Collection definitions and snapshots. */
|
|
7
|
+
export type CollectionKey = string | number;
|
|
8
|
+
/** Source of the latest row value visible in the in-memory Collection Store. */
|
|
9
|
+
export type CollectionOrigin = "local" | "remote";
|
|
10
|
+
/**
|
|
11
|
+
* A collection value as exposed to readers.
|
|
12
|
+
*
|
|
13
|
+
* Metadata fields identify the stable key, owning collection, sync status, and
|
|
14
|
+
* whether the latest value came from a local write or a remote source.
|
|
15
|
+
*/
|
|
16
|
+
export type CollectionRow<A extends object, K extends CollectionKey = CollectionKey> = A & {
|
|
17
|
+
readonly $key: K;
|
|
18
|
+
readonly $collection: string;
|
|
19
|
+
readonly $synced: boolean;
|
|
20
|
+
readonly $origin: CollectionOrigin;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Reactive load state for a collection preload/refetch.
|
|
24
|
+
*
|
|
25
|
+
* Failure carries the collection error type `E`; local writes can still keep
|
|
26
|
+
* rows available while a later load is pending or failed.
|
|
27
|
+
*/
|
|
28
|
+
export type CollectionLoadState<E = never> = {
|
|
29
|
+
readonly _tag: "Initial";
|
|
30
|
+
readonly waiting: false;
|
|
31
|
+
} | {
|
|
32
|
+
readonly _tag: "Pending";
|
|
33
|
+
readonly waiting: true;
|
|
34
|
+
} | {
|
|
35
|
+
readonly _tag: "Ready";
|
|
36
|
+
readonly waiting: false;
|
|
37
|
+
readonly updatedAt: number;
|
|
38
|
+
} | {
|
|
39
|
+
readonly _tag: "Failure";
|
|
40
|
+
readonly waiting: false;
|
|
41
|
+
readonly error: E;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Failure channel for collection runtime reads and loads.
|
|
45
|
+
*
|
|
46
|
+
* `E` comes from the collection loader or mutation handlers. Snapshot codec
|
|
47
|
+
* errors cover malformed persisted/hydrated rows and output-schema validation
|
|
48
|
+
* failures, while EffectInput callback errors report synchronous throws before a
|
|
49
|
+
* loader, handler, adapter, or persistence callback can return a value or
|
|
50
|
+
* Effect.
|
|
51
|
+
*/
|
|
52
|
+
export type CollectionRuntimeError<E = never> = E | CollectionSnapshotCodecError | EffectInputCallbackError;
|
|
53
|
+
/** A single optimistic mutation captured inside a transaction. */
|
|
54
|
+
export type CollectionMutation<A extends object, K extends CollectionKey> = {
|
|
55
|
+
readonly _tag: "Insert";
|
|
56
|
+
readonly key: K;
|
|
57
|
+
readonly value: A;
|
|
58
|
+
readonly previous?: A;
|
|
59
|
+
} | {
|
|
60
|
+
readonly _tag: "Update";
|
|
61
|
+
readonly key: K;
|
|
62
|
+
readonly previous: A;
|
|
63
|
+
readonly value: A;
|
|
64
|
+
readonly changes: Partial<A>;
|
|
65
|
+
} | {
|
|
66
|
+
readonly _tag: "Delete";
|
|
67
|
+
readonly key: K;
|
|
68
|
+
readonly previous: A;
|
|
69
|
+
};
|
|
70
|
+
/** A batch of local collection mutations sent to mutation handlers as one unit. */
|
|
71
|
+
export interface CollectionTransaction<A extends object, K extends CollectionKey> {
|
|
72
|
+
readonly id: string;
|
|
73
|
+
readonly collection: string;
|
|
74
|
+
readonly mutations: ReadonlyArray<CollectionMutation<A, K>>;
|
|
75
|
+
}
|
|
76
|
+
/** Row snapshot saved before an optimistic mutation so rollback can restore state. */
|
|
77
|
+
export interface CollectionRollbackRow<A extends object, K extends CollectionKey> {
|
|
78
|
+
readonly key: K;
|
|
79
|
+
readonly row?: CollectionRowSnapshot<A, K>;
|
|
80
|
+
}
|
|
81
|
+
/** Queued optimistic transaction waiting for its mutation handler to commit. */
|
|
82
|
+
export interface CollectionPendingMutation<A extends object, K extends CollectionKey> {
|
|
83
|
+
readonly transaction: CollectionTransaction<A, K>;
|
|
84
|
+
readonly rollbackRows: ReadonlyArray<CollectionRollbackRow<A, K>>;
|
|
85
|
+
readonly createdAt: number;
|
|
86
|
+
readonly attempts: number;
|
|
87
|
+
}
|
|
88
|
+
/** Context passed to collection mutation handlers. */
|
|
89
|
+
export interface CollectionMutationContext<A extends object, K extends CollectionKey> {
|
|
90
|
+
readonly transaction: CollectionTransaction<A, K>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Collection execution policy.
|
|
94
|
+
*
|
|
95
|
+
* The retry schedule wraps loads and queued mutation handlers, preserving their
|
|
96
|
+
* original Effect error and requirement channels.
|
|
97
|
+
*/
|
|
98
|
+
export interface CollectionPolicy<E = never> {
|
|
99
|
+
readonly retry?: Schedule.Schedule<unknown, E>;
|
|
100
|
+
}
|
|
101
|
+
/** Diagnostic label for the sync adapter currently backing a collection. */
|
|
102
|
+
export interface CollectionSyncDiagnostics {
|
|
103
|
+
readonly adapter: string;
|
|
104
|
+
}
|
|
105
|
+
/** Value that can be normalized into a stable secondary-index bucket key; Dates must be valid. */
|
|
106
|
+
export type CollectionIndexValue = string | number | boolean | Date | null | undefined;
|
|
107
|
+
/** One or more bucket keys emitted for a row by a secondary index. */
|
|
108
|
+
export type CollectionIndexResult = CollectionIndexValue | ReadonlyArray<CollectionIndexValue>;
|
|
109
|
+
/**
|
|
110
|
+
* Secondary index definition used by `collection.index` and indexed joins.
|
|
111
|
+
*
|
|
112
|
+
* Return one valid scalar value for a one-to-one lookup, or several valid
|
|
113
|
+
* scalar values when a row should appear in multiple buckets. Invalid Dates
|
|
114
|
+
* fail as `EffectInputCallbackError`. `unique` is diagnostic metadata only.
|
|
115
|
+
*/
|
|
116
|
+
export interface CollectionIndexDefinition<A extends object> {
|
|
117
|
+
readonly key: (value: A) => CollectionIndexResult;
|
|
118
|
+
readonly unique?: boolean;
|
|
119
|
+
}
|
|
120
|
+
/** Shorthand accepted by Collection options for secondary index declarations. */
|
|
121
|
+
export type CollectionIndexInput<A extends object> = ((value: A) => CollectionIndexResult) | CollectionIndexDefinition<A>;
|
|
122
|
+
/** Named secondary index map attached to a Collection definition. */
|
|
123
|
+
export type CollectionIndexRecord<A extends object> = Record<string, CollectionIndexInput<A>>;
|
|
124
|
+
/**
|
|
125
|
+
* Defines a local-first collection.
|
|
126
|
+
*
|
|
127
|
+
* `load` fills rows on first preload. `refetch` forces a fresh remote read
|
|
128
|
+
* when available; otherwise refetch falls back to `load`. `onInsert`,
|
|
129
|
+
* `onUpdate`, and `onDelete` run after optimistic local changes. Handler
|
|
130
|
+
* failures use the Effect error channel `E` and roll back affected rows;
|
|
131
|
+
* required services are carried in `R`.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* const todos = Collection.define({
|
|
136
|
+
* name: "todos",
|
|
137
|
+
* getKey: (todo) => todo.id,
|
|
138
|
+
* load: () => Effect.tryPromise(() => TodoApi.list()),
|
|
139
|
+
* onUpdate: (updates) => Effect.tryPromise(() => TodoApi.patchMany(updates))
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export interface CollectionOptions<A extends object, K extends CollectionKey, E = never, R = never> {
|
|
144
|
+
/** Stable collection identity used by stores, snapshots, persistence, and devtools. */
|
|
145
|
+
readonly name: string;
|
|
146
|
+
/** Optional schema for mutation input values. */
|
|
147
|
+
readonly input?: unknown;
|
|
148
|
+
/** Optional schema for loaded and written row values. */
|
|
149
|
+
readonly output?: unknown;
|
|
150
|
+
/** Load, mutation, and retry policy for this collection. */
|
|
151
|
+
readonly policy?: CollectionPolicy<E>;
|
|
152
|
+
/** Persistence storage and restore settings for this collection. */
|
|
153
|
+
readonly persistence?: CollectionPersistenceConfig<E, R>;
|
|
154
|
+
/** Background sync diagnostics metadata exposed to tooling. */
|
|
155
|
+
readonly sync?: CollectionSyncDiagnostics;
|
|
156
|
+
/** Secondary index definitions used by `index`, `firstByIndex`, and indexed joins. */
|
|
157
|
+
readonly indexes?: CollectionIndexRecord<A>;
|
|
158
|
+
/** Stable key extractor for one row. Keys must be deterministic across loads and snapshots. */
|
|
159
|
+
readonly getKey: (value: A) => K;
|
|
160
|
+
/** Rows available before the first load runs. */
|
|
161
|
+
readonly initialData?: ReadonlyArray<A>;
|
|
162
|
+
/** Initial loader. Runs once for `preloadEffect` unless a refetch is forced. */
|
|
163
|
+
readonly load?: () => EffectInput<ReadonlyArray<A>, E, R>;
|
|
164
|
+
/** Fresh loader used by `refetchEffect`; falls back to `load` when omitted. */
|
|
165
|
+
readonly refetch?: () => EffectInput<ReadonlyArray<A>, E, R>;
|
|
166
|
+
/** Commits optimistic inserts to the backing service. */
|
|
167
|
+
readonly onInsert?: (input: ReadonlyArray<A>, context: CollectionMutationContext<A, K>) => EffectInput<void, E, R>;
|
|
168
|
+
/** Commits optimistic updates to the backing service. */
|
|
169
|
+
readonly onUpdate?: (input: ReadonlyArray<{
|
|
170
|
+
readonly key: K;
|
|
171
|
+
readonly value: A;
|
|
172
|
+
readonly previous: A;
|
|
173
|
+
readonly changes: Partial<A>;
|
|
174
|
+
}>, context: CollectionMutationContext<A, K>) => EffectInput<void, E, R>;
|
|
175
|
+
/** Commits optimistic deletes to the backing service. */
|
|
176
|
+
readonly onDelete?: (input: ReadonlyArray<{
|
|
177
|
+
readonly key: K;
|
|
178
|
+
readonly previous: A;
|
|
179
|
+
}>, context: CollectionMutationContext<A, K>) => EffectInput<void, E, R>;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Runtime handle returned by `Collection.define`.
|
|
183
|
+
*
|
|
184
|
+
* Read methods are synchronous and reactive through `state`/`version` signals.
|
|
185
|
+
* Load and mutation Effects expose the collection error channel `E` and
|
|
186
|
+
* requirements `R`; fire-and-forget write helpers fork the corresponding Effect
|
|
187
|
+
* on the current runtime.
|
|
188
|
+
*/
|
|
189
|
+
export interface CollectionDefinition<A extends object, K extends CollectionKey = string, E = never, R = never> {
|
|
190
|
+
readonly [CollectionTypeId]: typeof CollectionTypeId;
|
|
191
|
+
readonly options: CollectionOptions<A, K, E, R>;
|
|
192
|
+
readonly name: string;
|
|
193
|
+
/** True for derived definitions that must reject direct writes and change-feed application. */
|
|
194
|
+
readonly readOnly?: boolean;
|
|
195
|
+
getKey(value: A): K;
|
|
196
|
+
/** Reactive load state signal for the collection. */
|
|
197
|
+
state(): ReadableSignal<CollectionLoadState<CollectionRuntimeError<E>>>;
|
|
198
|
+
/** Reactive version signal that changes when rows or pending mutations change. */
|
|
199
|
+
version(): ReadableSignal<number>;
|
|
200
|
+
/** Read one row by key from the current in-memory state. */
|
|
201
|
+
get(key: K): CollectionRow<A, K> | undefined;
|
|
202
|
+
/** Read all current rows, including local optimistic rows. */
|
|
203
|
+
rows(): ReadonlyArray<CollectionRow<A, K>>;
|
|
204
|
+
/** Read rows from a named secondary index bucket. */
|
|
205
|
+
index(index: string, value: CollectionIndexValue): ReadonlyArray<CollectionRow<A, K>>;
|
|
206
|
+
/** Read the first row from a named secondary index bucket. */
|
|
207
|
+
firstByIndex(index: string, value: CollectionIndexValue): CollectionRow<A, K> | undefined;
|
|
208
|
+
/** Ensure the collection has loaded once. */
|
|
209
|
+
preloadEffect(): Effect.Effect<void, CollectionRuntimeError<E>, R>;
|
|
210
|
+
/** Force a fresh load even when the collection is already ready. */
|
|
211
|
+
refetchEffect(): Effect.Effect<void, CollectionRuntimeError<E>, R>;
|
|
212
|
+
/** Return queued optimistic mutations waiting for their handlers to commit. */
|
|
213
|
+
pendingMutationsEffect(): Effect.Effect<ReadonlyArray<CollectionPendingMutation<A, K>>>;
|
|
214
|
+
/** Synchronously read queued optimistic mutations from the current runtime store. */
|
|
215
|
+
pendingMutations(): ReadonlyArray<CollectionPendingMutation<A, K>>;
|
|
216
|
+
/** Retry all queued mutation handlers for this collection. */
|
|
217
|
+
flushPendingMutationsEffect(): Effect.Effect<ReadonlyArray<CollectionTransaction<A, K>>, CollectionRuntimeError<E>, R>;
|
|
218
|
+
/** Capture a durable serializable snapshot with an Effect-provided timestamp. */
|
|
219
|
+
snapshotEffect(): Effect.Effect<CollectionSnapshot<A, K>, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
220
|
+
/** Synchronous inspection snapshot; durable workflows should use `snapshotEffect`. */
|
|
221
|
+
snapshot(): CollectionSnapshot<A, K>;
|
|
222
|
+
/** Restore rows and pending mutations from a snapshot. */
|
|
223
|
+
hydrateEffect(snapshot: CollectionSnapshot<A, K>, options?: CollectionHydrateOptions): Effect.Effect<void, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
224
|
+
/** Fork `hydrateEffect` on the current runtime. */
|
|
225
|
+
hydrate(snapshot: CollectionSnapshot<A, K>, options?: CollectionHydrateOptions): void;
|
|
226
|
+
/** Persist the current snapshot to an Effect-aware string storage backend. */
|
|
227
|
+
persistEffect<PE = never, PR = never>(storage: CollectionPersistenceStorage<PE, PR>, options?: CollectionPersistOptions): Effect.Effect<void, PE | CollectionSnapshotCodecError | EffectInputCallbackError, PR>;
|
|
228
|
+
/** Load a persisted snapshot from storage and hydrate it if present. */
|
|
229
|
+
restoreEffect<PE = never, PR = never>(storage: CollectionPersistenceStorage<PE, PR>, options?: CollectionPersistOptions & CollectionHydrateOptions): Effect.Effect<void, PE | CollectionSnapshotCodecError | EffectInputCallbackError, PR>;
|
|
230
|
+
/** Optimistically insert rows and run the insert handler. */
|
|
231
|
+
insertEffect(input: A | ReadonlyArray<A>): Effect.Effect<CollectionTransaction<A, K>, CollectionRuntimeError<E>, R>;
|
|
232
|
+
/** Optimistically update one row and run the update handler. */
|
|
233
|
+
updateEffect(key: K, update: CollectionUpdate<A>): Effect.Effect<CollectionTransaction<A, K>, CollectionRuntimeError<E> | CollectionRowNotFound | CollectionRowKeyChanged, R>;
|
|
234
|
+
/** Optimistically delete one row and run the delete handler. */
|
|
235
|
+
deleteEffect(key: K): Effect.Effect<CollectionTransaction<A, K>, CollectionRuntimeError<E> | CollectionRowNotFound, R>;
|
|
236
|
+
/** Write rows directly without queuing mutation handlers. */
|
|
237
|
+
writeInsertEffect(input: A | ReadonlyArray<A>, options?: CollectionWriteOptions): Effect.Effect<void, CollectionRuntimeError<E>, R>;
|
|
238
|
+
/** Fork `writeInsertEffect` on the current runtime. */
|
|
239
|
+
writeInsert(input: A | ReadonlyArray<A>, options?: CollectionWriteOptions): void;
|
|
240
|
+
/** Write a partial patch directly without queuing mutation handlers. */
|
|
241
|
+
writeUpdateEffect(key: K, changes: Partial<A>, options?: CollectionWriteOptions): Effect.Effect<void, CollectionRuntimeError<E> | CollectionRowNotFound | CollectionRowKeyChanged, R>;
|
|
242
|
+
/** Fork `writeUpdateEffect` on the current runtime. */
|
|
243
|
+
writeUpdate(key: K, changes: Partial<A>, options?: CollectionWriteOptions): void;
|
|
244
|
+
/** Delete a row directly without queuing mutation handlers. */
|
|
245
|
+
writeDeleteEffect(key: K): Effect.Effect<void, CollectionRuntimeError<E>, R>;
|
|
246
|
+
/** Fork `writeDeleteEffect` on the current runtime. */
|
|
247
|
+
writeDelete(key: K): void;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Erased Collection definition used by adapters over heterogeneous collection
|
|
251
|
+
* lists while preserving error and requirement channels where possible.
|
|
252
|
+
*/
|
|
253
|
+
export type AnyCollection<E = unknown, R = unknown> = Omit<CollectionDefinition<any, any, E, R>, "options"> & {
|
|
254
|
+
readonly options: Omit<CollectionOptions<any, any, E, R>, "policy" | "persistence"> & {
|
|
255
|
+
readonly policy?: {
|
|
256
|
+
readonly retry?: unknown;
|
|
257
|
+
};
|
|
258
|
+
readonly persistence?: CollectionPersistenceConfig<E, R>;
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
/** Extracts the domain value type from a Collection definition. */
|
|
262
|
+
export type CollectionValue<C> = C extends CollectionDefinition<infer A, infer _K, infer _E, infer _R> ? A : never;
|
|
263
|
+
/** Extracts the public row type, including `$key` metadata, from a Collection definition. */
|
|
264
|
+
export type CollectionRowValue<C> = C extends CollectionDefinition<infer A, infer K, infer _E, infer _R> ? CollectionRow<A, K> : never;
|
|
265
|
+
/** Extracts the declared loader/mutation error channel from a Collection definition. */
|
|
266
|
+
export type CollectionError<C> = C extends AnyCollection<infer E, infer _R> ? E : C extends CollectionDefinition<infer _A, infer _K, infer E, infer _R> ? E : never;
|
|
267
|
+
/** Extracts the declared service requirements from a Collection definition. */
|
|
268
|
+
export type CollectionRequirements<C> = C extends AnyCollection<infer _E, infer R> ? R : C extends CollectionDefinition<infer _A, infer _K, infer _E, infer R> ? R : never;
|
|
269
|
+
/**
|
|
270
|
+
* Update input for `updateEffect`.
|
|
271
|
+
*
|
|
272
|
+
* Pass a partial patch or mutate/return a shallow draft copy of the previous
|
|
273
|
+
* value.
|
|
274
|
+
*/
|
|
275
|
+
export type CollectionUpdate<A extends object> = Partial<A> | ((draft: A) => A | void);
|
|
276
|
+
/** Metadata for direct writes that bypass mutation handlers. */
|
|
277
|
+
export interface CollectionWriteOptions {
|
|
278
|
+
readonly origin?: CollectionOrigin;
|
|
279
|
+
readonly synced?: boolean;
|
|
280
|
+
}
|
|
281
|
+
/** Remote change-feed event applied through `Collection.applyChangesEffect`. */
|
|
282
|
+
export type CollectionChange<A extends object, K extends CollectionKey> = {
|
|
283
|
+
readonly _tag: "Upsert";
|
|
284
|
+
readonly value: A;
|
|
285
|
+
} | {
|
|
286
|
+
readonly _tag: "Delete";
|
|
287
|
+
readonly key: K;
|
|
288
|
+
};
|
|
289
|
+
/** Serializable row record used by Collection snapshots and hydration payloads. */
|
|
290
|
+
export interface CollectionRowSnapshot<A extends object, K extends CollectionKey> {
|
|
291
|
+
readonly key: K;
|
|
292
|
+
readonly value: A;
|
|
293
|
+
readonly synced: boolean;
|
|
294
|
+
readonly origin: CollectionOrigin;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Serializable collection state including rows and queued local mutations.
|
|
298
|
+
*
|
|
299
|
+
* Use this for SSR hydration, offline restore, or custom persistence. The value
|
|
300
|
+
* is plain JSON-compatible as long as row values and keys are.
|
|
301
|
+
*/
|
|
302
|
+
export interface CollectionSnapshot<A extends object = object, K extends CollectionKey = CollectionKey> {
|
|
303
|
+
readonly name: string;
|
|
304
|
+
readonly rows: ReadonlyArray<CollectionRowSnapshot<A, K>>;
|
|
305
|
+
readonly pendingMutations: ReadonlyArray<CollectionPendingMutation<A, K>>;
|
|
306
|
+
readonly updatedAt: number;
|
|
307
|
+
}
|
|
308
|
+
/** Multi-collection snapshot payload for route-level dehydration/hydration. */
|
|
309
|
+
export interface CollectionHydrationPayload {
|
|
310
|
+
readonly collections: ReadonlyArray<CollectionSnapshot<any, any>>;
|
|
311
|
+
}
|
|
312
|
+
/** Hydration behavior for snapshots and persisted payloads. */
|
|
313
|
+
export interface CollectionHydrateOptions {
|
|
314
|
+
readonly replace?: boolean;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Effect-aware string storage used by collection persistence.
|
|
318
|
+
*
|
|
319
|
+
* Implement this over `localStorage`, IndexedDB, SQLite, or any other durable
|
|
320
|
+
* store. Storage failures become the persistence error channel.
|
|
321
|
+
*/
|
|
322
|
+
export interface CollectionPersistenceStorage<E = never, R = never> {
|
|
323
|
+
readonly getItem: (key: string) => EffectInput<string | null, E, R>;
|
|
324
|
+
readonly setItem: (key: string, value: string) => EffectInput<void, E, R>;
|
|
325
|
+
readonly removeItem?: (key: string) => EffectInput<void, E, R>;
|
|
326
|
+
}
|
|
327
|
+
/** Shared key options for collection persistence, restore, and hydration. */
|
|
328
|
+
export interface CollectionPersistOptions {
|
|
329
|
+
readonly key?: string;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Persistence policy attached to a collection definition.
|
|
333
|
+
*
|
|
334
|
+
* Restore can run before preload, then optional load can reconcile remote data.
|
|
335
|
+
* Persist hooks default to enabled unless explicitly set to `false`.
|
|
336
|
+
*/
|
|
337
|
+
export interface CollectionPersistenceConfig<E = never, R = never> extends CollectionPersistOptions {
|
|
338
|
+
readonly storage: CollectionPersistenceStorage<E, R>;
|
|
339
|
+
readonly hydrate?: CollectionHydrateOptions | false;
|
|
340
|
+
readonly restoreOnPreload?: boolean;
|
|
341
|
+
readonly loadAfterRestore?: boolean;
|
|
342
|
+
readonly persistOnLoad?: boolean;
|
|
343
|
+
readonly persistOnMutation?: boolean;
|
|
344
|
+
readonly persistOnWrite?: boolean;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* `Collection.define` options with an attached persistence backend.
|
|
348
|
+
*
|
|
349
|
+
* `persistedCollectionOptions(...)` converts this shape into normal
|
|
350
|
+
* `CollectionOptions` while unioning collection handler `E`/`R` with
|
|
351
|
+
* persistence storage `PE`/`PR`.
|
|
352
|
+
*/
|
|
353
|
+
export type CollectionPersistedOptions<A extends object, K extends CollectionKey = string, E = never, R = never, PE = never, PR = never> = Omit<CollectionOptions<A, K, E, R>, "persistence"> & {
|
|
354
|
+
readonly persistence: CollectionPersistenceConfig<PE, PR>;
|
|
355
|
+
};
|
|
356
|
+
/** Synchronous storage shape adapted by `Collection.storage`. */
|
|
357
|
+
export interface CollectionStorageLike {
|
|
358
|
+
readonly getItem: (key: string) => string | null;
|
|
359
|
+
readonly setItem: (key: string, value: string) => void;
|
|
360
|
+
readonly removeItem?: (key: string) => void;
|
|
361
|
+
}
|
|
362
|
+
/** In-memory persistence storage for tests, demos, and ephemeral sessions. */
|
|
363
|
+
export interface CollectionMemoryStorage extends CollectionPersistenceStorage<never, never> {
|
|
364
|
+
readonly values: ReadonlyMap<string, string>;
|
|
365
|
+
clear(): void;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Static metadata extracted from a Collection Definition for manifests and
|
|
369
|
+
* diagnostics.
|
|
370
|
+
*
|
|
371
|
+
* Boolean fields report whether schemas, handlers, sync, persistence, or retry
|
|
372
|
+
* policy were declared; they do not represent runtime health.
|
|
373
|
+
*/
|
|
374
|
+
export interface CollectionDefinitionDiagnostics {
|
|
375
|
+
readonly name: string;
|
|
376
|
+
/**
|
|
377
|
+
* True for derived/live-query collections that reject direct writes and
|
|
378
|
+
* change-feed application. Concrete writable definitions report `false`.
|
|
379
|
+
*/
|
|
380
|
+
readonly readOnly: boolean;
|
|
381
|
+
readonly inputSchema: boolean;
|
|
382
|
+
readonly outputSchema: boolean;
|
|
383
|
+
readonly initialData: boolean;
|
|
384
|
+
readonly indexes: readonly {
|
|
385
|
+
readonly name: string;
|
|
386
|
+
readonly unique: boolean;
|
|
387
|
+
}[];
|
|
388
|
+
readonly load: boolean;
|
|
389
|
+
readonly handlers: {
|
|
390
|
+
readonly insert: boolean;
|
|
391
|
+
readonly update: boolean;
|
|
392
|
+
readonly delete: boolean;
|
|
393
|
+
};
|
|
394
|
+
readonly policy: {
|
|
395
|
+
readonly retry: boolean;
|
|
396
|
+
};
|
|
397
|
+
readonly sync?: CollectionSyncDiagnostics;
|
|
398
|
+
readonly persistence: {
|
|
399
|
+
readonly enabled: boolean;
|
|
400
|
+
readonly key?: string;
|
|
401
|
+
readonly hydrate: boolean;
|
|
402
|
+
readonly restoreOnPreload: boolean;
|
|
403
|
+
readonly loadAfterRestore: boolean;
|
|
404
|
+
readonly persistOnLoad: boolean;
|
|
405
|
+
readonly persistOnMutation: boolean;
|
|
406
|
+
readonly persistOnWrite: boolean;
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
/** Static diagnostic inventory for registered Collection definitions. */
|
|
410
|
+
export interface CollectionDiagnostics {
|
|
411
|
+
readonly collections: readonly CollectionDefinitionDiagnostics[];
|
|
412
|
+
}
|
|
413
|
+
/** Store-level collection lifecycle and mutation events used by devtools and tests. */
|
|
414
|
+
export type CollectionStoreEvent =
|
|
415
|
+
/** A load/refetch completed and replaced rows; `count` is the stored row count. */
|
|
416
|
+
{
|
|
417
|
+
readonly _tag: "CollectionLoaded";
|
|
418
|
+
readonly collection: string;
|
|
419
|
+
readonly count: number;
|
|
420
|
+
readonly updatedAt: number;
|
|
421
|
+
}
|
|
422
|
+
/** A load/refetch failed; `error` is the normalized collection runtime error payload. */
|
|
423
|
+
| {
|
|
424
|
+
readonly _tag: "CollectionLoadFailure";
|
|
425
|
+
readonly collection: string;
|
|
426
|
+
readonly error: unknown;
|
|
427
|
+
}
|
|
428
|
+
/** A snapshot was applied; `count` is the hydrated row count. */
|
|
429
|
+
| {
|
|
430
|
+
readonly _tag: "CollectionHydrated";
|
|
431
|
+
readonly collection: string;
|
|
432
|
+
readonly count: number;
|
|
433
|
+
readonly updatedAt: number;
|
|
434
|
+
}
|
|
435
|
+
/** A snapshot was persisted under `key`; `count` is the persisted row count. */
|
|
436
|
+
| {
|
|
437
|
+
readonly _tag: "CollectionPersisted";
|
|
438
|
+
readonly collection: string;
|
|
439
|
+
readonly key: string;
|
|
440
|
+
readonly count: number;
|
|
441
|
+
}
|
|
442
|
+
/** A snapshot was restored from `key`; `count` is the restored row count. */
|
|
443
|
+
| {
|
|
444
|
+
readonly _tag: "CollectionRestored";
|
|
445
|
+
readonly collection: string;
|
|
446
|
+
readonly key: string;
|
|
447
|
+
readonly count: number;
|
|
448
|
+
}
|
|
449
|
+
/** An optimistic transaction was queued; `pending` is queue length after enqueue. */
|
|
450
|
+
| {
|
|
451
|
+
readonly _tag: "CollectionMutationQueued";
|
|
452
|
+
readonly collection: string;
|
|
453
|
+
readonly transaction: string;
|
|
454
|
+
readonly mutations: number;
|
|
455
|
+
readonly pending: number;
|
|
456
|
+
}
|
|
457
|
+
/** A queued transaction started running its mutation handler. */
|
|
458
|
+
| {
|
|
459
|
+
readonly _tag: "CollectionMutateStarted";
|
|
460
|
+
readonly collection: string;
|
|
461
|
+
readonly transaction: string;
|
|
462
|
+
readonly mutations: number;
|
|
463
|
+
}
|
|
464
|
+
/** A transaction left the queue; `pending` is queue length after dequeue. */
|
|
465
|
+
| {
|
|
466
|
+
readonly _tag: "CollectionMutationDequeued";
|
|
467
|
+
readonly collection: string;
|
|
468
|
+
readonly transaction: string;
|
|
469
|
+
readonly pending: number;
|
|
470
|
+
}
|
|
471
|
+
/** A mutation handler committed successfully. */
|
|
472
|
+
| {
|
|
473
|
+
readonly _tag: "CollectionMutateCommitted";
|
|
474
|
+
readonly collection: string;
|
|
475
|
+
readonly transaction: string;
|
|
476
|
+
readonly mutations: number;
|
|
477
|
+
}
|
|
478
|
+
/** A mutation handler failed and optimistic changes were rolled back. */
|
|
479
|
+
| {
|
|
480
|
+
readonly _tag: "CollectionMutateRolledBack";
|
|
481
|
+
readonly collection: string;
|
|
482
|
+
readonly transaction: string;
|
|
483
|
+
readonly error: unknown;
|
|
484
|
+
}
|
|
485
|
+
/** An async change-feed emission failed after subscription setup. */
|
|
486
|
+
| {
|
|
487
|
+
readonly _tag: "CollectionChangeFeedFailure";
|
|
488
|
+
readonly collection: string;
|
|
489
|
+
readonly error: unknown;
|
|
490
|
+
}
|
|
491
|
+
/** Rows were written directly without queuing mutation handlers. */
|
|
492
|
+
| {
|
|
493
|
+
readonly _tag: "CollectionWritten";
|
|
494
|
+
readonly collection: string;
|
|
495
|
+
readonly mutations: number;
|
|
496
|
+
};
|
|
497
|
+
/** Stable Collection Store count snapshot that does not expose private row maps. */
|
|
498
|
+
export interface CollectionStoreDiagnosticsSnapshot {
|
|
499
|
+
readonly collectionCount: number;
|
|
500
|
+
readonly rowCount: number;
|
|
501
|
+
readonly pendingMutationCount: number;
|
|
502
|
+
readonly activeMutationCount: number;
|
|
503
|
+
readonly optimisticRowCount: number;
|
|
504
|
+
readonly loadingCount: number;
|
|
505
|
+
readonly failureCount: number;
|
|
506
|
+
}
|
|
507
|
+
/** Effect-first diagnostics seam for runtime-local collection store facts. */
|
|
508
|
+
export interface CollectionStoreDiagnostics {
|
|
509
|
+
snapshot(): CollectionStoreDiagnosticsSnapshot;
|
|
510
|
+
readonly snapshotEffect: Effect.Effect<CollectionStoreDiagnosticsSnapshot>;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Runtime-local Collection Store contract.
|
|
514
|
+
*
|
|
515
|
+
* Stores own collection rows, pending mutation queues, lifecycle events, and
|
|
516
|
+
* diagnostics for one Sunfall Arc Runtime Spine or request scope. External code
|
|
517
|
+
* should read this through `Collection.storeEffect()` or
|
|
518
|
+
* `Collection.currentStore()` instead of constructing stores directly.
|
|
519
|
+
*/
|
|
520
|
+
export interface CollectionStore {
|
|
521
|
+
readonly [CollectionStoreTypeId]: typeof CollectionStoreTypeId;
|
|
522
|
+
readonly diagnostics: CollectionStoreDiagnostics;
|
|
523
|
+
subscribeEventsEffect(): Effect.Effect<PubSub.Subscription<CollectionStoreEvent>, never, Scope.Scope>;
|
|
524
|
+
}
|
|
525
|
+
//# sourceMappingURL=collection-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-contract.d.ts","sourceRoot":"","sources":["../src/collection-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-contract.js","sourceRoot":"","sources":["../src/collection-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAA0C,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { EffectInputCallbackError } from "@sunfall/arc-core";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { CollectionDefinitionSnapshotTypeId } from "./collection-ids.js";
|
|
4
|
+
import type { AnyCollection, CollectionDefinition, CollectionHydrateOptions, CollectionKey, CollectionSnapshot, CollectionStoreEvent } from "./collection-contract.js";
|
|
5
|
+
import { CollectionSnapshotCodecError } from "./collection-snapshot-codec.js";
|
|
6
|
+
import type { CollectionState } from "./collection-state.js";
|
|
7
|
+
/**
|
|
8
|
+
* Store operations needed by persistence and store-explicit snapshot adapters.
|
|
9
|
+
*
|
|
10
|
+
* Implementations are runtime/request-local so dehydration, persistence, and
|
|
11
|
+
* derived live-query collections never read another runtime's collection rows.
|
|
12
|
+
*/
|
|
13
|
+
export interface CollectionPersistenceStore {
|
|
14
|
+
state(definition: AnyCollection): CollectionState<any, any, any>;
|
|
15
|
+
state<A extends object, K extends CollectionKey, E, R>(definition: CollectionDefinition<A, K, E, R>): CollectionState<A, K, E>;
|
|
16
|
+
publish(event: CollectionStoreEvent): Effect.Effect<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Collection Definition extension for snapshots that must use a supplied store.
|
|
20
|
+
*
|
|
21
|
+
* A marked definition must provide all store-explicit methods. Missing implementations
|
|
22
|
+
* fail with `CollectionSnapshotCodecError` instead of falling back to the
|
|
23
|
+
* ambient store.
|
|
24
|
+
*/
|
|
25
|
+
export interface StoreExplicitCollectionSnapshotDefinition<A extends object = object, K extends CollectionKey = CollectionKey> {
|
|
26
|
+
readonly [CollectionDefinitionSnapshotTypeId]: typeof CollectionDefinitionSnapshotTypeId;
|
|
27
|
+
readonly snapshotWithStore: (store: CollectionPersistenceStore, updatedAt: number) => CollectionSnapshot<A, K>;
|
|
28
|
+
readonly snapshotWithStoreEffect: (store: CollectionPersistenceStore, updatedAt: number) => Effect.Effect<CollectionSnapshot<A, K>, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
29
|
+
readonly hydratePreflightEffect: (snapshot: CollectionSnapshot<A, K>, options: CollectionHydrateOptions) => Effect.Effect<void, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
30
|
+
readonly hydrateWithStoreEffect: (store: CollectionPersistenceStore, snapshot: CollectionSnapshot<A, K>, options: CollectionHydrateOptions) => Effect.Effect<void, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
31
|
+
readonly durableSnapshotSources?: () => ReadonlyArray<AnyCollection>;
|
|
32
|
+
}
|
|
33
|
+
/** Implementation fields required before the non-enumerable marker is applied. */
|
|
34
|
+
export type StoreExplicitCollectionSnapshotImplementation<A extends object = object, K extends CollectionKey = CollectionKey> = Omit<StoreExplicitCollectionSnapshotDefinition<A, K>, typeof CollectionDefinitionSnapshotTypeId>;
|
|
35
|
+
/** Marks a Collection Definition as requiring store-explicit snapshot dispatch. */
|
|
36
|
+
export declare function markStoreExplicitCollectionSnapshotDefinition<Definition extends object>(definition: Definition): asserts definition is Definition & {
|
|
37
|
+
readonly [CollectionDefinitionSnapshotTypeId]: typeof CollectionDefinitionSnapshotTypeId;
|
|
38
|
+
};
|
|
39
|
+
/** Checks only for the marker; callers should still validate implementation fields. */
|
|
40
|
+
export declare const hasStoreExplicitCollectionSnapshotMarker: (definition: AnyCollection) => boolean;
|
|
41
|
+
/** Checks that a marked Collection Definition has the full store-explicit Interface. */
|
|
42
|
+
export declare const isStoreExplicitCollectionSnapshotDefinition: (definition: AnyCollection) => definition is AnyCollection & StoreExplicitCollectionSnapshotDefinition;
|
|
43
|
+
/** Runs the synchronous store-explicit snapshot implementation. */
|
|
44
|
+
export declare const snapshotStoreExplicitCollection: (definition: AnyCollection, store: CollectionPersistenceStore, updatedAt: number) => CollectionSnapshot<any, any>;
|
|
45
|
+
/** Runs the Effect-backed store-explicit snapshot implementation. */
|
|
46
|
+
export declare const snapshotStoreExplicitCollectionEffect: (definition: AnyCollection, store: CollectionPersistenceStore, updatedAt: number) => Effect.Effect<CollectionSnapshot<any, any>, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
47
|
+
/** Runs hydrate preflight for a store-explicit snapshot definition. */
|
|
48
|
+
export declare const hydrateStoreExplicitCollectionSnapshotPreflightEffect: (definition: AnyCollection, snapshot: CollectionSnapshot<any, any>, options: CollectionHydrateOptions) => Effect.Effect<void, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
49
|
+
/** Runs hydrate application for a store-explicit snapshot definition. */
|
|
50
|
+
export declare const hydrateStoreExplicitCollectionSnapshotEffect: (definition: AnyCollection, store: CollectionPersistenceStore, snapshot: CollectionSnapshot<any, any>, options: CollectionHydrateOptions) => Effect.Effect<void, CollectionSnapshotCodecError | EffectInputCallbackError>;
|
|
51
|
+
export declare const collectionDurableSnapshotSources: (definition: AnyCollection) => ReadonlyArray<AnyCollection>;
|
|
52
|
+
/**
|
|
53
|
+
* Plans the concrete writable sources whose durable commit permits protect a
|
|
54
|
+
* snapshot payload.
|
|
55
|
+
*
|
|
56
|
+
* Store-explicit definitions such as live-query collections can expand to
|
|
57
|
+
* transitive source collections. The returned sources are deduped by
|
|
58
|
+
* definition identity and sorted deterministically so unrelated callers cannot
|
|
59
|
+
* acquire the same permits in opposite order.
|
|
60
|
+
*/
|
|
61
|
+
export declare const collectionDurableSnapshotPermitSources: (definitions: Iterable<AnyCollection>) => ReadonlyArray<AnyCollection>;
|
|
62
|
+
/** Acquires all durable snapshot permits for a payload using the shared plan. */
|
|
63
|
+
export declare const withCollectionDurableSnapshotPermits: <A, E, R>(store: CollectionPersistenceStore, definitions: Iterable<AnyCollection>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
64
|
+
//# sourceMappingURL=collection-definition-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-definition-snapshot.d.ts","sourceRoot":"","sources":["../src/collection-definition-snapshot.ts"],"names":[],"mappings":"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"}
|