@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
package/src/Test.ts CHANGED
@@ -1,171 +1,21 @@
1
1
  /**
2
- * Test utilities for deterministic testing.
2
+ * Cross-module test utilities for deterministic testing.
3
+ *
4
+ * Test helpers are usually colocated with the code they test. Helpers that
5
+ * cannot be colocated because they would create dependency cycles belong here.
3
6
  *
4
7
  * @module
5
8
  */
6
9
 
7
- import type { Brand } from "./Brand.js";
8
- import {
9
- testCreateConsole,
10
- type TestConsole,
11
- type TestConsoleDep,
12
- } from "./Console.js";
13
- import { testCreateRandomBytes, type RandomBytes } from "./Crypto.js";
14
- import {
15
- testCreateRandom,
16
- testCreateRandomLib,
17
- type Random,
18
- type RandomLibDep,
19
- } from "./Random.js";
20
- import { createRun, type Run, type RunDefaultDeps } from "./Task.js";
21
- import {
22
- minMillis,
23
- setTimeout,
24
- testCreateTime,
25
- type Duration,
26
- type TestTime,
27
- type TestTimeDep,
28
- } from "./Time.js";
29
- import { createId, type Id } from "./Type.js";
10
+ import type { Brand } from "./Brand.ts";
11
+ import { testCreateRandomBytes } from "./Crypto.ts";
12
+ import { testCreateRandomLib } from "./Random.ts";
13
+ import { createId, type Id } from "./Type.ts";
30
14
 
31
15
  export type TestCreateId = <B extends string = never>() => [B] extends [never]
32
16
  ? Id
33
17
  : Id & Brand<B>;
34
18
 
35
- /**
36
- * Cheap deterministic baseline deps for tests.
37
- *
38
- * `TestDeps` includes test-friendly replacements for {@link RunDefaultDeps},
39
- * such as {@link TestConsole} and {@link TestTime}, plus extra helpers commonly
40
- * useful in tests and fixtures, such as `randomLib` (only that for now).
41
- *
42
- * Use it directly for synchronous test setup, fixtures, and helpers. It is also
43
- * intentionally the base deps used by {@link testCreateRun}.
44
- */
45
- export type TestDeps = Omit<RunDefaultDeps, "console" | "time"> &
46
- TestConsoleDep &
47
- TestTimeDep &
48
- RandomLibDep;
49
-
50
- /**
51
- * Creates deterministic {@link TestDeps}.
52
- *
53
- * Each call creates fresh instances, so tests don't share state.
54
- *
55
- * Includes these deps:
56
- *
57
- * - `console`: {@link TestConsole}
58
- * - `random`: {@link Random}
59
- * - `randomLib`: seeded `random` package instance
60
- * - `randomBytes`: {@link RandomBytes}
61
- * - `time`: {@link TestTime}
62
- *
63
- * Use this for synchronous code that accepts deps directly. For tests that run
64
- * Tasks, use {@link testCreateRun}.
65
- *
66
- * ### Example
67
- *
68
- * ```ts
69
- * test("Callbacks with no argument", () => {
70
- * const deps = testCreateDeps();
71
- * const callbacks = createCallbacks(deps);
72
- *
73
- * let called = false;
74
- * const id = callbacks.register(() => {
75
- * called = true;
76
- * });
77
- *
78
- * callbacks.execute(id);
79
- * expect(called).toBe(true);
80
- * });
81
- * ```
82
- */
83
- export const testCreateDeps = (options?: {
84
- readonly seed?: string;
85
- }): TestDeps => {
86
- const seed = options?.seed ?? "evolu";
87
- const console = testCreateConsole();
88
- const random = testCreateRandom(seed);
89
- const randomLib = testCreateRandomLib(seed);
90
- const randomBytes = testCreateRandomBytes({ randomLib });
91
- const time = testCreateTime();
92
- return { console, randomBytes, random, randomLib, time };
93
- };
94
-
95
- /**
96
- * Creates a test {@link Run} with deterministic default deps or optional custom
97
- * deps.
98
- *
99
- * Use this as the default composition root in tests. Each call creates fresh
100
- * {@link TestDeps} via {@link testCreateDeps}, then merges any provided custom
101
- * deps.
102
- *
103
- * ### Example
104
- *
105
- * ```ts
106
- * // Default TestTime
107
- * await using run = testCreateRun();
108
- * const fiber = run(sleep("1s"));
109
- * run.deps.time.advance("1s");
110
- * await fiber;
111
- *
112
- * // For a single test, create the dependency using the Run.
113
- * await using run = testCreateRun();
114
- * await using foo = await run.orThrow(createFoo());
115
- * await run.orThrow(taskThatNeedsFoo, { foo });
116
- *
117
- * // If multiple tests need the same setup, create a disposable helper.
118
- * // Then `await using setup` disposes everything the helper owns.
119
- * const setupFoo = async () => {
120
- * await using disposer = new AsyncDisposableStack();
121
- * const run = disposer.use(testCreateRun());
122
- * const foo = disposer.use(await run.orThrow(createFoo()));
123
- * const runWithFoo = disposer.use(run.create({ ...run.deps, foo }));
124
- * const disposables = disposer.move();
125
- *
126
- * // Return whatever the tests need: a Run with the dependency,
127
- * // the dependency itself, or both.
128
- * return {
129
- * run: runWithFoo,
130
- * foo,
131
- * [Symbol.asyncDispose]: () => disposables.disposeAsync(),
132
- * };
133
- * };
134
- *
135
- * await using setup = await setupFoo();
136
- * const { run, foo } = setup;
137
- * expect(run.deps.foo).toBe(foo);
138
- * ```
139
- *
140
- * Name reusable setup helpers after what they set up:
141
- *
142
- * - `setupFoo` for reusable test setup for `Foo`
143
- * - `testSetupFoo` when a library module exports the helper as part of its public
144
- * test API, e.g. `testSetupSqlite`.
145
- */
146
- export function testCreateRun(): Run<TestDeps>;
147
-
148
- /** With custom dependencies merged into {@link TestDeps}. */
149
- export function testCreateRun<D>(deps: D): Run<TestDeps & D>;
150
-
151
- export function testCreateRun<D>(deps?: D): Run<TestDeps & D> {
152
- const defaults = testCreateDeps();
153
- return createRun<TestDeps & D>({ ...defaults, ...deps } as TestDeps & D);
154
- }
155
-
156
- /**
157
- * Returns a Promise that resolves after a macrotask delay.
158
- *
159
- * Use this to model a real async boundary in a test double, for example an
160
- * async disposer that should not complete in the same turn.
161
- *
162
- * Avoid using it to coordinate assertions. Waiting for a macrotask tends to
163
- * make tests indirect and brittle.
164
- */
165
- export const testWaitForMacrotask = (
166
- duration: Duration = minMillis,
167
- ): Promise<void> => setTimeout(duration);
168
-
169
19
  /**
170
20
  * Creates a deterministic `createId` helper.
171
21
  *
@@ -181,13 +31,18 @@ export const testWaitForMacrotask = (
181
31
  * ### Example
182
32
  *
183
33
  * ```ts
184
- * test("creates stable ids", () => {
185
- * const createId = testCreateId();
34
+ * import { testCreateId, type Brand, type Id } from "@evolu/common";
35
+ *
36
+ * const createId = testCreateId();
37
+ *
38
+ * const callbackId = createId();
39
+ * const secondCallbackId = createId();
40
+ * const todoId = createId<"Todo">();
41
+ * expect(new Set([callbackId, secondCallbackId, todoId]).size).toBe(3);
186
42
  *
187
- * const callbackId = createId();
188
- * const secondCallbackId = createId();
189
- * const todoId = createId<"Todo">();
190
- * });
43
+ * const replayCreateId = testCreateId();
44
+ * expect(replayCreateId()).toBe(callbackId);
45
+ * expectTypeOf(todoId).toEqualTypeOf<Id & Brand<"Todo">>();
191
46
  * ```
192
47
  */
193
48
  export const testCreateId = (): TestCreateId => {
@@ -195,7 +50,5 @@ export const testCreateId = (): TestCreateId => {
195
50
  randomLib: testCreateRandomLib(),
196
51
  });
197
52
 
198
- return <B extends string = never>(): [B] extends [never]
199
- ? Id
200
- : Id & Brand<B> => createId<B>({ randomBytes });
53
+ return (() => createId<never>({ randomBytes })) as TestCreateId;
201
54
  };