@evolu/common 8.0.0-next.5 → 8.0.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.
Files changed (236) hide show
  1. package/dist/src/Array.d.ts +279 -173
  2. package/dist/src/Array.d.ts.map +1 -1
  3. package/dist/src/Array.js +105 -101
  4. package/dist/src/Assert.d.ts +39 -44
  5. package/dist/src/Assert.d.ts.map +1 -1
  6. package/dist/src/Assert.js +38 -31
  7. package/dist/src/BigInt.d.ts +6 -3
  8. package/dist/src/BigInt.d.ts.map +1 -1
  9. package/dist/src/BigInt.js +5 -2
  10. package/dist/src/Brand.d.ts +27 -40
  11. package/dist/src/Brand.d.ts.map +1 -1
  12. package/dist/src/Buffer.d.ts +27 -11
  13. package/dist/src/Buffer.d.ts.map +1 -1
  14. package/dist/src/Cache.d.ts +9 -4
  15. package/dist/src/Cache.d.ts.map +1 -1
  16. package/dist/src/Cache.js +8 -3
  17. package/dist/src/Callbacks.d.ts +30 -19
  18. package/dist/src/Callbacks.d.ts.map +1 -1
  19. package/dist/src/Console.d.ts +145 -66
  20. package/dist/src/Console.d.ts.map +1 -1
  21. package/dist/src/Console.js +91 -43
  22. package/dist/src/Crypto.d.ts +85 -42
  23. package/dist/src/Crypto.d.ts.map +1 -1
  24. package/dist/src/Crypto.js +44 -20
  25. package/dist/src/Eq.d.ts +87 -21
  26. package/dist/src/Eq.d.ts.map +1 -1
  27. package/dist/src/Eq.js +67 -19
  28. package/dist/src/Error.d.ts +3 -3
  29. package/dist/src/Error.d.ts.map +1 -1
  30. package/dist/src/Function.d.ts +119 -58
  31. package/dist/src/Function.d.ts.map +1 -1
  32. package/dist/src/Function.js +86 -43
  33. package/dist/src/Http.d.ts +394 -0
  34. package/dist/src/Http.d.ts.map +1 -0
  35. package/dist/src/Http.js +102 -0
  36. package/dist/src/Identicon.d.ts +16 -7
  37. package/dist/src/Identicon.d.ts.map +1 -1
  38. package/dist/src/Identicon.js +14 -5
  39. package/dist/src/LeakDetector.d.ts +88 -0
  40. package/dist/src/LeakDetector.d.ts.map +1 -0
  41. package/dist/src/LeakDetector.js +86 -0
  42. package/dist/src/LockManager.d.ts +18 -9
  43. package/dist/src/LockManager.d.ts.map +1 -1
  44. package/dist/src/LockManager.js +7 -8
  45. package/dist/src/Lookup.d.ts +43 -13
  46. package/dist/src/Lookup.d.ts.map +1 -1
  47. package/dist/src/Lookup.js +28 -8
  48. package/dist/src/Microtask.d.ts +1 -1
  49. package/dist/src/Microtask.d.ts.map +1 -1
  50. package/dist/src/Microtask.js +3 -7
  51. package/dist/src/Number.d.ts +49 -13
  52. package/dist/src/Number.d.ts.map +1 -1
  53. package/dist/src/Number.js +34 -5
  54. package/dist/src/Object.d.ts +160 -40
  55. package/dist/src/Object.d.ts.map +1 -1
  56. package/dist/src/Object.js +92 -46
  57. package/dist/src/Option.d.ts +10 -7
  58. package/dist/src/Option.d.ts.map +1 -1
  59. package/dist/src/Option.js +9 -6
  60. package/dist/src/Order.d.ts +21 -21
  61. package/dist/src/Order.d.ts.map +1 -1
  62. package/dist/src/Order.js +18 -21
  63. package/dist/src/Platform.d.ts +31 -0
  64. package/dist/src/Platform.d.ts.map +1 -1
  65. package/dist/src/Platform.js +98 -0
  66. package/dist/src/Random.d.ts +32 -17
  67. package/dist/src/Random.d.ts.map +1 -1
  68. package/dist/src/Random.js +12 -8
  69. package/dist/src/Redacted.d.ts +43 -29
  70. package/dist/src/Redacted.d.ts.map +1 -1
  71. package/dist/src/Redacted.js +14 -3
  72. package/dist/src/Ref.d.ts +11 -3
  73. package/dist/src/Ref.d.ts.map +1 -1
  74. package/dist/src/Ref.js +2 -2
  75. package/dist/src/RefCount.d.ts +2 -6
  76. package/dist/src/RefCount.d.ts.map +1 -1
  77. package/dist/src/RefCount.js +33 -90
  78. package/dist/src/Relation.d.ts +70 -5
  79. package/dist/src/Relation.d.ts.map +1 -1
  80. package/dist/src/Relation.js +77 -2
  81. package/dist/src/Resource.d.ts +590 -155
  82. package/dist/src/Resource.d.ts.map +1 -1
  83. package/dist/src/Resource.js +592 -343
  84. package/dist/src/Result.d.ts +838 -191
  85. package/dist/src/Result.d.ts.map +1 -1
  86. package/dist/src/Result.js +163 -102
  87. package/dist/src/Schedule.d.ts +684 -231
  88. package/dist/src/Schedule.d.ts.map +1 -1
  89. package/dist/src/Schedule.js +766 -295
  90. package/dist/src/Set.d.ts +89 -40
  91. package/dist/src/Set.d.ts.map +1 -1
  92. package/dist/src/Set.js +50 -29
  93. package/dist/src/Sqlite.d.ts +29 -72
  94. package/dist/src/Sqlite.d.ts.map +1 -1
  95. package/dist/src/Sqlite.js +39 -45
  96. package/dist/src/StackTrace.d.ts +40 -0
  97. package/dist/src/StackTrace.d.ts.map +1 -0
  98. package/dist/src/StackTrace.js +140 -0
  99. package/dist/src/Store.d.ts +5 -4
  100. package/dist/src/Store.d.ts.map +1 -1
  101. package/dist/src/Store.js +5 -4
  102. package/dist/src/String.d.ts +7 -1
  103. package/dist/src/String.d.ts.map +1 -1
  104. package/dist/src/String.js +20 -7
  105. package/dist/src/Task.d.ts +3428 -1629
  106. package/dist/src/Task.d.ts.map +1 -1
  107. package/dist/src/Task.js +1876 -1279
  108. package/dist/src/Test.d.ts +17 -124
  109. package/dist/src/Test.d.ts.map +1 -1
  110. package/dist/src/Test.js +17 -68
  111. package/dist/src/Time.d.ts +108 -49
  112. package/dist/src/Time.d.ts.map +1 -1
  113. package/dist/src/Time.js +172 -73
  114. package/dist/src/Type.d.ts +3542 -1926
  115. package/dist/src/Type.d.ts.map +1 -1
  116. package/dist/src/Type.js +3070 -1784
  117. package/dist/src/Types.d.ts +200 -100
  118. package/dist/src/Types.d.ts.map +1 -1
  119. package/dist/src/Types.js +39 -8
  120. package/dist/src/WebSocket.d.ts +48 -23
  121. package/dist/src/WebSocket.d.ts.map +1 -1
  122. package/dist/src/WebSocket.js +15 -6
  123. package/dist/src/Worker.d.ts +94 -36
  124. package/dist/src/Worker.d.ts.map +1 -1
  125. package/dist/src/Worker.js +58 -24
  126. package/dist/src/index.d.ts +55 -52
  127. package/dist/src/index.d.ts.map +1 -1
  128. package/dist/src/index.js +3 -1
  129. package/dist/src/intl/cs.d.ts +94 -0
  130. package/dist/src/intl/cs.d.ts.map +1 -0
  131. package/dist/src/intl/cs.js +220 -0
  132. package/dist/src/intl/index.d.ts +7 -0
  133. package/dist/src/intl/index.d.ts.map +1 -0
  134. package/dist/src/intl/index.js +6 -0
  135. package/dist/src/local-first/Db.d.ts +12 -8
  136. package/dist/src/local-first/Db.d.ts.map +1 -1
  137. package/dist/src/local-first/Db.js +107 -130
  138. package/dist/src/local-first/Error.d.ts +4 -4
  139. package/dist/src/local-first/Evolu.d.ts +338 -92
  140. package/dist/src/local-first/Evolu.d.ts.map +1 -1
  141. package/dist/src/local-first/Evolu.js +47 -55
  142. package/dist/src/local-first/LocalAuth.d.ts +4 -4
  143. package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
  144. package/dist/src/local-first/Owner.d.ts +61 -24
  145. package/dist/src/local-first/Owner.d.ts.map +1 -1
  146. package/dist/src/local-first/Owner.js +45 -8
  147. package/dist/src/local-first/Protocol.d.ts +44 -31
  148. package/dist/src/local-first/Protocol.d.ts.map +1 -1
  149. package/dist/src/local-first/Protocol.js +36 -13
  150. package/dist/src/local-first/Query.d.ts +147 -62
  151. package/dist/src/local-first/Query.d.ts.map +1 -1
  152. package/dist/src/local-first/Query.js +112 -58
  153. package/dist/src/local-first/Relay.d.ts +44 -14
  154. package/dist/src/local-first/Relay.d.ts.map +1 -1
  155. package/dist/src/local-first/Schema.d.ts +92 -41
  156. package/dist/src/local-first/Schema.d.ts.map +1 -1
  157. package/dist/src/local-first/Schema.js +25 -8
  158. package/dist/src/local-first/Shared.d.ts +23 -21
  159. package/dist/src/local-first/Shared.d.ts.map +1 -1
  160. package/dist/src/local-first/Shared.js +85 -42
  161. package/dist/src/local-first/Storage.d.ts +53 -32
  162. package/dist/src/local-first/Storage.d.ts.map +1 -1
  163. package/dist/src/local-first/Storage.js +194 -234
  164. package/dist/src/local-first/Timestamp.d.ts +21 -21
  165. package/dist/src/local-first/Timestamp.d.ts.map +1 -1
  166. package/dist/src/local-first/Timestamp.js +2 -2
  167. package/dist/src/local-first/index.d.ts +11 -11
  168. package/package.json +14 -13
  169. package/src/Array.ts +306 -205
  170. package/src/Assert.ts +48 -68
  171. package/src/BigInt.ts +6 -3
  172. package/src/Brand.ts +27 -40
  173. package/src/Buffer.ts +28 -12
  174. package/src/Cache.ts +9 -4
  175. package/src/Callbacks.ts +30 -19
  176. package/src/Console.ts +156 -84
  177. package/src/Crypto.ts +83 -41
  178. package/src/Eq.ts +95 -22
  179. package/src/Error.ts +5 -2
  180. package/src/Function.ts +167 -59
  181. package/src/Http.ts +549 -0
  182. package/src/Identicon.ts +16 -7
  183. package/src/LeakDetector.ts +182 -0
  184. package/src/LockManager.ts +43 -39
  185. package/src/Lookup.ts +62 -28
  186. package/src/Microtask.ts +19 -23
  187. package/src/Number.ts +64 -12
  188. package/src/Object.ts +173 -49
  189. package/src/Option.ts +10 -7
  190. package/src/Order.ts +23 -21
  191. package/src/Platform.ts +136 -0
  192. package/src/Polyfills.ts +6 -12
  193. package/src/Random.ts +32 -19
  194. package/src/Redacted.ts +44 -30
  195. package/src/Ref.ts +14 -6
  196. package/src/RefCount.ts +38 -80
  197. package/src/Relation.ts +202 -10
  198. package/src/Resource.ts +1199 -591
  199. package/src/Result.ts +930 -271
  200. package/src/Schedule.ts +859 -343
  201. package/src/Set.ts +89 -40
  202. package/src/Sqlite.ts +142 -137
  203. package/src/StackTrace.ts +230 -0
  204. package/src/Store.ts +8 -7
  205. package/src/String.ts +22 -5
  206. package/src/Task.ts +5109 -2845
  207. package/src/Test.ts +20 -167
  208. package/src/Time.ts +293 -90
  209. package/src/Type.ts +10034 -4117
  210. package/src/Types.ts +227 -101
  211. package/src/WebSocket.ts +64 -36
  212. package/src/Worker.ts +180 -72
  213. package/src/index.ts +55 -52
  214. package/src/intl/cs.ts +388 -0
  215. package/src/intl/index.ts +7 -0
  216. package/src/local-first/Db.ts +161 -190
  217. package/src/local-first/Error.ts +4 -4
  218. package/src/local-first/Evolu.ts +495 -250
  219. package/src/local-first/LocalAuth.ts +6 -12
  220. package/src/local-first/Owner.ts +58 -21
  221. package/src/local-first/Protocol.ts +49 -31
  222. package/src/local-first/Query.ts +146 -61
  223. package/src/local-first/Relay.ts +51 -21
  224. package/src/local-first/Schema.ts +109 -51
  225. package/src/local-first/Shared.ts +253 -214
  226. package/src/local-first/Storage.ts +266 -264
  227. package/src/local-first/Timestamp.ts +25 -18
  228. package/src/local-first/index.ts +11 -11
  229. package/dist/src/Skiplist.d.ts +0 -28
  230. package/dist/src/Skiplist.d.ts.map +0 -1
  231. package/dist/src/Skiplist.js +0 -64
  232. package/dist/src/Tracer.d.ts +0 -48
  233. package/dist/src/Tracer.d.ts.map +0 -1
  234. package/dist/src/Tracer.js +0 -6
  235. package/src/Skiplist.ts +0 -108
  236. package/src/Tracer.ts +0 -54
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { AliasNode, ColumnNode, ExpressionWrapper, IdentifierNode, sql as kyselySqlBuilder, ReferenceNode, TableNode, ValueNode, } from "kysely";
7
7
  import { createRandomBytes } from "../Crypto.js";
8
- import { createRecord, isPlainObject } from "../Object.js";
8
+ import { createMutableRecord, isPlainObject } from "../Object.js";
9
9
  import { eqSqliteValue, SqliteValue } from "../Sqlite.js";
10
10
  import { createId, String } from "../Type.js";
11
11
  export { sql as kyselySql } from "kysely";
@@ -21,25 +21,42 @@ export { sql as kyselySql } from "kysely";
21
21
  * ### Example
22
22
  *
23
23
  * ```ts
24
- * import { evoluJsonArrayFrom } from "@evolu/common";
25
- *
26
- * const result = await db
27
- * .selectFrom("person")
28
- * .select((eb) => [
29
- * "id",
30
- * evoluJsonArrayFrom(
31
- * eb
32
- * .selectFrom("pet")
33
- * .select(["pet.id as pet_id", "pet.name"])
34
- * .whereRef("pet.owner_id", "=", "person.id")
35
- * .orderBy("pet.name"),
36
- * ).as("pets"),
37
- * ])
38
- * .execute();
39
- *
40
- * result[0]?.id;
41
- * result[0]?.pets[0].pet_id;
42
- * result[0]?.pets[0].name;
24
+ * import {
25
+ * createQueryBuilder,
26
+ * evoluJsonArrayFrom,
27
+ * id,
28
+ * NonEmptyTrimmedString100,
29
+ * } from "@evolu/common";
30
+ *
31
+ * const PersonId = id("Person");
32
+ * const Schema = {
33
+ * person: { id: PersonId },
34
+ * pet: {
35
+ * id: id("Pet"),
36
+ * name: NonEmptyTrimmedString100,
37
+ * personId: PersonId,
38
+ * },
39
+ * };
40
+ * const createQuery = createQueryBuilder(Schema);
41
+ * const people = createQuery((db) =>
42
+ * db
43
+ * .selectFrom("person")
44
+ * .select(["person.id"])
45
+ * .select((eb) => [
46
+ * evoluJsonArrayFrom(
47
+ * eb
48
+ * .selectFrom("pet")
49
+ * .select(["pet.id as petId", "pet.name"])
50
+ * .whereRef("pet.personId", "=", "person.id")
51
+ * .orderBy("pet.name"),
52
+ * ).as("pets"),
53
+ * ]),
54
+ * );
55
+ *
56
+ * expectTypeOf<(typeof people.Row.pets)[number]>().toEqualTypeOf<{
57
+ * petId: typeof Schema.pet.id.Output;
58
+ * name: NonEmptyTrimmedString100 | null;
59
+ * }>();
43
60
  * ```
44
61
  */
45
62
  export const evoluJsonArrayFrom = (expr) => kyselySqlBuilder `(select ${kyselySqlBuilder.lit(kyselyJsonIdentifier)} || coalesce(json_group_array(json_object(${kyselySqlBuilder.join(getSqliteJsonObjectArgs(expr.toOperationNode(), "agg"))})), '[]') from ${expr} as agg)`;
@@ -57,25 +74,44 @@ export const evoluJsonArrayFrom = (expr) => kyselySqlBuilder `(select ${kyselySq
57
74
  * ### Example
58
75
  *
59
76
  * ```ts
60
- * import { evoluJsonObjectFrom } from "@evolu/common";
61
- *
62
- * const result = await db
63
- * .selectFrom("person")
64
- * .select((eb) => [
65
- * "id",
66
- * evoluJsonObjectFrom(
67
- * eb
68
- * .selectFrom("pet")
69
- * .select(["pet.id as pet_id", "pet.name"])
70
- * .whereRef("pet.owner_id", "=", "person.id")
71
- * .where("pet.is_favorite", "=", true),
72
- * ).as("favorite_pet"),
73
- * ])
74
- * .execute();
75
- *
76
- * result[0]?.id;
77
- * result[0]?.favorite_pet?.pet_id;
78
- * result[0]?.favorite_pet?.name;
77
+ * import {
78
+ * createQueryBuilder,
79
+ * evoluJsonObjectFrom,
80
+ * id,
81
+ * NonEmptyTrimmedString100,
82
+ * SqliteBoolean,
83
+ * } from "@evolu/common";
84
+ *
85
+ * const PersonId = id("Person");
86
+ * const Schema = {
87
+ * person: { id: PersonId },
88
+ * pet: {
89
+ * id: id("Pet"),
90
+ * name: NonEmptyTrimmedString100,
91
+ * personId: PersonId,
92
+ * isFavorite: SqliteBoolean,
93
+ * },
94
+ * };
95
+ * const createQuery = createQueryBuilder(Schema);
96
+ * const people = createQuery((db) =>
97
+ * db
98
+ * .selectFrom("person")
99
+ * .select(["person.id"])
100
+ * .select((eb) => [
101
+ * evoluJsonObjectFrom(
102
+ * eb
103
+ * .selectFrom("pet")
104
+ * .select(["pet.id as petId", "pet.name"])
105
+ * .whereRef("pet.personId", "=", "person.id")
106
+ * .where("pet.isFavorite", "=", 1),
107
+ * ).as("favoritePet"),
108
+ * ]),
109
+ * );
110
+ *
111
+ * expectTypeOf<typeof people.Row.favoritePet>().toEqualTypeOf<{
112
+ * petId: typeof Schema.pet.id.Output;
113
+ * name: NonEmptyTrimmedString100 | null;
114
+ * } | null>();
79
115
  * ```
80
116
  */
81
117
  export const evoluJsonObjectFrom = (expr) => kyselySqlBuilder `(select ${kyselySqlBuilder.lit(kyselyJsonIdentifier)} || json_object(${kyselySqlBuilder.join(getSqliteJsonObjectArgs(expr.toOperationNode(), "obj"))}) from ${expr} as obj)`;
@@ -91,24 +127,42 @@ export const evoluJsonObjectFrom = (expr) => kyselySqlBuilder `(select ${kyselyS
91
127
  * ### Example
92
128
  *
93
129
  * ```ts
94
- * import { evoluJsonBuildObject, kyselySql } from "@evolu/common";
95
- *
96
- * const result = await db
97
- * .selectFrom("person")
98
- * .select((eb) => [
99
- * "id",
100
- * evoluJsonBuildObject({
101
- * first: eb.ref("first_name"),
102
- * last: eb.ref("last_name"),
103
- * full: kyselySql<string>`first_name || ' ' || last_name`,
104
- * }).as("name"),
105
- * ])
106
- * .execute();
107
- *
108
- * result[0]?.id;
109
- * result[0]?.name.first;
110
- * result[0]?.name.last;
111
- * result[0]?.name.full;
130
+ * import {
131
+ * createQueryBuilder,
132
+ * evoluJsonBuildObject,
133
+ * id,
134
+ * kyselySql,
135
+ * NonEmptyTrimmedString100,
136
+ * } from "@evolu/common";
137
+ *
138
+ * const Schema = {
139
+ * person: {
140
+ * id: id("Person"),
141
+ * firstName: NonEmptyTrimmedString100,
142
+ * lastName: NonEmptyTrimmedString100,
143
+ * },
144
+ * };
145
+ * const createQuery = createQueryBuilder(Schema);
146
+ * const people = createQuery((db) =>
147
+ * db
148
+ * .selectFrom("person")
149
+ * .select("person.id")
150
+ * .select((eb) => [
151
+ * evoluJsonBuildObject({
152
+ * first: eb.ref("firstName"),
153
+ * last: eb.ref("lastName"),
154
+ * full: kyselySql<string>`${eb.ref("firstName")} || ' ' || ${eb.ref(
155
+ * "lastName",
156
+ * )}`,
157
+ * }).as("name"),
158
+ * ]),
159
+ * );
160
+ *
161
+ * expectTypeOf<typeof people.Row.name>().toEqualTypeOf<{
162
+ * first: NonEmptyTrimmedString100 | null;
163
+ * last: NonEmptyTrimmedString100 | null;
164
+ * full: string;
165
+ * }>();
112
166
  * ```
113
167
  */
114
168
  export const evoluJsonBuildObject = (obj) => kyselySqlBuilder `${kyselySqlBuilder.lit(kyselyJsonIdentifier)} || json_object(${kyselySqlBuilder.join(Object.keys(obj).flatMap((k) => [kyselySqlBuilder.lit(k), obj[k]]))})`;
@@ -219,7 +273,7 @@ const parse = (obj) => {
219
273
  return obj;
220
274
  };
221
275
  const parseObject = (obj) => {
222
- const result = createRecord();
276
+ const result = createMutableRecord();
223
277
  for (const key in obj) {
224
278
  result[key] = parse(obj[key]);
225
279
  }
@@ -3,12 +3,12 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { TimingSafeEqualDep } from "../Crypto.js";
7
- import type { SqliteDep } from "../Sqlite.js";
8
- import { Name } from "../Type.js";
9
- import { type Awaitable } from "../Types.js";
10
- import { OwnerId } from "./Owner.js";
11
- import type { SqliteStorageDeps, Storage, StorageConfig } from "./Storage.js";
6
+ import type { TimingSafeEqualDep } from "../Crypto.ts";
7
+ import type { SqliteDep } from "../Sqlite.ts";
8
+ import { Name } from "../Type.ts";
9
+ import { type Awaitable } from "../Types.ts";
10
+ import { OwnerId } from "./Owner.ts";
11
+ import type { SqliteStorageDeps, Storage, StorageConfig } from "./Storage.ts";
12
12
  export interface RelayConfig extends StorageConfig {
13
13
  /**
14
14
  * The relay name.
@@ -45,20 +45,50 @@ export interface RelayConfig extends StorageConfig {
45
45
  * ### Example
46
46
  *
47
47
  * ```ts
48
- * // Client
48
+ * import {
49
+ * AppName,
50
+ * createAppOwner,
51
+ * createEvolu,
52
+ * createOwnerWebSocketTransport,
53
+ * createOwnerSecret,
54
+ * createRandomBytes,
55
+ * id,
56
+ * type AnyTask,
57
+ * } from "@evolu/common";
58
+ * import type { RelayConfig } from "@evolu/common/local-first";
59
+ *
60
+ * // Create once, persist the mnemonic securely, and restore it on later runs.
61
+ * const appOwner = createAppOwner(
62
+ * createOwnerSecret({ randomBytes: createRandomBytes() }),
63
+ * );
64
+ * // Client: include the OwnerId so the relay can authenticate the connection.
49
65
  * const transport = createOwnerWebSocketTransport({
50
66
  * url: "wss://relay.evolu.dev",
51
- * ownerId: owner.id,
67
+ * ownerId: appOwner.id,
52
68
  * });
53
69
  *
54
- * const evolu = createEvolu(deps)(Schema, {
55
- * transports: [transport],
56
- * });
70
+ * const createTodoEvolu = createEvolu(
71
+ * { todo: { id: id("Todo") } },
72
+ * {
73
+ * appName: AppName.orThrow("AuthenticatedRelayExample"),
74
+ * appOwner,
75
+ * transports: [transport],
76
+ * },
77
+ * );
78
+ * expectTypeOf(createTodoEvolu).toExtend<AnyTask>();
57
79
  *
80
+ * // Relay: accept owners allowed by the app's access policy.
81
+ * type IsOwnerAllowed = NonNullable<RelayConfig["isOwnerAllowed"]>;
82
+ * const allowedOwnerIds = new Set([appOwner.id]);
83
+ * const isOwnerAllowed: IsOwnerAllowed = (ownerId, { signal }) =>
84
+ * !signal.aborted && allowedOwnerIds.has(ownerId);
58
85
  *
59
- * // Relay
60
- * isOwnerAllowed: (ownerId, { signal: _signal }) =>
61
- * Promise.resolve(ownerId === "6jy_2F4RT5qqeLgJ14_dnQ"),
86
+ * expect(
87
+ * isOwnerAllowed(appOwner.id, {
88
+ * signal: new AbortController().signal,
89
+ * }),
90
+ * ).toBe(true);
91
+ * expect(transport.url).toContain(`ownerId=${appOwner.id}`);
62
92
  * ```
63
93
  */
64
94
  readonly isOwnerAllowed?: (ownerId: OwnerId, options: {
@@ -1 +1 @@
1
- {"version":3,"file":"Relay.d.ts","sourceRoot":"","sources":["../../../src/local-first/Relay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,IAAI,EAAsC,MAAM,YAAY,CAAC;AACtE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,OAAO,EACP,aAAa,EAEd,MAAM,cAAc,CAAC;AAStB,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACP,iEAAiE;QACjE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;KAC9B,KACE,SAAS,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,KAAM,SAAQ,eAAe;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,wBAAwB,GAClC,MAAM,iBAAiB,GAAG,kBAAkB,MAC5C,QAAQ,aAAa,KAAG,OAuLxB,CAAC;AAEJ,eAAO,MAAM,wBAAwB,GAAI,MAAM,SAAS,KAAG,IAuB1D,CAAC"}
1
+ {"version":3,"file":"Relay.d.ts","sourceRoot":"","sources":["../../../src/local-first/Relay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,IAAI,EAAsC,MAAM,YAAY,CAAC;AACtE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,OAAO,EACP,aAAa,EAEd,MAAM,cAAc,CAAC;AAStB,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACP,iEAAiE;QACjE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;KAC9B,KACE,SAAS,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,KAAM,SAAQ,eAAe;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,wBAAwB,SAC5B,iBAAiB,GAAG,kBAAkB,cACpC,aAAa,KAAG,OAuLxB,CAAC;AAEJ,eAAO,MAAM,wBAAwB,SAAU,SAAS,KAAG,IAuB1D,CAAC"}
@@ -4,16 +4,16 @@
4
4
  * @module
5
5
  */
6
6
  import * as Kysely from "kysely";
7
- import { type ReadonlyRecord } from "../Object.js";
8
- import { SqliteBoolean, type SqliteDep, type SqliteQueryOptions, type SqliteSchema, SqliteValue } from "../Sqlite.js";
9
- import type { InferType } from "../Type.js";
10
- import { type Id, IdBytes, type StandardSchemaV1 } from "../Type.js";
11
- import type { Simplify } from "../Types.js";
12
- import { OwnerId } from "./Owner.js";
13
- import type { Query, Row } from "./Query.js";
14
- import type { DbChange } from "./Storage.js";
15
- import { TimestampBytes } from "./Timestamp.js";
16
- /** Any {@link StandardSchemaV1}. */
7
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
8
+ import { type ReadonlyRecord } from "../Object.ts";
9
+ import { SqliteBoolean, type SqliteDep, type SqliteQueryOptions, type SqliteSchema, SqliteValue } from "../Sqlite.ts";
10
+ import { DateIso, type Id, IdBytes, type InferType, Null, type ObjectType, type UnionType } from "../Type.ts";
11
+ import type { CompileTimeError, Simplify } from "../Types.ts";
12
+ import { OwnerId } from "./Owner.ts";
13
+ import type { Query, Row } from "./Query.ts";
14
+ import type { DbChange } from "./Storage.ts";
15
+ import { TimestampBytes } from "./Timestamp.ts";
16
+ /** Any Standard Schema V1 declaration. */
17
17
  export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
18
18
  /**
19
19
  * Defines the schema of an Evolu database.
@@ -27,26 +27,36 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
27
27
  * ### Example
28
28
  *
29
29
  * ```ts
30
- * // With Evolu Type
30
+ * import * as z from "zod";
31
+ * import {
32
+ * id,
33
+ * NonEmptyTrimmedString100,
34
+ * nullOr,
35
+ * SqliteBoolean,
36
+ * } from "@evolu/common";
37
+ *
38
+ * // Evolu Type
31
39
  * const TodoId = id("Todo");
32
- * type TodoId = typeof TodoId.Type;
40
+ * type TodoId = typeof TodoId.Output;
33
41
  *
34
42
  * const Schema = {
35
43
  * todo: {
36
44
  * id: TodoId,
37
- * title: NonEmptyString100,
45
+ * title: NonEmptyTrimmedString100,
38
46
  * isCompleted: nullOr(SqliteBoolean),
39
47
  * },
40
48
  * };
49
+ * expectOk(Schema.todo.title.fromUnknown("Write docs"), "Write docs");
41
50
  *
42
- * // With Zod (or any Standard Schema library)
43
- * const Schema = {
51
+ * // Zod, or another Standard Schema library
52
+ * const ZodSchema = {
44
53
  * todo: {
45
- * id: TodoId, // Evolu id() for branded IDs
54
+ * id: TodoId,
46
55
  * title: z.string().min(1).max(100),
47
56
  * isCompleted: z.union([z.literal(0), z.literal(1)]).nullable(),
48
57
  * },
49
58
  * };
59
+ * expect(ZodSchema.todo.title.safeParse("Write docs").success).toBe(true);
50
60
  * ```
51
61
  */
52
62
  export type EvoluSchema = ReadonlyRecord<string, TableSchema>;
@@ -89,7 +99,7 @@ export type CreateQuery<S extends EvoluSchema> = <R extends Row>(queryCallback:
89
99
  readonly column: string;
90
100
  readonly value: SqliteValue;
91
101
  };
92
- }>, "selectFrom" | "fn" | "with" | "withRecursive">) => Kysely.SelectQueryBuilder<any, any, R>, options?: SqliteQueryOptions) => Query<S, Simplify<R>>;
102
+ }>, "selectFrom" | "fn" | "with" | "withRecursive">) => Kysely.SelectQueryBuilder<any, any, R>, options?: SqliteQueryOptions) => Query<S, Kysely.Simplify<R>>;
93
103
  /**
94
104
  * System columns that are implicitly defined by Evolu.
95
105
  *
@@ -99,11 +109,11 @@ export type CreateQuery<S extends EvoluSchema> = <R extends Row>(queryCallback:
99
109
  * mark rows as deleted.
100
110
  * - `ownerId`: Represents ownership and logically partitions the database.
101
111
  */
102
- export declare const SystemColumns: import("../Type.js").ObjectType<{
103
- createdAt: import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
104
- updatedAt: import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
105
- isDeleted: import("../Type.js").UnionType<[import("../Type.js").Type<"Null", null, null, import("../Type.js").NullError, null, import("../Type.js").NullError>, import("../Type.js").UnionType<[import("../Type.js").LiteralType<0>, import("../Type.js").LiteralType<1>]>]>;
106
- ownerId: import("../Type.js").BrandType<import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "Id", import("../Type.js").IdError, import("../Type.js").StringError>, "OwnerId", import("../Type.js").BrandWithoutRefineError<"OwnerId", import("../Type.js").StringError | import("../Type.js").IdError>, never>;
112
+ export declare const SystemColumns: ObjectType<{
113
+ readonly createdAt: typeof DateIso;
114
+ readonly updatedAt: typeof DateIso;
115
+ readonly isDeleted: UnionType<readonly [typeof SqliteBoolean, typeof Null]>;
116
+ readonly ownerId: typeof OwnerId;
107
117
  }>;
108
118
  export interface SystemColumns extends InferType<typeof SystemColumns> {
109
119
  }
@@ -149,24 +159,50 @@ export interface MutationOptions {
149
159
  * ### Example
150
160
  *
151
161
  * ```ts
152
- * // Partition your own data by project (derived from your AppOwner)
162
+ * import {
163
+ * createAppOwner,
164
+ * createOwnerSecret,
165
+ * createRandomBytes,
166
+ * createSharedOwner,
167
+ * deriveShardOwner,
168
+ * id,
169
+ * NonEmptyTrimmedString100,
170
+ * type Evolu,
171
+ * } from "@evolu/common";
172
+ *
173
+ * const Schema = {
174
+ * task: { id: id("Task"), title: NonEmptyTrimmedString100 },
175
+ * comment: { id: id("Comment"), text: NonEmptyTrimmedString100 },
176
+ * };
177
+ * const randomBytes = createRandomBytes();
178
+ * // Create once, persist the mnemonic securely, and restore it on later runs.
179
+ * const appOwner = createAppOwner(createOwnerSecret({ randomBytes }));
153
180
  * const projectOwner = deriveShardOwner(appOwner, [
154
181
  * "project",
155
- * projectId,
182
+ * "project-1",
156
183
  * ]);
157
- * evolu.insert(
158
- * "task",
159
- * { title: "Task 1" },
160
- * { ownerId: projectOwner.id },
184
+ * const sharedOwner = createSharedOwner(
185
+ * createOwnerSecret({ randomBytes }),
161
186
  * );
162
187
  *
163
- * // Collaborative data (independent owner shared with others)
164
- * const sharedOwner = createSharedOwner(sharedSecret);
165
- * evolu.insert(
166
- * "comment",
167
- * { text: "Hello" },
168
- * { ownerId: sharedOwner.id },
169
- * );
188
+ * const insertOwnedRows = (evolu: Evolu<typeof Schema>): void => {
189
+ * // Partition app data by project.
190
+ * evolu.insert(
191
+ * "task",
192
+ * { title: NonEmptyTrimmedString100.orThrow("Task 1") },
193
+ * { ownerId: projectOwner.id },
194
+ * );
195
+ *
196
+ * // Put collaborative data under a shared owner.
197
+ * evolu.insert(
198
+ * "comment",
199
+ * { text: NonEmptyTrimmedString100.orThrow("Hello") },
200
+ * { ownerId: sharedOwner.id },
201
+ * );
202
+ * };
203
+ *
204
+ * expect(projectOwner.type).toBe("ShardOwner");
205
+ * expect(sharedOwner.type).toBe("SharedOwner");
170
206
  * ```
171
207
  */
172
208
  readonly ownerId?: OwnerId;
@@ -207,7 +243,7 @@ export type ValidateIdColumnType<S extends EvoluSchema> = keyof S extends infer
207
243
  export type ValidateNoSystemColumns<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? ColumnName extends "createdAt" | "updatedAt" | "isDeleted" | "ownerId" ? SchemaValidationError<`Table "${TableName & string}" uses system column name "${ColumnName & string}". System columns (createdAt, updatedAt, isDeleted, ownerId) are added automatically.`> : never : never : never : never : never;
208
244
  export type ValidateColumnTypes<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName][ColumnName]> extends SqliteValue ? never : SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string, number, Uint8Array, or null).`> : never : never : never : never;
209
245
  /** Schema validation error that shows clear, readable messages */
210
- export type SchemaValidationError<Message extends string> = `❌ Schema Error: ${Message}`;
246
+ export type SchemaValidationError<Message extends string> = CompileTimeError<"Schema", Message>;
211
247
  /** Makes columns whose output type includes `null` optional. */
212
248
  export type NullableColumnsToOptional<T extends TableSchema> = {
213
249
  readonly [K in RequiredColumnKeys<T>]: StandardSchemaV1.InferOutput<T[K]>;
@@ -235,21 +271,36 @@ export declare const evoluSchemaToSqliteSchema: <S extends EvoluSchema>(schema:
235
271
  * ### Example
236
272
  *
237
273
  * ```ts
274
+ * import {
275
+ * createQueryBuilder,
276
+ * id,
277
+ * NonEmptyTrimmedString100,
278
+ * nullOr,
279
+ * SqliteBoolean,
280
+ * } from "@evolu/common";
281
+ *
282
+ * const TodoId = id("Todo");
283
+ * type TodoId = typeof TodoId.Output;
238
284
  * const Schema = {
239
285
  * todo: {
240
- * id: id("Todo"),
241
- * title: NonEmptyString100,
286
+ * id: TodoId,
287
+ * title: NonEmptyTrimmedString100,
242
288
  * isCompleted: nullOr(SqliteBoolean),
243
289
  * },
244
290
  * };
245
291
  *
246
- * // Create a typed query builder (once per schema)
292
+ * // Create one typed builder per schema and reuse it for every query.
247
293
  * const createQuery = createQueryBuilder(Schema);
248
- *
249
- * // Use it for all queries
250
294
  * const todosQuery = createQuery((db) =>
251
295
  * db.selectFrom("todo").select(["id", "title", "isCompleted"]),
252
296
  * );
297
+ *
298
+ * expectTypeOf<typeof todosQuery.Row>().toEqualTypeOf<{
299
+ * id: TodoId;
300
+ * title: NonEmptyTrimmedString100 | null;
301
+ * isCompleted: SqliteBoolean | null;
302
+ * }>();
303
+ * expect(todosQuery).toBeTypeOf("string");
253
304
  * ```
254
305
  */
255
306
  export declare const createQueryBuilder: <S extends EvoluSchema>(_schema: S) => CreateQuery<S>;
@@ -1 +1 @@
1
- {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,10 @@
4
4
  * @module
5
5
  */
6
6
  import * as Kysely from "kysely";
7
- import { getProperty, mapObject } from "../Object.js";
7
+ import { assertNonNullable } from "../Assert.js";
8
+ import { getOwnProp, mapObject } from "../Object.js";
8
9
  import { eqSqliteIndex, getSqliteSchema, sql, sqliteQueryToSqliteQueryString, SqliteBoolean, SqliteValue, } from "../Sqlite.js";
9
- import { DateIso, IdBytes, nullOr, object, } from "../Type.js";
10
+ import { DateIso, IdBytes, Null, nullOr, object, } from "../Type.js";
10
11
  import { OwnerId } from "./Owner.js";
11
12
  import { TimestampBytes } from "./Timestamp.js";
12
13
  /**
@@ -53,21 +54,36 @@ export const evoluSchemaToSqliteSchema = (schema, indexesConfig) => {
53
54
  * ### Example
54
55
  *
55
56
  * ```ts
57
+ * import {
58
+ * createQueryBuilder,
59
+ * id,
60
+ * NonEmptyTrimmedString100,
61
+ * nullOr,
62
+ * SqliteBoolean,
63
+ * } from "@evolu/common";
64
+ *
65
+ * const TodoId = id("Todo");
66
+ * type TodoId = typeof TodoId.Output;
56
67
  * const Schema = {
57
68
  * todo: {
58
- * id: id("Todo"),
59
- * title: NonEmptyString100,
69
+ * id: TodoId,
70
+ * title: NonEmptyTrimmedString100,
60
71
  * isCompleted: nullOr(SqliteBoolean),
61
72
  * },
62
73
  * };
63
74
  *
64
- * // Create a typed query builder (once per schema)
75
+ * // Create one typed builder per schema and reuse it for every query.
65
76
  * const createQuery = createQueryBuilder(Schema);
66
- *
67
- * // Use it for all queries
68
77
  * const todosQuery = createQuery((db) =>
69
78
  * db.selectFrom("todo").select(["id", "title", "isCompleted"]),
70
79
  * );
80
+ *
81
+ * expectTypeOf<typeof todosQuery.Row>().toEqualTypeOf<{
82
+ * id: TodoId;
83
+ * title: NonEmptyTrimmedString100 | null;
84
+ * isCompleted: SqliteBoolean | null;
85
+ * }>();
86
+ * expect(todosQuery).toBeTypeOf("string");
71
87
  * ```
72
88
  */
73
89
  export const createQueryBuilder = (_schema) => {
@@ -86,7 +102,8 @@ export const ensureSqliteSchema = (deps) => (newSchema, currentSchema) => {
86
102
  const queries = [];
87
103
  currentSchema ??= getEvoluSqliteSchema(deps)();
88
104
  for (const [tableName, newColumns] of Object.entries(newSchema.tables)) {
89
- const currentColumns = getProperty(currentSchema.tables, tableName);
105
+ assertNonNullable(newColumns);
106
+ const currentColumns = getOwnProp(currentSchema.tables, tableName);
90
107
  if (!currentColumns) {
91
108
  queries.push(createAppTable(tableName, newColumns));
92
109
  }