@evolu/common 8.5.0 → 8.6.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 (328) hide show
  1. package/dist/src/Array.d.ts +170 -97
  2. package/dist/src/Array.d.ts.map +1 -1
  3. package/dist/src/Array.js +67 -42
  4. package/dist/src/Assert.d.ts +233 -30
  5. package/dist/src/Assert.d.ts.map +1 -1
  6. package/dist/src/Assert.js +150 -30
  7. package/dist/src/BigInt.d.ts +3 -3
  8. package/dist/src/BigInt.js +3 -3
  9. package/dist/src/Brand.d.ts +7 -7
  10. package/dist/src/Buffer.d.ts +12 -4
  11. package/dist/src/Buffer.d.ts.map +1 -1
  12. package/dist/src/Cache.d.ts +8 -3
  13. package/dist/src/Cache.d.ts.map +1 -1
  14. package/dist/src/Cache.js +8 -3
  15. package/dist/src/Callbacks.d.ts +8 -4
  16. package/dist/src/Callbacks.d.ts.map +1 -1
  17. package/dist/src/Console.d.ts +45 -30
  18. package/dist/src/Console.d.ts.map +1 -1
  19. package/dist/src/Console.js +32 -21
  20. package/dist/src/Crypto.d.ts +13 -8
  21. package/dist/src/Crypto.d.ts.map +1 -1
  22. package/dist/src/Crypto.js +6 -3
  23. package/dist/src/Eq.d.ts +107 -58
  24. package/dist/src/Eq.d.ts.map +1 -1
  25. package/dist/src/Eq.js +308 -112
  26. package/dist/src/Function.d.ts +54 -24
  27. package/dist/src/Function.d.ts.map +1 -1
  28. package/dist/src/Function.js +34 -17
  29. package/dist/src/Http.d.ts +52 -19
  30. package/dist/src/Http.d.ts.map +1 -1
  31. package/dist/src/Identicon.d.ts +9 -4
  32. package/dist/src/Identicon.d.ts.map +1 -1
  33. package/dist/src/Identicon.js +9 -4
  34. package/dist/src/LockManager.d.ts +12 -10
  35. package/dist/src/LockManager.d.ts.map +1 -1
  36. package/dist/src/Lookup.d.ts +4 -2
  37. package/dist/src/Lookup.d.ts.map +1 -1
  38. package/dist/src/Lookup.js +4 -2
  39. package/dist/src/Number.d.ts +28 -24
  40. package/dist/src/Number.d.ts.map +1 -1
  41. package/dist/src/Number.js +16 -17
  42. package/dist/src/Object.d.ts +89 -47
  43. package/dist/src/Object.d.ts.map +1 -1
  44. package/dist/src/Object.js +88 -41
  45. package/dist/src/Option.d.ts +14 -5
  46. package/dist/src/Option.d.ts.map +1 -1
  47. package/dist/src/Option.js +14 -5
  48. package/dist/src/Order.d.ts +12 -12
  49. package/dist/src/Order.js +12 -12
  50. package/dist/src/Platform.d.ts +2 -2
  51. package/dist/src/Random.d.ts +7 -4
  52. package/dist/src/Random.d.ts.map +1 -1
  53. package/dist/src/Redacted.d.ts +13 -6
  54. package/dist/src/Redacted.d.ts.map +1 -1
  55. package/dist/src/Redacted.js +4 -2
  56. package/dist/src/Ref.d.ts +4 -4
  57. package/dist/src/Relation.d.ts +5 -7
  58. package/dist/src/Relation.d.ts.map +1 -1
  59. package/dist/src/Resource.d.ts +27 -12
  60. package/dist/src/Resource.d.ts.map +1 -1
  61. package/dist/src/Result.d.ts +258 -114
  62. package/dist/src/Result.d.ts.map +1 -1
  63. package/dist/src/Result.js +71 -34
  64. package/dist/src/Schedule.d.ts +233 -116
  65. package/dist/src/Schedule.d.ts.map +1 -1
  66. package/dist/src/Schedule.js +204 -110
  67. package/dist/src/Set.d.ts +43 -24
  68. package/dist/src/Set.d.ts.map +1 -1
  69. package/dist/src/Set.js +25 -13
  70. package/dist/src/Sqlite.d.ts +4 -4
  71. package/dist/src/Sqlite.d.ts.map +1 -1
  72. package/dist/src/Sqlite.js +9 -8
  73. package/dist/src/Task.d.ts +441 -212
  74. package/dist/src/Task.d.ts.map +1 -1
  75. package/dist/src/Task.js +238 -115
  76. package/dist/src/Test.d.ts +10 -4
  77. package/dist/src/Test.d.ts.map +1 -1
  78. package/dist/src/Test.js +10 -4
  79. package/dist/src/Time.d.ts +27 -17
  80. package/dist/src/Time.d.ts.map +1 -1
  81. package/dist/src/Time.js +16 -6
  82. package/dist/src/Type.d.ts +1096 -387
  83. package/dist/src/Type.d.ts.map +1 -1
  84. package/dist/src/Type.js +1046 -372
  85. package/dist/src/Types.d.ts +95 -40
  86. package/dist/src/Types.d.ts.map +1 -1
  87. package/dist/src/Types.js +13 -4
  88. package/dist/src/WebSocket.d.ts +14 -6
  89. package/dist/src/WebSocket.d.ts.map +1 -1
  90. package/dist/src/Worker.d.ts +10 -6
  91. package/dist/src/Worker.d.ts.map +1 -1
  92. package/dist/src/intl/_en.d.ts +3 -1
  93. package/dist/src/intl/_en.d.ts.map +1 -1
  94. package/dist/src/intl/_en.js +17 -3
  95. package/dist/src/intl/ar.d.ts +3 -1
  96. package/dist/src/intl/ar.d.ts.map +1 -1
  97. package/dist/src/intl/ar.js +15 -2
  98. package/dist/src/intl/bn.d.ts +3 -1
  99. package/dist/src/intl/bn.d.ts.map +1 -1
  100. package/dist/src/intl/bn.js +16 -3
  101. package/dist/src/intl/ca.d.ts +3 -1
  102. package/dist/src/intl/ca.d.ts.map +1 -1
  103. package/dist/src/intl/ca.js +16 -3
  104. package/dist/src/intl/cs.d.ts +3 -1
  105. package/dist/src/intl/cs.d.ts.map +1 -1
  106. package/dist/src/intl/cs.js +16 -3
  107. package/dist/src/intl/da.d.ts +3 -1
  108. package/dist/src/intl/da.d.ts.map +1 -1
  109. package/dist/src/intl/da.js +16 -3
  110. package/dist/src/intl/de.d.ts +3 -1
  111. package/dist/src/intl/de.d.ts.map +1 -1
  112. package/dist/src/intl/de.js +16 -3
  113. package/dist/src/intl/el.d.ts +3 -1
  114. package/dist/src/intl/el.d.ts.map +1 -1
  115. package/dist/src/intl/el.js +16 -3
  116. package/dist/src/intl/es.d.ts +3 -1
  117. package/dist/src/intl/es.d.ts.map +1 -1
  118. package/dist/src/intl/es.js +16 -3
  119. package/dist/src/intl/fa.d.ts +3 -1
  120. package/dist/src/intl/fa.d.ts.map +1 -1
  121. package/dist/src/intl/fa.js +16 -3
  122. package/dist/src/intl/fi.d.ts +3 -1
  123. package/dist/src/intl/fi.d.ts.map +1 -1
  124. package/dist/src/intl/fi.js +16 -3
  125. package/dist/src/intl/fil.d.ts +3 -1
  126. package/dist/src/intl/fil.d.ts.map +1 -1
  127. package/dist/src/intl/fil.js +16 -3
  128. package/dist/src/intl/fr.d.ts +3 -1
  129. package/dist/src/intl/fr.d.ts.map +1 -1
  130. package/dist/src/intl/fr.js +16 -3
  131. package/dist/src/intl/he.d.ts +3 -1
  132. package/dist/src/intl/he.d.ts.map +1 -1
  133. package/dist/src/intl/he.js +16 -3
  134. package/dist/src/intl/hi.d.ts +3 -1
  135. package/dist/src/intl/hi.d.ts.map +1 -1
  136. package/dist/src/intl/hi.js +16 -3
  137. package/dist/src/intl/hr.d.ts +3 -1
  138. package/dist/src/intl/hr.d.ts.map +1 -1
  139. package/dist/src/intl/hr.js +16 -3
  140. package/dist/src/intl/hu.d.ts +2 -1
  141. package/dist/src/intl/hu.d.ts.map +1 -1
  142. package/dist/src/intl/hu.js +15 -3
  143. package/dist/src/intl/id.d.ts +3 -1
  144. package/dist/src/intl/id.d.ts.map +1 -1
  145. package/dist/src/intl/id.js +16 -3
  146. package/dist/src/intl/it.d.ts +3 -1
  147. package/dist/src/intl/it.d.ts.map +1 -1
  148. package/dist/src/intl/it.js +16 -3
  149. package/dist/src/intl/ja.d.ts +3 -1
  150. package/dist/src/intl/ja.d.ts.map +1 -1
  151. package/dist/src/intl/ja.js +16 -3
  152. package/dist/src/intl/ko.d.ts +3 -1
  153. package/dist/src/intl/ko.d.ts.map +1 -1
  154. package/dist/src/intl/ko.js +16 -3
  155. package/dist/src/intl/ml.d.ts +3 -1
  156. package/dist/src/intl/ml.d.ts.map +1 -1
  157. package/dist/src/intl/ml.js +16 -3
  158. package/dist/src/intl/mr.d.ts +3 -1
  159. package/dist/src/intl/mr.d.ts.map +1 -1
  160. package/dist/src/intl/mr.js +16 -3
  161. package/dist/src/intl/ms.d.ts +3 -1
  162. package/dist/src/intl/ms.d.ts.map +1 -1
  163. package/dist/src/intl/ms.js +15 -2
  164. package/dist/src/intl/nb.d.ts +2 -1
  165. package/dist/src/intl/nb.d.ts.map +1 -1
  166. package/dist/src/intl/nb.js +14 -2
  167. package/dist/src/intl/nl.d.ts +3 -1
  168. package/dist/src/intl/nl.d.ts.map +1 -1
  169. package/dist/src/intl/nl.js +16 -3
  170. package/dist/src/intl/pa.d.ts +3 -1
  171. package/dist/src/intl/pa.d.ts.map +1 -1
  172. package/dist/src/intl/pa.js +16 -3
  173. package/dist/src/intl/pl.d.ts +2 -0
  174. package/dist/src/intl/pl.d.ts.map +1 -1
  175. package/dist/src/intl/pl.js +15 -2
  176. package/dist/src/intl/pt-BR.d.ts +3 -1
  177. package/dist/src/intl/pt-BR.d.ts.map +1 -1
  178. package/dist/src/intl/pt-BR.js +16 -3
  179. package/dist/src/intl/pt.d.ts +3 -1
  180. package/dist/src/intl/pt.d.ts.map +1 -1
  181. package/dist/src/intl/pt.js +15 -2
  182. package/dist/src/intl/ro.d.ts +3 -1
  183. package/dist/src/intl/ro.d.ts.map +1 -1
  184. package/dist/src/intl/ro.js +16 -3
  185. package/dist/src/intl/sk.d.ts +3 -1
  186. package/dist/src/intl/sk.d.ts.map +1 -1
  187. package/dist/src/intl/sk.js +15 -2
  188. package/dist/src/intl/sl.d.ts +3 -1
  189. package/dist/src/intl/sl.d.ts.map +1 -1
  190. package/dist/src/intl/sl.js +16 -3
  191. package/dist/src/intl/sv.d.ts +3 -1
  192. package/dist/src/intl/sv.d.ts.map +1 -1
  193. package/dist/src/intl/sv.js +16 -3
  194. package/dist/src/intl/sw.d.ts +1 -0
  195. package/dist/src/intl/sw.d.ts.map +1 -1
  196. package/dist/src/intl/sw.js +14 -2
  197. package/dist/src/intl/ta.d.ts +3 -1
  198. package/dist/src/intl/ta.d.ts.map +1 -1
  199. package/dist/src/intl/ta.js +16 -3
  200. package/dist/src/intl/te.d.ts +3 -1
  201. package/dist/src/intl/te.d.ts.map +1 -1
  202. package/dist/src/intl/te.js +16 -3
  203. package/dist/src/intl/th.d.ts +3 -1
  204. package/dist/src/intl/th.d.ts.map +1 -1
  205. package/dist/src/intl/th.js +16 -3
  206. package/dist/src/intl/tr.d.ts +3 -1
  207. package/dist/src/intl/tr.d.ts.map +1 -1
  208. package/dist/src/intl/tr.js +16 -3
  209. package/dist/src/intl/uk.d.ts +3 -1
  210. package/dist/src/intl/uk.d.ts.map +1 -1
  211. package/dist/src/intl/uk.js +16 -3
  212. package/dist/src/intl/ur.d.ts +3 -1
  213. package/dist/src/intl/ur.d.ts.map +1 -1
  214. package/dist/src/intl/ur.js +15 -2
  215. package/dist/src/intl/vi.d.ts +3 -1
  216. package/dist/src/intl/vi.d.ts.map +1 -1
  217. package/dist/src/intl/vi.js +16 -3
  218. package/dist/src/intl/zh-CN.d.ts +3 -1
  219. package/dist/src/intl/zh-CN.d.ts.map +1 -1
  220. package/dist/src/intl/zh-CN.js +16 -3
  221. package/dist/src/intl/zh-TW.d.ts +3 -1
  222. package/dist/src/intl/zh-TW.d.ts.map +1 -1
  223. package/dist/src/intl/zh-TW.js +16 -3
  224. package/dist/src/local-first/Evolu.d.ts +47 -24
  225. package/dist/src/local-first/Evolu.d.ts.map +1 -1
  226. package/dist/src/local-first/Owner.d.ts +10 -7
  227. package/dist/src/local-first/Owner.d.ts.map +1 -1
  228. package/dist/src/local-first/Owner.js +10 -7
  229. package/dist/src/local-first/Protocol.d.ts +5 -5
  230. package/dist/src/local-first/Protocol.js +5 -5
  231. package/dist/src/local-first/Query.d.ts +34 -21
  232. package/dist/src/local-first/Query.d.ts.map +1 -1
  233. package/dist/src/local-first/Query.js +25 -13
  234. package/dist/src/local-first/Relay.d.ts +12 -5
  235. package/dist/src/local-first/Relay.d.ts.map +1 -1
  236. package/dist/src/local-first/Schema.d.ts +19 -11
  237. package/dist/src/local-first/Schema.d.ts.map +1 -1
  238. package/dist/src/local-first/Schema.js +11 -6
  239. package/dist/src/local-first/Storage.d.ts +4 -2
  240. package/dist/src/local-first/Storage.d.ts.map +1 -1
  241. package/package.json +3 -4
  242. package/src/Array.ts +170 -97
  243. package/src/Assert.ts +336 -31
  244. package/src/BigInt.ts +3 -3
  245. package/src/Brand.ts +7 -7
  246. package/src/Buffer.ts +12 -4
  247. package/src/Cache.ts +8 -3
  248. package/src/Callbacks.ts +8 -4
  249. package/src/Console.ts +45 -30
  250. package/src/Crypto.ts +13 -8
  251. package/src/Eq.ts +450 -122
  252. package/src/Function.ts +54 -24
  253. package/src/Http.ts +52 -19
  254. package/src/Identicon.ts +9 -4
  255. package/src/LockManager.ts +12 -10
  256. package/src/Lookup.ts +4 -2
  257. package/src/Number.ts +28 -24
  258. package/src/Object.ts +115 -49
  259. package/src/Option.ts +14 -5
  260. package/src/Order.ts +12 -12
  261. package/src/Platform.ts +2 -2
  262. package/src/Random.ts +7 -4
  263. package/src/Redacted.ts +13 -6
  264. package/src/Ref.ts +4 -4
  265. package/src/Relation.ts +5 -7
  266. package/src/Resource.ts +27 -12
  267. package/src/Result.ts +258 -114
  268. package/src/Schedule.ts +233 -116
  269. package/src/Set.ts +43 -24
  270. package/src/Sqlite.ts +9 -8
  271. package/src/Task.ts +441 -212
  272. package/src/Test.ts +10 -4
  273. package/src/Time.ts +27 -17
  274. package/src/Type.ts +2077 -620
  275. package/src/Types.ts +108 -40
  276. package/src/WebSocket.ts +14 -6
  277. package/src/Worker.ts +10 -6
  278. package/src/intl/_en.ts +20 -4
  279. package/src/intl/ar.ts +17 -2
  280. package/src/intl/bn.ts +19 -4
  281. package/src/intl/ca.ts +19 -4
  282. package/src/intl/cs.ts +19 -4
  283. package/src/intl/da.ts +19 -4
  284. package/src/intl/de.ts +19 -4
  285. package/src/intl/el.ts +19 -4
  286. package/src/intl/es.ts +19 -4
  287. package/src/intl/fa.ts +19 -4
  288. package/src/intl/fi.ts +19 -4
  289. package/src/intl/fil.ts +19 -4
  290. package/src/intl/fr.ts +19 -4
  291. package/src/intl/he.ts +19 -4
  292. package/src/intl/hi.ts +19 -4
  293. package/src/intl/hr.ts +19 -4
  294. package/src/intl/hu.ts +18 -4
  295. package/src/intl/id.ts +19 -4
  296. package/src/intl/it.ts +19 -4
  297. package/src/intl/ja.ts +19 -4
  298. package/src/intl/ko.ts +19 -4
  299. package/src/intl/ml.ts +19 -4
  300. package/src/intl/mr.ts +19 -4
  301. package/src/intl/ms.ts +17 -2
  302. package/src/intl/nb.ts +16 -2
  303. package/src/intl/nl.ts +19 -4
  304. package/src/intl/pa.ts +19 -4
  305. package/src/intl/pl.ts +18 -2
  306. package/src/intl/pt-BR.ts +19 -4
  307. package/src/intl/pt.ts +17 -2
  308. package/src/intl/ro.ts +19 -4
  309. package/src/intl/sk.ts +17 -2
  310. package/src/intl/sl.ts +19 -4
  311. package/src/intl/sv.ts +19 -4
  312. package/src/intl/sw.ts +15 -2
  313. package/src/intl/ta.ts +19 -4
  314. package/src/intl/te.ts +19 -4
  315. package/src/intl/th.ts +19 -4
  316. package/src/intl/tr.ts +19 -4
  317. package/src/intl/uk.ts +19 -4
  318. package/src/intl/ur.ts +17 -2
  319. package/src/intl/vi.ts +19 -3
  320. package/src/intl/zh-CN.ts +19 -4
  321. package/src/intl/zh-TW.ts +19 -4
  322. package/src/local-first/Evolu.ts +47 -24
  323. package/src/local-first/Owner.ts +10 -7
  324. package/src/local-first/Protocol.ts +5 -5
  325. package/src/local-first/Query.ts +34 -21
  326. package/src/local-first/Relay.ts +12 -5
  327. package/src/local-first/Schema.ts +19 -11
  328. package/src/local-first/Storage.ts +4 -2
@@ -1,6 +1,4 @@
1
1
  /**
2
- * ## Intro
3
- *
4
2
  * Type-safe error handling with {@link Result}.
5
3
  *
6
4
  * The problem with exceptions in JavaScript is that a caught value is always of
@@ -17,6 +15,9 @@
17
15
  *
18
16
  * ```ts
19
17
  * import {
18
+ * assertEqual,
19
+ * assertErr,
20
+ * assertType,
20
21
  * err,
21
22
  * exhaustiveCheck,
22
23
  * type Result,
@@ -27,7 +28,7 @@
27
28
  * try {
28
29
  * throw new Error("Not found");
29
30
  * } catch (error) {
30
- * expectTypeOf(error).toEqualTypeOf<unknown>();
31
+ * assertType<unknown, typeof error>();
31
32
  * }
32
33
  *
33
34
  * // With Result, errors are part of the return type.
@@ -46,22 +47,24 @@
46
47
  * if (!result.ok) {
47
48
  * switch (result.error.type) {
48
49
  * case "NotFound":
49
- * expect(result.error).toEqual({ type: "NotFound" });
50
+ * assertEqual(result.error, { type: "NotFound" });
50
51
  * break;
51
52
  * case "InvalidInput":
52
- * expect(result.error).toEqual({ type: "InvalidInput" });
53
+ * assertEqual(result.error, { type: "InvalidInput" });
53
54
  * break;
54
55
  * default:
55
56
  * exhaustiveCheck(result.error);
56
57
  * }
57
58
  * }
58
- * expectErr(result, { type: "NotFound" });
59
+ * assertErr(result, { type: "NotFound" });
59
60
  * ```
60
61
  *
61
62
  * A `Result` is either {@link Ok} (success with a value) or {@link Err} (failure
62
63
  * with an error). Create them with {@link ok} and {@link err}.
63
64
  *
64
65
  * ```ts
66
+ * import { assertEqual } from "@evolu/common";
67
+ *
65
68
  * type Result<T, E = never> = Ok<T> | Err<E>;
66
69
  *
67
70
  * interface Ok<T> {
@@ -73,6 +76,9 @@
73
76
  * readonly ok: false;
74
77
  * readonly error: E;
75
78
  * }
79
+ *
80
+ * const result: Result<number> = { ok: true, value: 1 };
81
+ * assertEqual(result, { ok: true, value: 1 });
76
82
  * ```
77
83
  *
78
84
  * Use {@link trySync} and {@link tryAsync} to intentionally convert thrown values
@@ -85,7 +91,13 @@
85
91
  * Since `Result` is a plain object, imperative code works naturally.
86
92
  *
87
93
  * ```ts
88
- * import { ok, type Result, type Typed } from "@evolu/common";
94
+ * import {
95
+ * assertOk,
96
+ * assertType,
97
+ * ok,
98
+ * type Result,
99
+ * type Typed,
100
+ * } from "@evolu/common";
89
101
  *
90
102
  * interface User {
91
103
  * readonly id: string;
@@ -117,10 +129,11 @@
117
129
  * };
118
130
  *
119
131
  * const profile = getCurrentProfile();
120
- * expectTypeOf(profile).toEqualTypeOf<
121
- * Result<Profile, UserNotFoundError | ProfileNotFoundError>
132
+ * assertType<
133
+ * Result<Profile, UserNotFoundError | ProfileNotFoundError>,
134
+ * typeof profile
122
135
  * >();
123
- * expectOk(profile, { userId: "user-1" });
136
+ * assertOk(profile, { userId: "user-1" });
124
137
  * ```
125
138
  *
126
139
  * Note `user` and `profile` are named after their success values, not after the
@@ -212,15 +225,15 @@ export type AnyResult = Result<any, any>;
212
225
  * ### Example
213
226
  *
214
227
  * ```ts
215
- * import { ok, type Result } from "@evolu/common";
228
+ * import { assertOk, assertType, ok, type Result } from "@evolu/common";
216
229
  *
217
230
  * const result = ok();
218
231
  * const count = ok(42);
219
232
  *
220
- * expectTypeOf(result).toEqualTypeOf<Result<void>>();
221
- * expectTypeOf(count).toEqualTypeOf<Result<number>>();
222
- * expectOk(result, undefined);
223
- * expectOk(count, 42);
233
+ * assertType<Result<void>, typeof result>();
234
+ * assertType<Result<number>, typeof count>();
235
+ * assertOk(result, undefined);
236
+ * assertOk(count, 42);
224
237
  * ```
225
238
  *
226
239
  * @group Core
@@ -238,7 +251,14 @@ export interface Ok<out T> {
238
251
  * ### Example
239
252
  *
240
253
  * ```ts
241
- * import { err, ok, type Result, type Typed } from "@evolu/common";
254
+ * import {
255
+ * assertErr,
256
+ * assertOk,
257
+ * err,
258
+ * ok,
259
+ * type Result,
260
+ * type Typed,
261
+ * } from "@evolu/common";
242
262
  *
243
263
  * interface User {
244
264
  * readonly id: string;
@@ -255,8 +275,8 @@ export interface Ok<out T> {
255
275
  * readonly id: string;
256
276
  * }
257
277
  *
258
- * expectOk(findUser("user-1"), { id: "user-1" });
259
- * expectErr(findUser("missing"), {
278
+ * assertOk(findUser("user-1"), { id: "user-1" });
279
+ * assertErr(findUser("missing"), {
260
280
  * type: "NotFound",
261
281
  * id: "missing",
262
282
  * });
@@ -305,6 +325,8 @@ export declare const err: <E>(error: E) => Result<never, E>;
305
325
  *
306
326
  * ```ts
307
327
  * import {
328
+ * assertEqual,
329
+ * assertType,
308
330
  * isOk,
309
331
  * ok,
310
332
  * type Ok,
@@ -318,8 +340,8 @@ export declare const err: <E>(error: E) => Result<never, E>;
318
340
  *
319
341
  * const count = getCount();
320
342
  * if (isOk(count)) {
321
- * expectTypeOf(count).toEqualTypeOf<Ok<number>>();
322
- * expect(count.value).toBe(2);
343
+ * assertType<Ok<number>, typeof count>();
344
+ * assertEqual(count.value, 2);
323
345
  * }
324
346
  * ```
325
347
  *
@@ -333,6 +355,8 @@ export declare const isOk: <T, E>(result: Result<T, E>) => result is Ok<T>;
333
355
  *
334
356
  * ```ts
335
357
  * import {
358
+ * assertErr,
359
+ * assertType,
336
360
  * err,
337
361
  * isErr,
338
362
  * type Err,
@@ -347,8 +371,8 @@ export declare const isOk: <T, E>(result: Result<T, E>) => result is Ok<T>;
347
371
  *
348
372
  * const count = getCount();
349
373
  * if (isErr(count)) {
350
- * expectTypeOf(count).toEqualTypeOf<Err<CountUnavailableError>>();
351
- * expect(count.error).toEqual({ type: "CountUnavailable" });
374
+ * assertType<Err<CountUnavailableError>, typeof count>();
375
+ * assertErr(count, { type: "CountUnavailable" });
352
376
  * }
353
377
  * ```
354
378
  *
@@ -376,9 +400,14 @@ export declare const isErr: <T, E>(result: Result<T, E>) => result is Err<E>;
376
400
  *
377
401
  * ```ts
378
402
  * import {
403
+ * assert,
404
+ * assertErr,
405
+ * assertEqual,
406
+ * assertType,
379
407
  * err,
380
408
  * getOrThrow,
381
409
  * ok,
410
+ * trySync,
382
411
  * type Result,
383
412
  * type Typed,
384
413
  * } from "@evolu/common";
@@ -394,17 +423,21 @@ export declare const isErr: <T, E>(result: Result<T, E>) => result is Err<E>;
394
423
  *
395
424
  * // At app startup, crash if the config is invalid.
396
425
  * const config = getOrThrow(loadConfig());
397
- * expectTypeOf(config).toEqualTypeOf<Config>();
398
- * expect(config).toEqual({ port: 3000 });
399
- *
400
- * try {
401
- * getOrThrow(err({ type: "InvalidConfig" }));
402
- * assert.fail("Expected getOrThrow to throw");
403
- * } catch (error) {
404
- * assert(error instanceof Error);
405
- * expect(error.message).toBe("getOrThrow");
406
- * expect(error.cause).toEqual({ type: "InvalidConfig" });
407
- * }
426
+ * assertType<Config, typeof config>();
427
+ * assertEqual(config.port, 3000);
428
+ *
429
+ * const thrown = trySync(() => getOrThrow(err({ type: "InvalidConfig" })));
430
+ * assertErr(thrown);
431
+ * assert(thrown.error instanceof Error, "Expected an Error.");
432
+ * assertEqual(thrown.error.message, "getOrThrow");
433
+ * const cause = thrown.error.cause;
434
+ * assert(
435
+ * typeof cause === "object" &&
436
+ * cause !== null &&
437
+ * "type" in cause &&
438
+ * cause.type === "InvalidConfig",
439
+ * "Expected InvalidConfig cause.",
440
+ * );
408
441
  * ```
409
442
  *
410
443
  * Throws: `Error` with the original error attached as `cause`.
@@ -425,6 +458,8 @@ export declare const getOrThrow: <T, E>(result: Result<T, E>) => T;
425
458
  *
426
459
  * ```ts
427
460
  * import {
461
+ * assertEqual,
462
+ * assertType,
428
463
  * err,
429
464
  * getOrNull,
430
465
  * ok,
@@ -445,9 +480,9 @@ export declare const getOrThrow: <T, E>(result: Result<T, E>) => T;
445
480
  * const user = getOrNull(findUser("user-1"));
446
481
  * const missingUser = getOrNull(findUser("missing"));
447
482
  *
448
- * expectTypeOf(user).toEqualTypeOf<User | null>();
449
- * expect(user).toEqual({ id: "user-1" });
450
- * expect(missingUser).toBeNull();
483
+ * assertType<User | null, typeof user>();
484
+ * assertEqual(user, { id: "user-1" });
485
+ * assertEqual(missingUser, null);
451
486
  * ```
452
487
  *
453
488
  * @group Unwrapping
@@ -463,12 +498,18 @@ export declare const getOrNull: <T, E>(result: Result<T, E>) => T | null;
463
498
  * ### Example
464
499
  *
465
500
  * ```ts
466
- * import { getOk, ok, type Result } from "@evolu/common";
501
+ * import {
502
+ * assertEqual,
503
+ * assertType,
504
+ * getOk,
505
+ * ok,
506
+ * type Result,
507
+ * } from "@evolu/common";
467
508
  *
468
509
  * const getCount = (): Result<number> => ok(2);
469
510
  * const count = getOk(getCount());
470
- * expectTypeOf(count).toEqualTypeOf<number>();
471
- * expect(count).toBe(2);
511
+ * assertType<number, typeof count>();
512
+ * assertEqual(count, 2);
472
513
  * ```
473
514
  *
474
515
  * @group Unwrapping
@@ -488,7 +529,16 @@ export declare const getOk: <T>(result: Result<T>) => T;
488
529
  * ### Example
489
530
  *
490
531
  * ```ts
491
- * import { trySync, type Result, type Typed } from "@evolu/common";
532
+ * import {
533
+ * assert,
534
+ * assertErr,
535
+ * assertEqual,
536
+ * assertOk,
537
+ * assertType,
538
+ * trySync,
539
+ * type Result,
540
+ * type Typed,
541
+ * } from "@evolu/common";
492
542
  *
493
543
  * class LegacySeatUnavailableError extends Error {}
494
544
  *
@@ -513,10 +563,13 @@ export declare const getOk: <T>(result: Result<T>) => T;
513
563
  * }
514
564
  *
515
565
  * const result = reserveSeat("B2");
516
- * expectTypeOf(result).toEqualTypeOf<Result<void, SeatUnavailableError>>();
517
- * expectOk(result, undefined);
518
- * expectErr(reserveSeat("A1"), { type: "SeatUnavailable", seat: "A1" });
519
- * expect(() => reserveSeat("B1")).toThrow("Database error");
566
+ * assertType<Result<void, SeatUnavailableError>, typeof result>();
567
+ * assertOk(result, undefined);
568
+ * assertErr(reserveSeat("A1"), { type: "SeatUnavailable", seat: "A1" });
569
+ * const databaseError = trySync(() => reserveSeat("B1"));
570
+ * assertErr(databaseError);
571
+ * assert(databaseError.error instanceof Error, "Expected an Error.");
572
+ * assertEqual(databaseError.error.message, "Database error");
520
573
  * ```
521
574
  *
522
575
  * @group Exception interop
@@ -538,13 +591,25 @@ export declare function trySync<T, E>(fn: () => T, mapError: (error: unknown) =>
538
591
  * ### Example
539
592
  *
540
593
  * ```ts
541
- * import { tryAsync, type Result, type Typed } from "@evolu/common";
594
+ * import {
595
+ * assert,
596
+ * assertErr,
597
+ * assertEqual,
598
+ * assertOk,
599
+ * assertType,
600
+ * tryAsync,
601
+ * type Result,
602
+ * type Typed,
603
+ * } from "@evolu/common";
542
604
  *
543
605
  * class LegacySeatUnavailableError extends Error {}
544
606
  *
545
- * const legacyReserveSeat = async (seat: string): Promise<void> => {
546
- * if (seat === "A1") throw new LegacySeatUnavailableError();
547
- * if (seat === "B1") throw new Error("Database error");
607
+ * const legacyReserveSeat = (seat: string): Promise<void> => {
608
+ * if (seat === "A1") {
609
+ * return Promise.reject(new LegacySeatUnavailableError());
610
+ * }
611
+ * if (seat === "B1") return Promise.reject(new Error("Database error"));
612
+ * return Promise.resolve();
548
613
  * };
549
614
  *
550
615
  * const reserveSeat = (
@@ -565,13 +630,16 @@ export declare function trySync<T, E>(fn: () => T, mapError: (error: unknown) =>
565
630
  * }
566
631
  *
567
632
  * const result = await reserveSeat("B2");
568
- * expectTypeOf(result).toEqualTypeOf<Result<void, SeatUnavailableError>>();
569
- * expectOk(result, undefined);
570
- * expectErr(await reserveSeat("A1"), {
633
+ * assertType<Result<void, SeatUnavailableError>, typeof result>();
634
+ * assertOk(result, undefined);
635
+ * assertErr(await reserveSeat("A1"), {
571
636
  * type: "SeatUnavailable",
572
637
  * seat: "A1",
573
638
  * });
574
- * await expect(reserveSeat("B1")).rejects.toThrow("Database error");
639
+ * const databaseError = await tryAsync(() => reserveSeat("B1"));
640
+ * assertErr(databaseError);
641
+ * assert(databaseError.error instanceof Error, "Expected an Error.");
642
+ * assertEqual(databaseError.error.message, "Database error");
575
643
  * ```
576
644
  *
577
645
  * @group Exception interop
@@ -595,6 +663,9 @@ export declare function tryAsync<T, E>(promiseThunk: Thunk<Awaitable<T>>, mapErr
595
663
  *
596
664
  * ```ts
597
665
  * import {
666
+ * assertErr,
667
+ * assertOk,
668
+ * assertType,
598
669
  * done,
599
670
  * err,
600
671
  * ok,
@@ -613,12 +684,10 @@ export declare function tryAsync<T, E>(promiseThunk: Thunk<Awaitable<T>>, mapErr
613
684
  * interface ReadFailedError extends Typed<"ReadFailed"> {}
614
685
  *
615
686
  * const value = next(0);
616
- * expectTypeOf(value).toEqualTypeOf<
617
- * NextResult<string, ReadFailedError, number>
618
- * >();
619
- * expectOk(value, "first");
620
- * expectErr(next(1), { type: "ReadFailed" });
621
- * expectErr(next(2), { type: "Done", done: 2 });
687
+ * assertType<NextResult<string, ReadFailedError, number>, typeof value>();
688
+ * assertOk(value, "first");
689
+ * assertErr(next(1), { type: "ReadFailed" });
690
+ * assertErr(next(2), { type: "Done", done: 2 });
622
691
  * ```
623
692
  *
624
693
  * @group Pull
@@ -636,14 +705,14 @@ export type NextResult<A, E = never, D = void> = Result<A, E | Done<D>>;
636
705
  * ### Example
637
706
  *
638
707
  * ```ts
639
- * import { done, type Done } from "@evolu/common";
708
+ * import { assertEqual, assertType, done, type Done } from "@evolu/common";
640
709
  *
641
710
  * const withoutValue = done();
642
711
  * const withValue = done(42);
643
- * expectTypeOf(withoutValue).toEqualTypeOf<Done<void>>();
644
- * expectTypeOf(withValue).toEqualTypeOf<Done<number>>();
645
- * expect(withoutValue).toEqual({ type: "Done", done: undefined });
646
- * expect(withValue).toEqual({ type: "Done", done: 42 });
712
+ * assertType<Done<void>, typeof withoutValue>();
713
+ * assertType<Done<number>, typeof withValue>();
714
+ * assertEqual(withoutValue, { type: "Done", done: undefined });
715
+ * assertEqual(withValue, { type: "Done", done: 42 });
647
716
  * ```
648
717
  *
649
718
  * @group Pull
@@ -671,13 +740,18 @@ export declare function done<D>(value: D): Done<D>;
671
740
  * ### Example
672
741
  *
673
742
  * ```ts
674
- * import { type Done, type ExcludeDone, type Typed } from "@evolu/common";
743
+ * import {
744
+ * assertType,
745
+ * type Done,
746
+ * type ExcludeDone,
747
+ * type Typed,
748
+ * } from "@evolu/common";
675
749
  *
676
750
  * type Errors = ReadFailedError | Done<number>;
677
751
  *
678
752
  * interface ReadFailedError extends Typed<"ReadFailed"> {}
679
753
  *
680
- * expectTypeOf<ExcludeDone<Errors>>().toEqualTypeOf<ReadFailedError>();
754
+ * assertType<ReadFailedError, ExcludeDone<Errors>>();
681
755
  * ```
682
756
  *
683
757
  * @group Pull
@@ -692,13 +766,18 @@ export type ExcludeDone<E> = Exclude<E, Done<any>>;
692
766
  * ### Example
693
767
  *
694
768
  * ```ts
695
- * import { type Done, type OnlyDone, type Typed } from "@evolu/common";
769
+ * import {
770
+ * assertType,
771
+ * type Done,
772
+ * type OnlyDone,
773
+ * type Typed,
774
+ * } from "@evolu/common";
696
775
  *
697
776
  * type Errors = ReadFailedError | Done<number>;
698
777
  *
699
778
  * interface ReadFailedError extends Typed<"ReadFailed"> {}
700
779
  *
701
- * expectTypeOf<OnlyDone<Errors>>().toEqualTypeOf<Done<number>>();
780
+ * assertType<Done<number>, OnlyDone<Errors>>();
702
781
  * ```
703
782
  *
704
783
  * @group Pull
@@ -711,6 +790,7 @@ export type OnlyDone<E> = Extract<E, Done<any>>;
711
790
  *
712
791
  * ```ts
713
792
  * import {
793
+ * assertType,
714
794
  * type InferDone,
715
795
  * type NextResult,
716
796
  * type Typed,
@@ -720,7 +800,7 @@ export type OnlyDone<E> = Extract<E, Done<any>>;
720
800
  *
721
801
  * interface ReadFailedError extends Typed<"ReadFailed"> {}
722
802
  *
723
- * expectTypeOf<InferDone<ReadResult>>().toEqualTypeOf<number>();
803
+ * assertType<number, InferDone<ReadResult>>();
724
804
  * ```
725
805
  *
726
806
  * @group Pull
@@ -739,6 +819,8 @@ export type InferDone<R extends Result<any, any>> = InferErr<R> extends infer Er
739
819
  *
740
820
  * ```ts
741
821
  * import {
822
+ * assertOk,
823
+ * assertType,
742
824
  * flatMapResult,
743
825
  * ok,
744
826
  * type Result,
@@ -763,10 +845,11 @@ export type InferDone<R extends Result<any, any>> = InferErr<R> extends infer Er
763
845
  *
764
846
  * const user: Result<User, UserNotFoundError> = ok({ id: "user-1" });
765
847
  * const profile = flatMapResult(user, ({ id }) => getProfile(id));
766
- * expectTypeOf(profile).toEqualTypeOf<
767
- * Result<Profile, UserNotFoundError | ProfileNotFoundError>
848
+ * assertType<
849
+ * Result<Profile, UserNotFoundError | ProfileNotFoundError>,
850
+ * typeof profile
768
851
  * >();
769
- * expectOk(profile, { userId: "user-1" });
852
+ * assertOk(profile, { userId: "user-1" });
770
853
  * ```
771
854
  *
772
855
  * @group Composition
@@ -784,7 +867,14 @@ export declare const flatMapResult: <T, E, U, F>(result: Result<T, E>, fn: (valu
784
867
  * ### Example
785
868
  *
786
869
  * ```ts
787
- * import { allResult, ok, type Result, type Typed } from "@evolu/common";
870
+ * import {
871
+ * allResult,
872
+ * assertOk,
873
+ * assertType,
874
+ * ok,
875
+ * type Result,
876
+ * type Typed,
877
+ * } from "@evolu/common";
788
878
  *
789
879
  * const getCount = (): Result<number, CountUnavailableError> => ok(2);
790
880
  *
@@ -796,13 +886,14 @@ export declare const flatMapResult: <T, E, U, F>(result: Result<T, E>, fn: (valu
796
886
  * interface LabelUnavailableError extends Typed<"LabelUnavailable"> {}
797
887
  *
798
888
  * const values = allResult([getCount(), getLabel()]);
799
- * expectTypeOf(values).toEqualTypeOf<
889
+ * assertType<
800
890
  * Result<
801
891
  * readonly [number, string],
802
892
  * CountUnavailableError | LabelUnavailableError
803
- * >
893
+ * >,
894
+ * typeof values
804
895
  * >();
805
- * expectOk(values, [2, "books"]);
896
+ * assertOk(values, [2, "books"]);
806
897
  * ```
807
898
  *
808
899
  * @group Composition
@@ -816,14 +907,21 @@ export declare function allResult<const T extends readonly [AnyResult, ...Readon
816
907
  * ### Example
817
908
  *
818
909
  * ```ts
819
- * import { allResult, ok, type Result } from "@evolu/common";
910
+ * import {
911
+ * allResult,
912
+ * assertOk,
913
+ * assertType,
914
+ * ok,
915
+ * type Result,
916
+ * } from "@evolu/common";
820
917
  *
821
918
  * const resultsByName = { a: ok(1), b: ok(2) } as const;
822
919
  * const valuesByName = allResult(resultsByName);
823
- * expectTypeOf(valuesByName).toEqualTypeOf<
824
- * Result<{ readonly a: number; readonly b: number }>
920
+ * assertType<
921
+ * Result<{ readonly a: number; readonly b: number }>,
922
+ * typeof valuesByName
825
923
  * >();
826
- * expectOk(valuesByName, { a: 1, b: 2 });
924
+ * assertOk(valuesByName, { a: 1, b: 2 });
827
925
  * ```
828
926
  */
829
927
  export declare function allResult<T extends Readonly<Record<string, AnyResult>>>(results: T): Result<{
@@ -837,12 +935,18 @@ export declare function allResult<T extends Readonly<Record<string, AnyResult>>>
837
935
  * ### Example
838
936
  *
839
937
  * ```ts
840
- * import { allResult, ok, type Result } from "@evolu/common";
938
+ * import {
939
+ * allResult,
940
+ * assertOk,
941
+ * assertType,
942
+ * ok,
943
+ * type Result,
944
+ * } from "@evolu/common";
841
945
  *
842
946
  * const results: ReadonlyArray<Result<number>> = [ok(1), ok(2)];
843
947
  * const numbers = allResult(results);
844
- * expectTypeOf(numbers).toEqualTypeOf<Result<ReadonlyArray<number>>>();
845
- * expectOk(numbers, [1, 2]);
948
+ * assertType<Result<ReadonlyArray<number>>, typeof numbers>();
949
+ * assertOk(numbers, [1, 2]);
846
950
  * ```
847
951
  */
848
952
  export declare function allResult<T, E>(results: Iterable<Result<T, E>>): Result<ReadonlyArray<T>, E>;
@@ -854,6 +958,8 @@ export declare function allResult<T, E>(results: Iterable<Result<T, E>>): Result
854
958
  * ```ts
855
959
  * import {
856
960
  * allResult,
961
+ * assertOk,
962
+ * assertType,
857
963
  * ok,
858
964
  * type NonEmptyReadonlyArray,
859
965
  * type Result,
@@ -861,10 +967,8 @@ export declare function allResult<T, E>(results: Iterable<Result<T, E>>): Result
861
967
  *
862
968
  * const results: NonEmptyReadonlyArray<Result<number>> = [ok(1), ok(2)];
863
969
  * const numbers = allResult(results);
864
- * expectTypeOf(numbers).toEqualTypeOf<
865
- * Result<NonEmptyReadonlyArray<number>>
866
- * >();
867
- * expectOk(numbers, [1, 2]);
970
+ * assertType<Result<NonEmptyReadonlyArray<number>>, typeof numbers>();
971
+ * assertOk(numbers, [1, 2]);
868
972
  * ```
869
973
  */
870
974
  export declare function allResult<T, E>(results: NonEmptyReadonlyArray<Result<T, E>>): Result<NonEmptyReadonlyArray<T>, E>;
@@ -874,11 +978,17 @@ export declare function allResult<T, E>(results: NonEmptyReadonlyArray<Result<T,
874
978
  * ### Example
875
979
  *
876
980
  * ```ts
877
- * import { allResult, ok, type Result } from "@evolu/common";
981
+ * import {
982
+ * allResult,
983
+ * assertOk,
984
+ * assertType,
985
+ * ok,
986
+ * type Result,
987
+ * } from "@evolu/common";
878
988
  *
879
989
  * const result = allResult({ a: ok(1), b: ok(2) }, { collect: false });
880
- * expectTypeOf(result).toEqualTypeOf<Result<void>>();
881
- * expectOk(result, undefined);
990
+ * assertType<Result<void>, typeof result>();
991
+ * assertOk(result, undefined);
882
992
  * ```
883
993
  */
884
994
  export declare function allResult<T extends Readonly<Record<string, AnyResult>>>(results: T, options: {
@@ -893,12 +1003,18 @@ export declare function allResult<T extends Readonly<Record<string, AnyResult>>>
893
1003
  * ### Example
894
1004
  *
895
1005
  * ```ts
896
- * import { allResult, ok, type Result } from "@evolu/common";
1006
+ * import {
1007
+ * allResult,
1008
+ * assertOk,
1009
+ * assertType,
1010
+ * ok,
1011
+ * type Result,
1012
+ * } from "@evolu/common";
897
1013
  *
898
1014
  * const results: ReadonlyArray<Result<number>> = [ok(1), ok(2)];
899
1015
  * const result = allResult(results, { collect: false });
900
- * expectTypeOf(result).toEqualTypeOf<Result<void>>();
901
- * expectOk(result, undefined);
1016
+ * assertType<Result<void>, typeof result>();
1017
+ * assertOk(result, undefined);
902
1018
  * ```
903
1019
  */
904
1020
  export declare function allResult<R extends AnyResult>(results: Iterable<R>, options: {
@@ -912,6 +1028,8 @@ export declare function allResult<R extends AnyResult>(results: Iterable<R>, opt
912
1028
  * ```ts
913
1029
  * import {
914
1030
  * allResult,
1031
+ * assertOk,
1032
+ * assertType,
915
1033
  * ok,
916
1034
  * type NonEmptyReadonlyArray,
917
1035
  * type Result,
@@ -919,14 +1037,12 @@ export declare function allResult<R extends AnyResult>(results: Iterable<R>, opt
919
1037
  *
920
1038
  * const numbers: NonEmptyReadonlyArray<number> = [1, 2];
921
1039
  * const doubled = allResult(numbers, (number) => ok(number * 2));
922
- * expectTypeOf(doubled).toEqualTypeOf<
923
- * Result<NonEmptyReadonlyArray<number>>
924
- * >();
925
- * expectOk(doubled, [2, 4]);
1040
+ * assertType<Result<NonEmptyReadonlyArray<number>>, typeof doubled>();
1041
+ * assertOk(doubled, [2, 4]);
926
1042
  *
927
1043
  * const tuple = allResult([1, 2] as const, (number) => ok(number * 2));
928
- * expectTypeOf(tuple).toEqualTypeOf<Result<readonly [number, number]>>();
929
- * expectOk(tuple, [2, 4]);
1044
+ * assertType<Result<readonly [number, number]>, typeof tuple>();
1045
+ * assertOk(tuple, [2, 4]);
930
1046
  * ```
931
1047
  */
932
1048
  export declare function allResult<const A extends readonly [unknown, ...Array<unknown>], R extends AnyResult>(values: A, fn: (value: A[number]) => R): Result<{
@@ -938,12 +1054,18 @@ export declare function allResult<const A extends readonly [unknown, ...Array<un
938
1054
  * ### Example
939
1055
  *
940
1056
  * ```ts
941
- * import { allResult, ok, type Result } from "@evolu/common";
1057
+ * import {
1058
+ * allResult,
1059
+ * assertOk,
1060
+ * assertType,
1061
+ * ok,
1062
+ * type Result,
1063
+ * } from "@evolu/common";
942
1064
  *
943
1065
  * const numbers: Iterable<number> = new Set([1, 2]);
944
1066
  * const doubled = allResult(numbers, (number) => ok(number * 2));
945
- * expectTypeOf(doubled).toEqualTypeOf<Result<ReadonlyArray<number>>>();
946
- * expectOk(doubled, [2, 4]);
1067
+ * assertType<Result<ReadonlyArray<number>>, typeof doubled>();
1068
+ * assertOk(doubled, [2, 4]);
947
1069
  * ```
948
1070
  */
949
1071
  export declare function allResult<A, R extends AnyResult>(values: Iterable<A>, fn: (value: A) => R): Result<ReadonlyArray<InferOk<R>>, InferErr<R>>;
@@ -953,7 +1075,13 @@ export declare function allResult<A, R extends AnyResult>(values: Iterable<A>, f
953
1075
  * ### Example
954
1076
  *
955
1077
  * ```ts
956
- * import { allResult, ok, type Result } from "@evolu/common";
1078
+ * import {
1079
+ * allResult,
1080
+ * assertOk,
1081
+ * assertType,
1082
+ * ok,
1083
+ * type Result,
1084
+ * } from "@evolu/common";
957
1085
  *
958
1086
  * interface User {
959
1087
  * readonly id: string;
@@ -963,10 +1091,11 @@ export declare function allResult<A, R extends AnyResult>(values: Iterable<A>, f
963
1091
  *
964
1092
  * const userIdsByRole = { owner: "user-1", reviewer: "user-2" } as const;
965
1093
  * const usersByRole = allResult(userIdsByRole, toUser);
966
- * expectTypeOf(usersByRole).toEqualTypeOf<
967
- * Result<Readonly<Record<"owner" | "reviewer", User>>>
1094
+ * assertType<
1095
+ * Result<Readonly<Record<"owner" | "reviewer", User>>>,
1096
+ * typeof usersByRole
968
1097
  * >();
969
- * expectOk(usersByRole, {
1098
+ * assertOk(usersByRole, {
970
1099
  * owner: { id: "user-1" },
971
1100
  * reviewer: { id: "user-2" },
972
1101
  * });
@@ -982,7 +1111,14 @@ export declare function allResult<A, R extends AnyResult, K extends string>(valu
982
1111
  * ### Example
983
1112
  *
984
1113
  * ```ts
985
- * import { allResult, ok, type Result } from "@evolu/common";
1114
+ * import {
1115
+ * allResult,
1116
+ * assertEqual,
1117
+ * assertOk,
1118
+ * assertType,
1119
+ * ok,
1120
+ * type Result,
1121
+ * } from "@evolu/common";
986
1122
  *
987
1123
  * const visited: Array<number> = [];
988
1124
  * const result = allResult(
@@ -995,9 +1131,9 @@ export declare function allResult<A, R extends AnyResult, K extends string>(valu
995
1131
  * collect: false,
996
1132
  * },
997
1133
  * );
998
- * expectTypeOf(result).toEqualTypeOf<Result<void>>();
999
- * expectOk(result, undefined);
1000
- * expect(visited).toEqual([1, 2]);
1134
+ * assertType<Result<void>, typeof result>();
1135
+ * assertOk(result, undefined);
1136
+ * assertEqual(visited, [1, 2]);
1001
1137
  * ```
1002
1138
  */
1003
1139
  export declare function allResult<A, R extends AnyResult>(values: Iterable<A>, fn: (value: A) => R, options: {
@@ -1009,13 +1145,19 @@ export declare function allResult<A, R extends AnyResult>(values: Iterable<A>, f
1009
1145
  * ### Example
1010
1146
  *
1011
1147
  * ```ts
1012
- * import { allResult, ok, type Result } from "@evolu/common";
1148
+ * import {
1149
+ * allResult,
1150
+ * assertOk,
1151
+ * assertType,
1152
+ * ok,
1153
+ * type Result,
1154
+ * } from "@evolu/common";
1013
1155
  *
1014
1156
  * const result = allResult({ a: 1, b: 2 }, (number) => ok(number * 2), {
1015
1157
  * collect: false,
1016
1158
  * });
1017
- * expectTypeOf(result).toEqualTypeOf<Result<void>>();
1018
- * expectOk(result, undefined);
1159
+ * assertType<Result<void>, typeof result>();
1160
+ * assertOk(result, undefined);
1019
1161
  * ```
1020
1162
  */
1021
1163
  export declare function allResult<A, R extends AnyResult, K extends string>(values: Readonly<Record<K, A>>, fn: (value: A) => R, options: {
@@ -1034,6 +1176,8 @@ export declare function allResult<A, R extends AnyResult, K extends string>(valu
1034
1176
  * ```ts
1035
1177
  * import {
1036
1178
  * anyResult,
1179
+ * assertOk,
1180
+ * assertType,
1037
1181
  * err,
1038
1182
  * ok,
1039
1183
  * type Result,
@@ -1046,8 +1190,8 @@ export declare function allResult<A, R extends AnyResult, K extends string>(valu
1046
1190
  * interface CacheMissError extends Typed<"CacheMiss"> {}
1047
1191
  *
1048
1192
  * const number = anyResult([getCachedPrice(), ok(42)]);
1049
- * expectTypeOf(number).toEqualTypeOf<Result<number, CacheMissError>>();
1050
- * expectOk(number, 42);
1193
+ * assertType<Result<number, CacheMissError>, typeof number>();
1194
+ * assertOk(number, 42);
1051
1195
  * ```
1052
1196
  *
1053
1197
  * @group Composition