@evolu/common 6.0.1-preview.19 → 6.0.1-preview.20

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.
Files changed (140) hide show
  1. package/dist/src/Assert.d.ts.map +1 -1
  2. package/dist/src/Assert.js +1 -1
  3. package/dist/src/Buffer.d.ts +1 -1
  4. package/dist/src/Buffer.d.ts.map +1 -1
  5. package/dist/src/Buffer.js +1 -1
  6. package/dist/src/CallbackRegistry.d.ts +53 -0
  7. package/dist/src/CallbackRegistry.d.ts.map +1 -0
  8. package/dist/src/CallbackRegistry.js +25 -0
  9. package/dist/src/Console.d.ts +31 -6
  10. package/dist/src/Console.d.ts.map +1 -1
  11. package/dist/src/Console.js +72 -9
  12. package/dist/src/Crypto.d.ts +48 -37
  13. package/dist/src/Crypto.d.ts.map +1 -1
  14. package/dist/src/Crypto.js +27 -50
  15. package/dist/src/Evolu/Db.d.ts +138 -66
  16. package/dist/src/Evolu/Db.d.ts.map +1 -1
  17. package/dist/src/Evolu/Db.js +248 -645
  18. package/dist/src/Evolu/Diff.d.ts +3 -3
  19. package/dist/src/Evolu/Diff.d.ts.map +1 -1
  20. package/dist/src/Evolu/Diff.js +7 -5
  21. package/dist/src/Evolu/Evolu.d.ts +79 -116
  22. package/dist/src/Evolu/Evolu.d.ts.map +1 -1
  23. package/dist/src/Evolu/Evolu.js +275 -132
  24. package/dist/src/Evolu/Internal.d.ts +0 -2
  25. package/dist/src/Evolu/Internal.d.ts.map +1 -1
  26. package/dist/src/Evolu/Internal.js +0 -2
  27. package/dist/src/Evolu/LocalAuth.d.ts +144 -0
  28. package/dist/src/Evolu/LocalAuth.d.ts.map +1 -0
  29. package/dist/src/Evolu/LocalAuth.js +171 -0
  30. package/dist/src/Evolu/Owner.d.ts +129 -83
  31. package/dist/src/Evolu/Owner.d.ts.map +1 -1
  32. package/dist/src/Evolu/Owner.js +80 -89
  33. package/dist/src/Evolu/Platform.d.ts +9 -7
  34. package/dist/src/Evolu/Platform.d.ts.map +1 -1
  35. package/dist/src/Evolu/Protocol.d.ts +114 -191
  36. package/dist/src/Evolu/Protocol.d.ts.map +1 -1
  37. package/dist/src/Evolu/Protocol.js +409 -416
  38. package/dist/src/Evolu/Public.d.ts +6 -8
  39. package/dist/src/Evolu/Public.d.ts.map +1 -1
  40. package/dist/src/Evolu/Public.js +2 -3
  41. package/dist/src/Evolu/PublicKysely.js +3 -3
  42. package/dist/src/Evolu/Relay.d.ts +1 -2
  43. package/dist/src/Evolu/Relay.d.ts.map +1 -1
  44. package/dist/src/Evolu/Relay.js +11 -9
  45. package/dist/src/Evolu/Schema.d.ts +88 -27
  46. package/dist/src/Evolu/Schema.d.ts.map +1 -1
  47. package/dist/src/Evolu/Schema.js +141 -24
  48. package/dist/src/Evolu/Storage.d.ts +158 -14
  49. package/dist/src/Evolu/Storage.d.ts.map +1 -1
  50. package/dist/src/Evolu/Storage.js +32 -32
  51. package/dist/src/Evolu/Sync.d.ts +77 -13
  52. package/dist/src/Evolu/Sync.d.ts.map +1 -1
  53. package/dist/src/Evolu/Sync.js +453 -20
  54. package/dist/src/Evolu/Timestamp.d.ts +29 -27
  55. package/dist/src/Evolu/Timestamp.d.ts.map +1 -1
  56. package/dist/src/Evolu/Timestamp.js +20 -18
  57. package/dist/src/ManyToManyMap.d.ts +74 -10
  58. package/dist/src/ManyToManyMap.d.ts.map +1 -1
  59. package/dist/src/ManyToManyMap.js +41 -6
  60. package/dist/src/Random.d.ts +3 -2
  61. package/dist/src/Random.d.ts.map +1 -1
  62. package/dist/src/RefCountedResourceManager.d.ts +119 -0
  63. package/dist/src/RefCountedResourceManager.d.ts.map +1 -0
  64. package/dist/src/RefCountedResourceManager.js +197 -0
  65. package/dist/src/Result.d.ts +144 -22
  66. package/dist/src/Result.d.ts.map +1 -1
  67. package/dist/src/Result.js +5 -2
  68. package/dist/src/Sqlite.d.ts +20 -4
  69. package/dist/src/Sqlite.d.ts.map +1 -1
  70. package/dist/src/Sqlite.js +50 -8
  71. package/dist/src/Task.d.ts +511 -0
  72. package/dist/src/Task.d.ts.map +1 -0
  73. package/dist/src/Task.js +410 -0
  74. package/dist/src/Time.d.ts +59 -0
  75. package/dist/src/Time.d.ts.map +1 -1
  76. package/dist/src/Time.js +87 -4
  77. package/dist/src/Type.d.ts +431 -341
  78. package/dist/src/Type.d.ts.map +1 -1
  79. package/dist/src/Type.js +458 -466
  80. package/dist/src/WebSocket.d.ts +5 -2
  81. package/dist/src/WebSocket.d.ts.map +1 -1
  82. package/dist/src/WebSocket.js +12 -13
  83. package/dist/src/Worker.d.ts +39 -11
  84. package/dist/src/Worker.d.ts.map +1 -1
  85. package/dist/src/Worker.js +22 -4
  86. package/dist/src/index.d.ts +2 -3
  87. package/dist/src/index.d.ts.map +1 -1
  88. package/dist/src/index.js +2 -3
  89. package/package.json +7 -7
  90. package/src/Assert.ts +2 -4
  91. package/src/Buffer.ts +1 -1
  92. package/src/CallbackRegistry.ts +84 -0
  93. package/src/Console.ts +91 -11
  94. package/src/Crypto.ts +78 -91
  95. package/src/Evolu/Db.ts +455 -947
  96. package/src/Evolu/Diff.ts +7 -5
  97. package/src/Evolu/Evolu.ts +545 -307
  98. package/src/Evolu/Internal.ts +0 -2
  99. package/src/Evolu/LocalAuth.ts +422 -0
  100. package/src/Evolu/Owner.ts +191 -131
  101. package/src/Evolu/Platform.ts +9 -9
  102. package/src/Evolu/Protocol.ts +536 -653
  103. package/src/Evolu/Public.ts +7 -9
  104. package/src/Evolu/PublicKysely.ts +3 -3
  105. package/src/Evolu/Relay.ts +17 -12
  106. package/src/Evolu/Schema.ts +271 -66
  107. package/src/Evolu/Storage.ts +263 -55
  108. package/src/Evolu/Sync.ts +758 -37
  109. package/src/Evolu/Timestamp.ts +30 -35
  110. package/src/ManyToManyMap.ts +127 -24
  111. package/src/Random.ts +3 -2
  112. package/src/RefCountedResourceManager.ts +368 -0
  113. package/src/Result.ts +149 -23
  114. package/src/Sqlite.ts +59 -24
  115. package/src/Task.ts +779 -0
  116. package/src/Time.ts +168 -4
  117. package/src/Type.ts +657 -695
  118. package/src/WebSocket.ts +23 -17
  119. package/src/Worker.ts +72 -23
  120. package/src/index.ts +2 -3
  121. package/dist/src/Callbacks.d.ts +0 -20
  122. package/dist/src/Callbacks.d.ts.map +0 -1
  123. package/dist/src/Callbacks.js +0 -18
  124. package/dist/src/Evolu/Config.d.ts +0 -82
  125. package/dist/src/Evolu/Config.d.ts.map +0 -1
  126. package/dist/src/Evolu/Config.js +0 -9
  127. package/dist/src/Evolu/Kysely.d.ts +0 -6
  128. package/dist/src/Evolu/Kysely.d.ts.map +0 -1
  129. package/dist/src/Evolu/Kysely.js +0 -21
  130. package/dist/src/NanoId.d.ts +0 -27
  131. package/dist/src/NanoId.d.ts.map +0 -1
  132. package/dist/src/NanoId.js +0 -6
  133. package/dist/src/Promise.d.ts +0 -180
  134. package/dist/src/Promise.d.ts.map +0 -1
  135. package/dist/src/Promise.js +0 -176
  136. package/src/Callbacks.ts +0 -43
  137. package/src/Evolu/Config.ts +0 -97
  138. package/src/Evolu/Kysely.ts +0 -38
  139. package/src/NanoId.ts +0 -39
  140. package/src/Promise.ts +0 -295
@@ -26,8 +26,8 @@ export declare const makePatches: (previousRows: ReadonlyArray<Row> | undefined,
26
26
  * A unique identifier prepended to JSON-encoded strings. This allows safe
27
27
  * detection and parsing of only those columns that require JSON.parse.
28
28
  *
29
- * The identifier is generated using nanoid to ensure randomness and uniqueness,
30
- * preventing malicious actors from inserting fake data that could be
29
+ * The identifier is a cryptographically random Evolu Id, ensuring uniqueness
30
+ * and preventing malicious actors from inserting fake data that could be
31
31
  * misinterpreted as JSON by the application.
32
32
  *
33
33
  * Note: The same queries created by different browser tabs will have different
@@ -38,6 +38,6 @@ export declare const makePatches: (previousRows: ReadonlyArray<Row> | undefined,
38
38
  *
39
39
  * See: https://github.com/kysely-org/kysely/issues/1372#issuecomment-2702773948
40
40
  */
41
- export declare const kyselyJsonIdentifier: string;
41
+ export declare const kyselyJsonIdentifier: string & import("../Brand.js").Brand<"Id">;
42
42
  export declare const parseSqliteJsonArray: <T>(arr: ReadonlyArray<T>) => ReadonlyArray<T>;
43
43
  //# sourceMappingURL=Diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Diff.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Diff.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,KAAK,GAAG,eAAe,GAAG,cAAc,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GACvB,SAAS,aAAa,CAAC,KAAK,CAAC,EAC7B,SAAS,aAAa,CAAC,GAAG,CAAC,KAC1B,aAAa,CAAC,GAAG,CAUP,CAAC;AAEd;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,cAAc,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,EAC5C,UAAU,aAAa,CAAC,GAAG,CAAC,KAC3B,aAAa,CAAC,KAAK,CA6BrB,CAAC;AAUF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAE7C,eAAO,MAAM,oBAAoB,GAAI,CAAC,EACpC,KAAK,aAAa,CAAC,CAAC,CAAC,KACpB,aAAa,CAAC,CAAC,CAMjB,CAAC"}
1
+ {"version":3,"file":"Diff.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Diff.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,KAAK,GAAG,eAAe,GAAG,cAAc,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GACvB,SAAS,aAAa,CAAC,KAAK,CAAC,EAC7B,SAAS,aAAa,CAAC,GAAG,CAAC,KAC1B,aAAa,CAAC,GAAG,CAUP,CAAC;AAEd;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,cAAc,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,EAC5C,UAAU,aAAa,CAAC,GAAG,CAAC,KAC3B,aAAa,CAAC,KAAK,CA6BrB,CAAC;AAUF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,4CAE/B,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EACpC,KAAK,aAAa,CAAC,CAAC,CAAC,KACpB,aAAa,CAAC,CAAC,CAMjB,CAAC"}
@@ -1,7 +1,7 @@
1
- import { nanoid } from "nanoid";
1
+ import { createRandomBytes } from "../Crypto.js";
2
2
  import { isPlainObject } from "../Object.js";
3
3
  import { orderUint8Array } from "../Order.js";
4
- import { String } from "../Type.js";
4
+ import { createId, String } from "../Type.js";
5
5
  export const applyPatches = (patches, current) => patches.reduce((next, patch) => {
6
6
  switch (patch.op) {
7
7
  case "replaceAll":
@@ -54,8 +54,8 @@ const areEqual = (a, b) => {
54
54
  * A unique identifier prepended to JSON-encoded strings. This allows safe
55
55
  * detection and parsing of only those columns that require JSON.parse.
56
56
  *
57
- * The identifier is generated using nanoid to ensure randomness and uniqueness,
58
- * preventing malicious actors from inserting fake data that could be
57
+ * The identifier is a cryptographically random Evolu Id, ensuring uniqueness
58
+ * and preventing malicious actors from inserting fake data that could be
59
59
  * misinterpreted as JSON by the application.
60
60
  *
61
61
  * Note: The same queries created by different browser tabs will have different
@@ -66,7 +66,9 @@ const areEqual = (a, b) => {
66
66
  *
67
67
  * See: https://github.com/kysely-org/kysely/issues/1372#issuecomment-2702773948
68
68
  */
69
- export const kyselyJsonIdentifier = nanoid();
69
+ export const kyselyJsonIdentifier = createId({
70
+ randomBytes: createRandomBytes(),
71
+ });
70
72
  export const parseSqliteJsonArray = (arr) => {
71
73
  const result = new Array(arr.length);
72
74
  for (let i = 0; i < arr.length; ++i) {
@@ -1,20 +1,48 @@
1
1
  import { ConsoleDep } from "../Console.js";
2
- import { SymmetricCryptoDecryptError } from "../Crypto.js";
2
+ import { RandomBytesDep, SymmetricCryptoDecryptError } from "../Crypto.js";
3
3
  import { TransferableError } from "../Error.js";
4
- import { NanoIdLibDep } from "../NanoId.js";
5
4
  import { SqliteError } from "../Sqlite.js";
6
5
  import { StoreSubscribe } from "../Store.js";
7
6
  import { TimeDep } from "../Time.js";
8
7
  import { Mnemonic } from "../Type.js";
9
- import { Config } from "./Config.js";
10
- import { CreateDbWorkerDep } from "./Db.js";
8
+ import { CreateDbWorkerDep, DbConfig } from "./Db.js";
9
+ import { LocalAuthDep } from "./LocalAuth.js";
11
10
  import { AppOwner } from "./Owner.js";
12
- import { CreateAppStateDep, FlushSyncDep } from "./Platform.js";
11
+ import { FlushSyncDep, ReloadAppDep } from "./Platform.js";
13
12
  import { ProtocolError, ProtocolUnsupportedVersionError } from "./Protocol.js";
14
13
  import { Queries, QueriesToQueryRowsPromises, Query, QueryRows, Row } from "./Query.js";
15
- import { CreateQuery, EvoluSchema, Mutation, ValidateSchema } from "./Schema.js";
16
- import { SyncState } from "./Sync.js";
14
+ import { CreateQuery, EvoluSchema, IndexesConfig, Mutation, ValidateSchema } from "./Schema.js";
15
+ import { SyncOwner } from "./Sync.js";
17
16
  import { TimestampError } from "./Timestamp.js";
17
+ export interface EvoluConfig extends Partial<DbConfig> {
18
+ /**
19
+ * Use the `indexes` option to define SQLite indexes.
20
+ *
21
+ * Table and column names are not typed because Kysely doesn't support it.
22
+ *
23
+ * https://medium.com/@JasonWyatt/squeezing-performance-from-sqlite-indexes-indexes-c4e175f3c346
24
+ *
25
+ * ### Example
26
+ *
27
+ * ```ts
28
+ * const evolu = createEvolu(evoluReactDeps)(Schema, {
29
+ * indexes: (create) => [
30
+ * create("todoCreatedAt").on("todo").column("createdAt"),
31
+ * create("todoCategoryCreatedAt")
32
+ * .on("todoCategory")
33
+ * .column("createdAt"),
34
+ * ],
35
+ * });
36
+ * ```
37
+ */
38
+ readonly indexes?: IndexesConfig;
39
+ /**
40
+ * URL to reload browser tabs after reset or restore.
41
+ *
42
+ * The default value is `/`.
43
+ */
44
+ readonly reloadUrl?: string;
45
+ }
18
46
  export interface Evolu<S extends EvoluSchema = EvoluSchema> {
19
47
  /**
20
48
  * Subscribe to {@link EvoluError} changes.
@@ -40,7 +68,8 @@ export interface Evolu<S extends EvoluSchema = EvoluSchema> {
40
68
  * All this function does is compile the Kysely query and serialize it into a
41
69
  * unique string. Both operations are fast and cheap.
42
70
  *
43
- * For mutations, use {@link Evolu#insert} and {@link Evolu#update}.
71
+ * For mutations, use {@link Evolu#insert}, {@link Evolu#update}, or
72
+ * {@link Evolu#upsert}.
44
73
  *
45
74
  * ### Example
46
75
  *
@@ -59,43 +88,20 @@ export interface Evolu<S extends EvoluSchema = EvoluSchema> {
59
88
  /**
60
89
  * Load {@link Query} and return a promise with {@link QueryRows}.
61
90
  *
62
- * A returned promise always resolves successfully because there is no reason
63
- * why loading should fail. All data are local, and the query is typed. A
64
- * serious unexpected Evolu error shall be handled with
65
- * {@link Evolu#subscribeError}.
91
+ * The returned promise always resolves successfully because there is no
92
+ * reason why loading should fail. All data are local, and the query is typed.
93
+ * Unexpected errors are handled with {@link Evolu#subscribeError}.
66
94
  *
67
95
  * Loading is batched, and returned promises are cached, so there is no need
68
- * for an additional cache. Evolu's internal cache is invalidated on
69
- * mutation.
70
- *
71
- * The returned promise is enriched with special status and value properties
72
- * for the upcoming React `use` Hook, but other UI libraries can also leverage
73
- * them. Speaking of React, there are two essential React Suspense-related
74
- * patterns that every developer should be aware of—passing promises to
75
- * children and caching over mutations.
76
- *
77
- * With promises passed to children, we can load a query as soon as possible,
78
- * but we don't have to use the returned promise immediately. That's useful
79
- * for prefetching, which is generally not necessary for local-first apps but
80
- * can be if a query takes a long time to load.
81
- *
82
- * Caching over mutation is a pattern that every developer should know. As we
83
- * said, Evolu caches promise until a mutation happens. A query loaded after
84
- * that will return a new pending promise. That's okay for general usage but
85
- * not for UI with React Suspense because a mutation would suspend rerendered
86
- * queries on a page, and that's not a good UX.
87
- *
88
- * We call this pattern "caching over mutation" because it has no globally
89
- * accepted name yet. React RFC for React Cache does not exist yet.
90
- *
91
- * For better UX, a query must be subscribed for updates. This way, instead of
92
- * Suspense flashes, the user sees new data immediately because Evolu replaces
93
- * cached promises with fresh, already resolved new ones.
94
- *
95
- * If you are curious why Evolu does not do that for all queries by default,
96
- * the answer is simple: performance. Tracking changes is costly and
97
- * meaningful only for visible (hence subscribed) queries anyway. To subscribe
98
- * to a query, use {@link Evolu#subscribeQuery}.
96
+ * for an additional cache. Evolu's internal cache is invalidated on mutation.
97
+ * Unsubscribed queries are removed from the cache, so loading them again will
98
+ * return a new pending promise. Subscribed queries remain in the cache to
99
+ * prevent unnecessary Suspense boundaries from activating. Their promises are
100
+ * replaced with `Promise.resolve(rows)`, allowing React to synchronously
101
+ * unwrap the updated data without suspending.
102
+ *
103
+ * To subscribe a query for automatic updates, use
104
+ * {@link Evolu#subscribeQuery}.
99
105
  *
100
106
  * ### Example
101
107
  *
@@ -103,7 +109,7 @@ export interface Evolu<S extends EvoluSchema = EvoluSchema> {
103
109
  * const allTodos = evolu.createQuery((db) =>
104
110
  * db.selectFrom("todo").selectAll(),
105
111
  * );
106
- * evolu.loadQuery(allTodos).then(({ rows }) => {
112
+ * evolu.loadQuery(allTodos).then((rows) => {
107
113
  * console.log(rows);
108
114
  * });
109
115
  * ```
@@ -146,53 +152,15 @@ export interface Evolu<S extends EvoluSchema = EvoluSchema> {
146
152
  */
147
153
  readonly getQueryRows: <R extends Row>(query: Query<R>) => QueryRows<R>;
148
154
  /**
149
- * Subscribe to {@link AppOwner} changes.
150
- *
151
- * ### Example
152
- *
153
- * ```ts
154
- * const unsubscribe = evolu.subscribeAppOwner(() => {
155
- * const owner = evolu.getAppOwner();
156
- * });
157
- * ```
158
- */
159
- readonly subscribeAppOwner: StoreSubscribe;
160
- /**
161
- * Get {@link AppOwner}.
155
+ * Promise that resolves to {@link AppOwner} when available.
162
156
  *
163
157
  * ### Example
164
158
  *
165
159
  * ```ts
166
- * const unsubscribe = evolu.subscribeAppOwner(() => {
167
- * const owner = evolu.getAppOwner();
168
- * });
160
+ * const owner = await evolu.appOwner;
169
161
  * ```
170
162
  */
171
- readonly getAppOwner: () => AppOwner | null;
172
- /**
173
- * Subscribe to {@link SyncState} changes.
174
- *
175
- * ### Example
176
- *
177
- * ```ts
178
- * const unsubscribe = evolu.subscribeSyncState(() => {
179
- * const syncState = evolu.getSyncState();
180
- * });
181
- * ```
182
- */
183
- readonly subscribeSyncState: StoreSubscribe;
184
- /**
185
- * Get {@link SyncState}.
186
- *
187
- * ### Example
188
- *
189
- * ```ts
190
- * const unsubscribe = evolu.subscribeSyncState(() => {
191
- * const syncState = evolu.getSyncState();
192
- * });
193
- * ```
194
- */
195
- readonly getSyncState: () => SyncState;
163
+ readonly appOwner: Promise<AppOwner>;
196
164
  /**
197
165
  * Inserts a row into the database and returns a {@link Result} with the new
198
166
  * {@link Id}.
@@ -368,42 +336,36 @@ export interface Evolu<S extends EvoluSchema = EvoluSchema> {
368
336
  */
369
337
  readonly reloadApp: () => void;
370
338
  /** Export SQLite database file as Uint8Array. */
371
- readonly exportDatabase: () => Promise<Uint8Array>;
372
- }
373
- /** Represent errors that can occur in Evolu. */
374
- export type EvoluError = TimestampError | ProtocolError | TransferableError | SymmetricCryptoDecryptError | ProtocolUnsupportedVersionError | SqliteError;
375
- export type EvoluDeps = CreateDbWorkerDep & TimeDep & NanoIdLibDep & Partial<FlushSyncDep> & ConsoleDep & CreateAppStateDep;
376
- export interface EvoluConfigWithFunctions extends Config {
339
+ readonly exportDatabase: () => Promise<Uint8Array<ArrayBuffer>>;
377
340
  /**
378
- * Callback invoked when the database is initialized. Use `isFirst` to perform
379
- * one-time setup like initial data seeding.
341
+ * Use an owner. Using an owner means syncing it and subscribing to
342
+ * broadcasted changes. Returns a function to stop using the owner.
343
+ *
344
+ * Transport connections are automatically deduplicated and reference-counted,
345
+ * so multiple owners using the same transport will share a single
346
+ * connection.
380
347
  *
381
348
  * ### Example
382
349
  *
383
350
  * ```ts
384
- * const evolu = createEvolu(evoluReactWebDeps)(Schema, {
385
- * onInit: ({ appOwner, isFirst }) => {
386
- * if (isFirst) {
387
- * const todoCategoryId = getOrThrow(
388
- * evolu.insert("todoCategory", {
389
- * name: "Not Urgent",
390
- * }),
391
- * );
392
- *
393
- * evolu.insert("todo", {
394
- * title: "Try React Suspense",
395
- * categoryId: todoCategoryId.id,
396
- * });
397
- * }
398
- * },
399
- * });
351
+ * // Use an owner (starts syncing and subscribing to changes).
352
+ * const unuse = evolu.useOwner(shardOwner);
353
+ *
354
+ * // Later, stop using the owner.
355
+ * unuse();
356
+ *
357
+ * // Bulk operations.
358
+ * const unuses = owners.map((owner) => evolu.useOwner(owner));
359
+ * // Later: unuses.forEach(unuse => unuse());
400
360
  * ```
361
+ *
362
+ * @experimental
401
363
  */
402
- readonly onInit?: (params: {
403
- readonly appOwner: AppOwner;
404
- readonly isFirst: boolean;
405
- }) => void;
364
+ readonly useOwner: (owner: SyncOwner) => () => void;
406
365
  }
366
+ /** Represents errors that can occur in Evolu. */
367
+ export type EvoluError = ProtocolError | ProtocolUnsupportedVersionError | SqliteError | SymmetricCryptoDecryptError | TimestampError | TransferableError;
368
+ export type EvoluDeps = ConsoleDep & CreateDbWorkerDep & LocalAuthDep & Partial<FlushSyncDep> & RandomBytesDep & ReloadAppDep & TimeDep;
407
369
  /**
408
370
  * Creates an {@link Evolu} instance configured with the specified
409
371
  * {@link EvoluSchema} and optional configuration.
@@ -421,7 +383,8 @@ export interface EvoluConfigWithFunctions extends Config {
421
383
  * and merging.
422
384
  * - Automatic schema evolution that updates the underlying database with new
423
385
  * columns or tables.
424
- * - Managing owner data with resetAppOwner and restoreAppOwner.
386
+ * - Managing owner data with {@link Evolu#resetAppOwner} and
387
+ * {@link Evolu#restoreAppOwner}.
425
388
  *
426
389
  * ### Example
427
390
  *
@@ -451,6 +414,6 @@ export interface EvoluConfigWithFunctions extends Config {
451
414
  * const evolu = createEvolu(evoluReactDeps)(Schema);
452
415
  * ```
453
416
  */
454
- export declare const createEvolu: (deps: EvoluDeps) => <S extends EvoluSchema>(schema: ValidateSchema<S> extends never ? S : ValidateSchema<S>, partialConfig?: Partial<EvoluConfigWithFunctions>) => Evolu<S>;
455
- export declare const createNamespaceName: (config: Config) => (name: string) => string;
417
+ export declare const createEvolu: (deps: EvoluDeps) => <S extends EvoluSchema>(schema: ValidateSchema<S> extends never ? S : ValidateSchema<S>, config?: EvoluConfig) => Evolu<S>;
418
+ export declare const createQuery: <R extends Row>(queryCallback: Parameters<CreateQuery<EvoluSchema>>[0], options?: Parameters<CreateQuery<EvoluSchema>>[1]) => Query<R>;
456
419
  //# sourceMappingURL=Evolu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Evolu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Evolu.ts"],"names":[],"mappings":"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"}