event-sourced-collection 0.0.11 → 0.0.13
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-event-sourced-db-D3vSW3QV.d.mts +121 -0
- package/dist/browser-event-sourced-db-D3vSW3QV.d.mts.map +1 -0
- package/dist/browser.d.mts +2 -118
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.mjs +1 -1
- package/dist/{create-event-sourced-db-handle-D23nsV5c.mjs → create-event-sourced-db-handle-BqV3vLjS.mjs} +44 -16
- package/dist/create-event-sourced-db-handle-BqV3vLjS.mjs.map +1 -0
- package/dist/create-event-sourced-db-handle-DmHdplVr.d.mts +105 -0
- package/dist/create-event-sourced-db-handle-DmHdplVr.d.mts.map +1 -0
- package/dist/index.d.mts +347 -3
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1 -1
- package/dist/node.d.mts +2 -2
- package/dist/node.d.mts.map +1 -1
- package/dist/node.mjs +1 -1
- package/dist/react-native.d.mts +2 -2
- package/dist/react-native.d.mts.map +1 -1
- package/dist/react-native.mjs +1 -1
- package/dist/react.d.mts +1 -1
- package/dist/{types-CbOMv5E8.d.mts → types-uO49i9Ae.d.mts} +15 -2
- package/dist/types-uO49i9Ae.d.mts.map +1 -0
- package/package.json +1 -1
- package/dist/create-event-sourced-db-handle-D23nsV5c.mjs.map +0 -1
- package/dist/index-BkKizlCB.d.mts +0 -446
- package/dist/index-BkKizlCB.d.mts.map +0 -1
- package/dist/types-CbOMv5E8.d.mts.map +0 -1
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
import { B as SyncPushLimits, F as ServerEvent, K as SyncUrlConfig, L as SyncLock, V as SyncPushPreset, W as SyncTransport, l as EventSourcedDB, u as EventSourcedDBConfig, v as MutationType, y as OutboundEvent } from "./types-CbOMv5E8.mjs";
|
|
2
|
-
import { Collection } from "@tanstack/db";
|
|
3
|
-
|
|
4
|
-
//#region src/core/create-event-sourced-db.d.ts
|
|
5
|
-
type CollectionDefConstraint$1 = {
|
|
6
|
-
getKey: (state: never) => string | number;
|
|
7
|
-
schemaVersion?: number;
|
|
8
|
-
indexes?: ReadonlyArray<{
|
|
9
|
-
select: (row: never) => unknown;
|
|
10
|
-
name?: string;
|
|
11
|
-
indexType?: new (id: number, expression: never, name?: string, options?: never) => unknown;
|
|
12
|
-
}>;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Low-level factory: wires persistence, collections, outbox/inbox, and sync.
|
|
16
|
-
* Prefer a platform helper (`createBrowserEventSourcedDB`,
|
|
17
|
-
* `createNodeEventSourcedDB`, `createReactNativeEventSourcedDB`) unless you are
|
|
18
|
-
* supplying your own persistence.
|
|
19
|
-
*
|
|
20
|
-
* @param config - See {@link EventSourcedDBConfig} for every option.
|
|
21
|
-
*
|
|
22
|
-
* @example Node SQLite, opened immediately
|
|
23
|
-
* ```ts
|
|
24
|
-
* import { createCollection } from "@tanstack/db"
|
|
25
|
-
* import {
|
|
26
|
-
* createNodeSQLitePersistence,
|
|
27
|
-
* persistedCollectionOptions,
|
|
28
|
-
* } from "@tanstack/node-db-sqlite-persistence"
|
|
29
|
-
* import Database from "better-sqlite3"
|
|
30
|
-
* import { createEventSourcedDB } from "event-sourced-collection"
|
|
31
|
-
*
|
|
32
|
-
* type Todo = { id: string; title: string }
|
|
33
|
-
*
|
|
34
|
-
* const sqlite = new Database("app.sqlite")
|
|
35
|
-
* const db = await createEventSourcedDB({
|
|
36
|
-
* persistence: createNodeSQLitePersistence({ database: sqlite }),
|
|
37
|
-
* createCollection,
|
|
38
|
-
* persistedCollectionOptions,
|
|
39
|
-
* collections: {
|
|
40
|
-
* todos: { getKey: (todo: Todo) => todo.id },
|
|
41
|
-
* },
|
|
42
|
-
* sync: {
|
|
43
|
-
* push: "/api/sync/events",
|
|
44
|
-
* pull: "/api/sync/events",
|
|
45
|
-
* },
|
|
46
|
-
* })
|
|
47
|
-
*
|
|
48
|
-
* await db.collections.todos.insert({ id: "t1", title: "Ship" }).isPersisted.promise
|
|
49
|
-
* await db.sync()
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
declare function createEventSourcedDB<const TDefs extends Record<string, CollectionDefConstraint$1>>(config: EventSourcedDBConfig<TDefs>): Promise<EventSourcedDB<TDefs>>;
|
|
53
|
-
//#endregion
|
|
54
|
-
//#region src/core/create-event-sourced-db-handle.d.ts
|
|
55
|
-
type CollectionDefConstraint = {
|
|
56
|
-
getKey: (state: never) => string | number;
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Lazy handle returned by platform helpers and {@link createEventSourcedDBHandle}.
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```ts
|
|
63
|
-
* import { createBrowserEventSourcedDB } from "event-sourced-collection/browser"
|
|
64
|
-
*
|
|
65
|
-
* const { ensureDb, db, close } = createBrowserEventSourcedDB({
|
|
66
|
-
* databaseName: "app.sqlite",
|
|
67
|
-
* collections: { todos: { getKey: (todo: { id: string }) => todo.id } },
|
|
68
|
-
* modules: async () => {
|
|
69
|
-
* const { createCollection } = await import("@tanstack/db")
|
|
70
|
-
* const persistence = await import("@tanstack/browser-db-sqlite-persistence")
|
|
71
|
-
* return { createCollection, ...persistence }
|
|
72
|
-
* },
|
|
73
|
-
* })
|
|
74
|
-
*
|
|
75
|
-
* await ensureDb()
|
|
76
|
-
* await db.collections.todos.insert({ id: "t1" }).isPersisted.promise
|
|
77
|
-
* await close()
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
type EventSourcedDBHandle<TDefs extends Record<string, CollectionDefConstraint>> = {
|
|
81
|
-
/** Opens (or returns) the singleton DB. Call once at app startup before using `db`. */ensureDb: () => Promise<EventSourcedDB<TDefs>>;
|
|
82
|
-
/**
|
|
83
|
-
* Proxy that forwards to the live DB after `ensureDb()` resolves. Accessing a
|
|
84
|
-
* property before initialization throws.
|
|
85
|
-
*/
|
|
86
|
-
db: EventSourcedDB<TDefs>; /** Disposes the DB, runs platform cleanup, and resets the singleton. */
|
|
87
|
-
close: () => Promise<void>;
|
|
88
|
-
};
|
|
89
|
-
type EventSourcedDBHandleSetup<TDefs extends Record<string, CollectionDefConstraint>> = EventSourcedDBConfig<TDefs> & {
|
|
90
|
-
/** Optional platform teardown (close SQLite, dispose coordinators). */close?: () => Promise<void> | void;
|
|
91
|
-
};
|
|
92
|
-
/**
|
|
93
|
-
* Lazy singleton around {@link createEventSourcedDB}. Platform helpers use this
|
|
94
|
-
* after they have turned TanStack persistence modules into `persistence`.
|
|
95
|
-
* Call this yourself only when you need a custom open/close path.
|
|
96
|
-
*
|
|
97
|
-
* @example Custom persistence, still lazy like the platform helpers
|
|
98
|
-
* ```ts
|
|
99
|
-
* import { createCollection } from "@tanstack/db"
|
|
100
|
-
* import {
|
|
101
|
-
* createNodeSQLitePersistence,
|
|
102
|
-
* persistedCollectionOptions,
|
|
103
|
-
* } from "@tanstack/node-db-sqlite-persistence"
|
|
104
|
-
* import Database from "better-sqlite3"
|
|
105
|
-
* import { createEventSourcedDBHandle } from "event-sourced-collection"
|
|
106
|
-
*
|
|
107
|
-
* type Todo = { id: string; title: string }
|
|
108
|
-
*
|
|
109
|
-
* const { ensureDb, db, close } = createEventSourcedDBHandle({
|
|
110
|
-
* setup: async () => {
|
|
111
|
-
* const sqlite = new Database("app.sqlite")
|
|
112
|
-
* return {
|
|
113
|
-
* persistence: createNodeSQLitePersistence({ database: sqlite }),
|
|
114
|
-
* createCollection,
|
|
115
|
-
* persistedCollectionOptions,
|
|
116
|
-
* collections: { todos: { getKey: (todo: Todo) => todo.id } },
|
|
117
|
-
* close: () => sqlite.close(),
|
|
118
|
-
* }
|
|
119
|
-
* },
|
|
120
|
-
* })
|
|
121
|
-
*
|
|
122
|
-
* await ensureDb()
|
|
123
|
-
* console.log(db.collections.todos.size)
|
|
124
|
-
* await close()
|
|
125
|
-
* ```
|
|
126
|
-
*/
|
|
127
|
-
declare function createEventSourcedDBHandle<const TDefs extends Record<string, CollectionDefConstraint>>(options: {
|
|
128
|
-
setup: () => Promise<EventSourcedDBHandleSetup<TDefs>>;
|
|
129
|
-
guard?: () => void;
|
|
130
|
-
notInitializedMessage?: string;
|
|
131
|
-
}): EventSourcedDBHandle<TDefs>;
|
|
132
|
-
/** Bindings object, or a function that loads them on first `ensureDb()`. */
|
|
133
|
-
type ModulesInput<T> = T | (() => T | Promise<T>);
|
|
134
|
-
/**
|
|
135
|
-
* Resolves {@link ModulesInput}: returns the object, or awaits the loader.
|
|
136
|
-
*
|
|
137
|
-
* @example Keep WASM off the SSR bundle until the first `ensureDb()`
|
|
138
|
-
* ```ts
|
|
139
|
-
* import { resolveModules, type ModulesInput } from "event-sourced-collection"
|
|
140
|
-
*
|
|
141
|
-
* type BrowserModules = {
|
|
142
|
-
* createCollection: typeof import("@tanstack/db").createCollection
|
|
143
|
-
* }
|
|
144
|
-
*
|
|
145
|
-
* const modules: ModulesInput<BrowserModules> = async () => {
|
|
146
|
-
* const { createCollection } = await import("@tanstack/db")
|
|
147
|
-
* return { createCollection }
|
|
148
|
-
* }
|
|
149
|
-
*
|
|
150
|
-
* const resolved = await resolveModules(modules)
|
|
151
|
-
* ```
|
|
152
|
-
*/
|
|
153
|
-
declare function resolveModules<T>(modules: ModulesInput<T>): Promise<T>;
|
|
154
|
-
//#endregion
|
|
155
|
-
//#region src/core/lazy-singleton.d.ts
|
|
156
|
-
type LazySingletonOptions = {
|
|
157
|
-
/** Runs on every `ensure()` / proxy access (e.g. `typeof window` checks). */guard?: () => void; /** Thrown when `proxy` is used before `ensure()` resolves. */
|
|
158
|
-
notInitializedMessage?: string;
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* Result of {@link createLazySingleton}.
|
|
162
|
-
*
|
|
163
|
-
* @example
|
|
164
|
-
* ```ts
|
|
165
|
-
* import { createLazySingleton } from "event-sourced-collection"
|
|
166
|
-
*
|
|
167
|
-
* const { ensure, proxy, reset } = createLazySingleton(async () => ({ ready: true }))
|
|
168
|
-
* await ensure()
|
|
169
|
-
* console.log(proxy.ready) // true
|
|
170
|
-
* reset()
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
173
|
-
type LazySingleton<T extends object> = {
|
|
174
|
-
ensure: () => Promise<T>;
|
|
175
|
-
proxy: T;
|
|
176
|
-
reset: () => void;
|
|
177
|
-
};
|
|
178
|
-
/**
|
|
179
|
-
* One-shot async factory with a proxy that is safe to export as a module
|
|
180
|
-
* singleton. Platform DB helpers are built on this.
|
|
181
|
-
*
|
|
182
|
-
* @example Export a proxy, initialize at app startup
|
|
183
|
-
* ```ts
|
|
184
|
-
* import { createLazySingleton } from "event-sourced-collection"
|
|
185
|
-
*
|
|
186
|
-
* type Client = { ping: () => Promise<string> }
|
|
187
|
-
*
|
|
188
|
-
* const { ensure, proxy: client } = createLazySingleton<Client>(async () => ({
|
|
189
|
-
* ping: async () => "ok",
|
|
190
|
-
* }))
|
|
191
|
-
*
|
|
192
|
-
* export async function start() {
|
|
193
|
-
* await ensure()
|
|
194
|
-
* }
|
|
195
|
-
*
|
|
196
|
-
* export { client }
|
|
197
|
-
* // client.ping() throws until start() has run
|
|
198
|
-
* ```
|
|
199
|
-
*/
|
|
200
|
-
declare function createLazySingleton<T extends object>(factory: () => Promise<T>, options?: LazySingletonOptions): LazySingleton<T>;
|
|
201
|
-
//#endregion
|
|
202
|
-
//#region src/core/sync.d.ts
|
|
203
|
-
/**
|
|
204
|
-
* Builds a {@link SyncTransport} that POSTs outbound events and GETs
|
|
205
|
-
* `pull?since=N`. Pass this as `sync` when you already have REST endpoints.
|
|
206
|
-
*
|
|
207
|
-
* @example
|
|
208
|
-
* ```ts
|
|
209
|
-
* import { createHttpTransport } from "event-sourced-collection"
|
|
210
|
-
* import { createBrowserEventSourcedDB } from "event-sourced-collection/browser"
|
|
211
|
-
*
|
|
212
|
-
* const sync = createHttpTransport({
|
|
213
|
-
* push: "/api/sync/events",
|
|
214
|
-
* pull: "/api/sync/events",
|
|
215
|
-
* headers: () => ({ Authorization: `Bearer ${localStorage.getItem("token") ?? ""}` }),
|
|
216
|
-
* })
|
|
217
|
-
*
|
|
218
|
-
* const { ensureDb } = createBrowserEventSourcedDB({
|
|
219
|
-
* databaseName: "app.sqlite",
|
|
220
|
-
* collections: { todos: { getKey: (todo: { id: string }) => todo.id } },
|
|
221
|
-
* sync,
|
|
222
|
-
* modules: async () => {
|
|
223
|
-
* const { createCollection } = await import("@tanstack/db")
|
|
224
|
-
* const persistence = await import("@tanstack/browser-db-sqlite-persistence")
|
|
225
|
-
* return { createCollection, ...persistence }
|
|
226
|
-
* },
|
|
227
|
-
* })
|
|
228
|
-
* ```
|
|
229
|
-
*/
|
|
230
|
-
declare function createHttpTransport(config: SyncUrlConfig): SyncTransport;
|
|
231
|
-
/**
|
|
232
|
-
* Thrown when the HTTP push endpoint returns a non-OK status.
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* ```ts
|
|
236
|
-
* import { createHttpTransport, SyncPushError } from "event-sourced-collection"
|
|
237
|
-
*
|
|
238
|
-
* const sync = createHttpTransport({
|
|
239
|
-
* push: "/api/sync/events",
|
|
240
|
-
* pull: "/api/sync/events",
|
|
241
|
-
* })
|
|
242
|
-
*
|
|
243
|
-
* try {
|
|
244
|
-
* await sync.push(events)
|
|
245
|
-
* } catch (error) {
|
|
246
|
-
* if (error instanceof SyncPushError) {
|
|
247
|
-
* console.error(error.status, error.body)
|
|
248
|
-
* }
|
|
249
|
-
* }
|
|
250
|
-
* ```
|
|
251
|
-
*/
|
|
252
|
-
declare class SyncPushError extends Error {
|
|
253
|
-
readonly status: number;
|
|
254
|
-
readonly body: string;
|
|
255
|
-
constructor(status: number, body: string);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Thrown when the HTTP pull endpoint returns a non-OK status.
|
|
259
|
-
*
|
|
260
|
-
* @example
|
|
261
|
-
* ```ts
|
|
262
|
-
* import { createHttpTransport, SyncPullError } from "event-sourced-collection"
|
|
263
|
-
*
|
|
264
|
-
* const sync = createHttpTransport({
|
|
265
|
-
* push: "/api/sync/events",
|
|
266
|
-
* pull: "/api/sync/events",
|
|
267
|
-
* })
|
|
268
|
-
*
|
|
269
|
-
* try {
|
|
270
|
-
* await sync.pull(0)
|
|
271
|
-
* } catch (error) {
|
|
272
|
-
* if (error instanceof SyncPullError) {
|
|
273
|
-
* console.error(error.status, error.body)
|
|
274
|
-
* }
|
|
275
|
-
* }
|
|
276
|
-
* ```
|
|
277
|
-
*/
|
|
278
|
-
declare class SyncPullError extends Error {
|
|
279
|
-
readonly status: number;
|
|
280
|
-
readonly body: string;
|
|
281
|
-
constructor(status: number, body: string);
|
|
282
|
-
}
|
|
283
|
-
//#endregion
|
|
284
|
-
//#region src/core/sync-presets.d.ts
|
|
285
|
-
/**
|
|
286
|
-
* Push limits per hosting platform. Byte caps leave headroom under the
|
|
287
|
-
* platform's request body limit (Vercel functions: 4.5 MB; AWS Lambda and
|
|
288
|
-
* Netlify: 6 MB) for headers and JSON size estimation drift.
|
|
289
|
-
*
|
|
290
|
-
* @example
|
|
291
|
-
* ```ts
|
|
292
|
-
* createBrowserEventSourcedDB({ ..., syncPreset: "vercel" })
|
|
293
|
-
* ```
|
|
294
|
-
*/
|
|
295
|
-
declare const SYNC_PUSH_PRESETS: Readonly<Record<SyncPushPreset, SyncPushLimits>>;
|
|
296
|
-
declare function resolvePushLimits(config: {
|
|
297
|
-
syncPreset?: SyncPushPreset;
|
|
298
|
-
pushBatchSize?: number;
|
|
299
|
-
maxPushBytes?: number;
|
|
300
|
-
}): SyncPushLimits;
|
|
301
|
-
//#endregion
|
|
302
|
-
//#region src/testing/mock-sync-backend.d.ts
|
|
303
|
-
type MockRejection = {
|
|
304
|
-
message: string;
|
|
305
|
-
code?: string;
|
|
306
|
-
retryable?: boolean;
|
|
307
|
-
};
|
|
308
|
-
/**
|
|
309
|
-
* Decides the fate of a pushed event. Return `undefined` to accept it.
|
|
310
|
-
* Throwing from here simulates a transport-level failure for the whole batch.
|
|
311
|
-
*/
|
|
312
|
-
type MockRejectFn = (event: OutboundEvent, attempt: number) => MockRejection | undefined;
|
|
313
|
-
type MockSyncBackendOptions = {
|
|
314
|
-
/** Identity reported on pull, for exercising backend-reset detection. */backendId?: string; /** Max events returned per pull page. Defaults to all of them. */
|
|
315
|
-
pageSize?: number; /** Per-event push rejection hook. */
|
|
316
|
-
rejectPush?: MockRejectFn;
|
|
317
|
-
};
|
|
318
|
-
type MockSyncBackend = SyncTransport & {
|
|
319
|
-
/** Everything the server has accepted, in assigned order. */readonly events: ReadonlyArray<ServerEvent>;
|
|
320
|
-
readonly pushCalls: number;
|
|
321
|
-
readonly pullCalls: number; /** Batch sizes seen by push, in order — useful for asserting batching. */
|
|
322
|
-
readonly pushBatchSizes: ReadonlyArray<number>; /** Injects an event as though another device had pushed it. */
|
|
323
|
-
seed: (event: {
|
|
324
|
-
collectionId: string;
|
|
325
|
-
type?: MutationType;
|
|
326
|
-
key: string | number;
|
|
327
|
-
payload: Record<string, unknown>;
|
|
328
|
-
eventId?: string;
|
|
329
|
-
clientId?: string;
|
|
330
|
-
}) => ServerEvent; /** Fails the next `count` push calls at the transport level. */
|
|
331
|
-
failNextPushes: (count: number, message?: string) => void; /** Changes reported identity, simulating a wiped or swapped backend. */
|
|
332
|
-
setBackendId: (backendId: string) => void; /** Drops all stored events and restarts sequence numbering. */
|
|
333
|
-
reset: () => void;
|
|
334
|
-
};
|
|
335
|
-
/**
|
|
336
|
-
* In-memory sync backend for tests: assigns sequence numbers, deduplicates by
|
|
337
|
-
* `eventId`, paginates, and can inject rejections and outages.
|
|
338
|
-
*
|
|
339
|
-
* @example
|
|
340
|
-
* ```ts
|
|
341
|
-
* import { createMockSyncBackend } from "event-sourced-collection"
|
|
342
|
-
* import { createNodeEventSourcedDB } from "event-sourced-collection/node"
|
|
343
|
-
*
|
|
344
|
-
* const backend = createMockSyncBackend({ backendId: "test" })
|
|
345
|
-
* const { ensureDb, db } = createNodeEventSourcedDB({
|
|
346
|
-
* collections: { todos: { getKey: (todo: { id: string }) => todo.id } },
|
|
347
|
-
* sync: backend,
|
|
348
|
-
* modules: nodeSqliteModules,
|
|
349
|
-
* })
|
|
350
|
-
*
|
|
351
|
-
* await ensureDb()
|
|
352
|
-
* backend.seed({ collectionId: "todos", key: "t1", payload: { id: "t1", title: "Remote" } })
|
|
353
|
-
* await db.sync()
|
|
354
|
-
* ```
|
|
355
|
-
*/
|
|
356
|
-
declare function createMockSyncBackend(options?: MockSyncBackendOptions): MockSyncBackend;
|
|
357
|
-
//#endregion
|
|
358
|
-
//#region src/platforms/web-locks.d.ts
|
|
359
|
-
/**
|
|
360
|
-
* True when `navigator.locks` is available (modern browsers / workers).
|
|
361
|
-
*
|
|
362
|
-
* @example
|
|
363
|
-
* ```ts
|
|
364
|
-
* import { createWebLocksSyncLock, supportsWebLocks } from "event-sourced-collection"
|
|
365
|
-
* import { createBrowserEventSourcedDB } from "event-sourced-collection/browser"
|
|
366
|
-
*
|
|
367
|
-
* const lock = supportsWebLocks() ? createWebLocksSyncLock() : undefined
|
|
368
|
-
*
|
|
369
|
-
* createBrowserEventSourcedDB({
|
|
370
|
-
* databaseName: "app.sqlite",
|
|
371
|
-
* lock: lock ?? null,
|
|
372
|
-
* collections: { todos: { getKey: (todo: { id: string }) => todo.id } },
|
|
373
|
-
* modules,
|
|
374
|
-
* })
|
|
375
|
-
* ```
|
|
376
|
-
*/
|
|
377
|
-
declare function supportsWebLocks(): boolean;
|
|
378
|
-
/**
|
|
379
|
-
* Leader election backed by the Web Locks API, so only one tab or worker syncs
|
|
380
|
-
* at a time. Uses `ifAvailable` rather than queueing: a tab that loses the race
|
|
381
|
-
* returns immediately instead of running a redundant sync afterwards.
|
|
382
|
-
*
|
|
383
|
-
* Falls back to always acquiring when Web Locks is unavailable (older browsers,
|
|
384
|
-
* non-browser runtimes), which preserves single-context behaviour.
|
|
385
|
-
*
|
|
386
|
-
* `createBrowserEventSourcedDB` installs this as the default `lock`. Pass
|
|
387
|
-
* `lock: null` there to opt out.
|
|
388
|
-
*
|
|
389
|
-
* @example Only one tab runs `sync()`
|
|
390
|
-
* ```ts
|
|
391
|
-
* import { createWebLocksSyncLock, supportsWebLocks } from "event-sourced-collection"
|
|
392
|
-
*
|
|
393
|
-
* const lock = createWebLocksSyncLock()
|
|
394
|
-
*
|
|
395
|
-
* async function syncIfLeader() {
|
|
396
|
-
* const outcome = await lock.tryRun("event-sourced-sync:app.sqlite", () => db.sync())
|
|
397
|
-
* if (!outcome.acquired) return // another tab already holds the lock
|
|
398
|
-
* return outcome.result
|
|
399
|
-
* }
|
|
400
|
-
*
|
|
401
|
-
* if (!supportsWebLocks()) {
|
|
402
|
-
* // Node / older browsers: tryRun always acquires
|
|
403
|
-
* }
|
|
404
|
-
* ```
|
|
405
|
-
*/
|
|
406
|
-
declare function createWebLocksSyncLock(): SyncLock;
|
|
407
|
-
//#endregion
|
|
408
|
-
//#region src/utils/uuid.d.ts
|
|
409
|
-
/**
|
|
410
|
-
* Time-ordered event id (UUIDv7). Used as `eventId` on outbox rows and as the
|
|
411
|
-
* default device `clientId` when you do not pass one.
|
|
412
|
-
*
|
|
413
|
-
* @example
|
|
414
|
-
* ```ts
|
|
415
|
-
* import { generateEventId } from "event-sourced-collection"
|
|
416
|
-
*
|
|
417
|
-
* const eventId = generateEventId()
|
|
418
|
-
* const clientId = generateEventId()
|
|
419
|
-
* ```
|
|
420
|
-
*/
|
|
421
|
-
declare function generateEventId(): string;
|
|
422
|
-
//#endregion
|
|
423
|
-
//#region src/internal/pull.d.ts
|
|
424
|
-
/**
|
|
425
|
-
* Thrown when `backendMismatch` is `"fail"` and the server reports a different
|
|
426
|
-
* `backendId` than this client last synced with (wiped or swapped event store).
|
|
427
|
-
*
|
|
428
|
-
* @example
|
|
429
|
-
* ```ts
|
|
430
|
-
* import { BackendMismatchError } from "event-sourced-collection"
|
|
431
|
-
*
|
|
432
|
-
* const result = await db.sync()
|
|
433
|
-
* const mismatch = result.errors.find((error) => error instanceof BackendMismatchError)
|
|
434
|
-
* if (mismatch) {
|
|
435
|
-
* console.error("backend changed", mismatch.expected, mismatch.received)
|
|
436
|
-
* }
|
|
437
|
-
* ```
|
|
438
|
-
*/
|
|
439
|
-
declare class BackendMismatchError extends Error {
|
|
440
|
-
readonly expected: string | null;
|
|
441
|
-
readonly received: string;
|
|
442
|
-
constructor(expected: string | null, received: string);
|
|
443
|
-
}
|
|
444
|
-
//#endregion
|
|
445
|
-
export { createEventSourcedDB as C, resolveModules as S, createLazySingleton as _, MockRejectFn as a, ModulesInput as b, MockSyncBackendOptions as c, resolvePushLimits as d, SyncPullError as f, LazySingletonOptions as g, LazySingleton as h, supportsWebLocks as i, createMockSyncBackend as l, createHttpTransport as m, generateEventId as n, MockRejection as o, SyncPushError as p, createWebLocksSyncLock as r, MockSyncBackend as s, BackendMismatchError as t, SYNC_PUSH_PRESETS as u, EventSourcedDBHandle as v, createEventSourcedDBHandle as x, EventSourcedDBHandleSetup as y };
|
|
446
|
-
//# sourceMappingURL=index-BkKizlCB.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BkKizlCB.d.mts","names":[],"sources":["../src/core/create-event-sourced-db.ts","../src/core/create-event-sourced-db-handle.ts","../src/core/lazy-singleton.ts","../src/core/sync.ts","../src/core/sync-presets.ts","../src/testing/mock-sync-backend.ts","../src/platforms/web-locks.ts","../src/utils/uuid.ts","../src/internal/pull.ts"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-CbOMv5E8.d.mts","names":[],"sources":["../src/core/persisted-collection.ts","../src/utils/logger.ts","../src/core/types.ts"],"mappings":"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"}
|