@evolu/common 8.1.0 → 8.3.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 (232) hide show
  1. package/dist/src/Function.d.ts +1 -0
  2. package/dist/src/Function.d.ts.map +1 -1
  3. package/dist/src/Http.d.ts +9 -0
  4. package/dist/src/Http.d.ts.map +1 -1
  5. package/dist/src/Number.d.ts +66 -6
  6. package/dist/src/Number.d.ts.map +1 -1
  7. package/dist/src/Number.js +11 -3
  8. package/dist/src/Object.d.ts +1 -0
  9. package/dist/src/Object.d.ts.map +1 -1
  10. package/dist/src/RefCount.d.ts +1 -0
  11. package/dist/src/RefCount.d.ts.map +1 -1
  12. package/dist/src/Relation.d.ts +2 -0
  13. package/dist/src/Relation.d.ts.map +1 -1
  14. package/dist/src/Resource.d.ts +1 -0
  15. package/dist/src/Resource.d.ts.map +1 -1
  16. package/dist/src/Result.d.ts +383 -548
  17. package/dist/src/Result.d.ts.map +1 -1
  18. package/dist/src/Result.js +296 -46
  19. package/dist/src/Schedule.d.ts +2 -2
  20. package/dist/src/Schedule.d.ts.map +1 -1
  21. package/dist/src/StackTrace.d.ts +1 -0
  22. package/dist/src/StackTrace.d.ts.map +1 -1
  23. package/dist/src/Task.d.ts +978 -1061
  24. package/dist/src/Task.d.ts.map +1 -1
  25. package/dist/src/Task.js +1010 -159
  26. package/dist/src/Time.d.ts +71 -34
  27. package/dist/src/Time.d.ts.map +1 -1
  28. package/dist/src/Time.js +77 -1
  29. package/dist/src/Type.d.ts +1740 -795
  30. package/dist/src/Type.d.ts.map +1 -1
  31. package/dist/src/Type.js +1634 -211
  32. package/dist/src/Types.d.ts +0 -24
  33. package/dist/src/Types.d.ts.map +1 -1
  34. package/dist/src/intl/_en.d.ts +126 -0
  35. package/dist/src/intl/_en.d.ts.map +1 -0
  36. package/dist/src/intl/_en.js +267 -0
  37. package/dist/src/intl/ar.d.ts +117 -0
  38. package/dist/src/intl/ar.d.ts.map +1 -0
  39. package/dist/src/intl/ar.js +245 -0
  40. package/dist/src/intl/bn.d.ts +117 -0
  41. package/dist/src/intl/bn.d.ts.map +1 -0
  42. package/dist/src/intl/bn.js +258 -0
  43. package/dist/src/intl/ca.d.ts +117 -0
  44. package/dist/src/intl/ca.d.ts.map +1 -0
  45. package/dist/src/intl/ca.js +258 -0
  46. package/dist/src/intl/cs.d.ts +30 -7
  47. package/dist/src/intl/cs.d.ts.map +1 -1
  48. package/dist/src/intl/cs.js +65 -28
  49. package/dist/src/intl/da.d.ts +117 -0
  50. package/dist/src/intl/da.d.ts.map +1 -0
  51. package/dist/src/intl/da.js +258 -0
  52. package/dist/src/intl/de.d.ts +117 -0
  53. package/dist/src/intl/de.d.ts.map +1 -0
  54. package/dist/src/intl/de.js +258 -0
  55. package/dist/src/intl/el.d.ts +117 -0
  56. package/dist/src/intl/el.d.ts.map +1 -0
  57. package/dist/src/intl/el.js +265 -0
  58. package/dist/src/intl/es.d.ts +117 -0
  59. package/dist/src/intl/es.d.ts.map +1 -0
  60. package/dist/src/intl/es.js +258 -0
  61. package/dist/src/intl/fa.d.ts +117 -0
  62. package/dist/src/intl/fa.d.ts.map +1 -0
  63. package/dist/src/intl/fa.js +258 -0
  64. package/dist/src/intl/fi.d.ts +117 -0
  65. package/dist/src/intl/fi.d.ts.map +1 -0
  66. package/dist/src/intl/fi.js +258 -0
  67. package/dist/src/intl/fil.d.ts +117 -0
  68. package/dist/src/intl/fil.d.ts.map +1 -0
  69. package/dist/src/intl/fil.js +258 -0
  70. package/dist/src/intl/fr.d.ts +117 -0
  71. package/dist/src/intl/fr.d.ts.map +1 -0
  72. package/dist/src/intl/fr.js +258 -0
  73. package/dist/src/intl/he.d.ts +117 -0
  74. package/dist/src/intl/he.d.ts.map +1 -0
  75. package/dist/src/intl/he.js +258 -0
  76. package/dist/src/intl/hi.d.ts +117 -0
  77. package/dist/src/intl/hi.d.ts.map +1 -0
  78. package/dist/src/intl/hi.js +258 -0
  79. package/dist/src/intl/hr.d.ts +117 -0
  80. package/dist/src/intl/hr.d.ts.map +1 -0
  81. package/dist/src/intl/hr.js +265 -0
  82. package/dist/src/intl/hu.d.ts +63 -0
  83. package/dist/src/intl/hu.d.ts.map +1 -0
  84. package/dist/src/intl/hu.js +204 -0
  85. package/dist/src/intl/id.d.ts +117 -0
  86. package/dist/src/intl/id.d.ts.map +1 -0
  87. package/dist/src/intl/id.js +258 -0
  88. package/dist/src/intl/index.d.ts +42 -0
  89. package/dist/src/intl/index.d.ts.map +1 -1
  90. package/dist/src/intl/index.js +42 -0
  91. package/dist/src/intl/it.d.ts +117 -0
  92. package/dist/src/intl/it.d.ts.map +1 -0
  93. package/dist/src/intl/it.js +258 -0
  94. package/dist/src/intl/ja.d.ts +117 -0
  95. package/dist/src/intl/ja.d.ts.map +1 -0
  96. package/dist/src/intl/ja.js +258 -0
  97. package/dist/src/intl/ko.d.ts +117 -0
  98. package/dist/src/intl/ko.d.ts.map +1 -0
  99. package/dist/src/intl/ko.js +258 -0
  100. package/dist/src/intl/ml.d.ts +117 -0
  101. package/dist/src/intl/ml.d.ts.map +1 -0
  102. package/dist/src/intl/ml.js +258 -0
  103. package/dist/src/intl/mr.d.ts +117 -0
  104. package/dist/src/intl/mr.d.ts.map +1 -0
  105. package/dist/src/intl/mr.js +258 -0
  106. package/dist/src/intl/ms.d.ts +117 -0
  107. package/dist/src/intl/ms.d.ts.map +1 -0
  108. package/dist/src/intl/ms.js +245 -0
  109. package/dist/src/intl/nb.d.ts +63 -0
  110. package/dist/src/intl/nb.d.ts.map +1 -0
  111. package/dist/src/intl/nb.js +191 -0
  112. package/dist/src/intl/nl.d.ts +117 -0
  113. package/dist/src/intl/nl.d.ts.map +1 -0
  114. package/dist/src/intl/nl.js +258 -0
  115. package/dist/src/intl/pa.d.ts +117 -0
  116. package/dist/src/intl/pa.d.ts.map +1 -0
  117. package/dist/src/intl/pa.js +258 -0
  118. package/dist/src/intl/pl.d.ts +117 -0
  119. package/dist/src/intl/pl.d.ts.map +1 -0
  120. package/dist/src/intl/pl.js +242 -0
  121. package/dist/src/intl/pt-BR.d.ts +117 -0
  122. package/dist/src/intl/pt-BR.d.ts.map +1 -0
  123. package/dist/src/intl/pt-BR.js +258 -0
  124. package/dist/src/intl/pt.d.ts +117 -0
  125. package/dist/src/intl/pt.d.ts.map +1 -0
  126. package/dist/src/intl/pt.js +246 -0
  127. package/dist/src/intl/ro.d.ts +117 -0
  128. package/dist/src/intl/ro.d.ts.map +1 -0
  129. package/dist/src/intl/ro.js +258 -0
  130. package/dist/src/intl/sk.d.ts +117 -0
  131. package/dist/src/intl/sk.d.ts.map +1 -0
  132. package/dist/src/intl/sk.js +244 -0
  133. package/dist/src/intl/sl.d.ts +117 -0
  134. package/dist/src/intl/sl.d.ts.map +1 -0
  135. package/dist/src/intl/sl.js +258 -0
  136. package/dist/src/intl/sv.d.ts +117 -0
  137. package/dist/src/intl/sv.d.ts.map +1 -0
  138. package/dist/src/intl/sv.js +258 -0
  139. package/dist/src/intl/sw.d.ts +63 -0
  140. package/dist/src/intl/sw.d.ts.map +1 -0
  141. package/dist/src/intl/sw.js +191 -0
  142. package/dist/src/intl/ta.d.ts +117 -0
  143. package/dist/src/intl/ta.d.ts.map +1 -0
  144. package/dist/src/intl/ta.js +258 -0
  145. package/dist/src/intl/te.d.ts +117 -0
  146. package/dist/src/intl/te.d.ts.map +1 -0
  147. package/dist/src/intl/te.js +258 -0
  148. package/dist/src/intl/th.d.ts +117 -0
  149. package/dist/src/intl/th.d.ts.map +1 -0
  150. package/dist/src/intl/th.js +258 -0
  151. package/dist/src/intl/tr.d.ts +117 -0
  152. package/dist/src/intl/tr.d.ts.map +1 -0
  153. package/dist/src/intl/tr.js +255 -0
  154. package/dist/src/intl/uk.d.ts +117 -0
  155. package/dist/src/intl/uk.d.ts.map +1 -0
  156. package/dist/src/intl/uk.js +258 -0
  157. package/dist/src/intl/ur.d.ts +117 -0
  158. package/dist/src/intl/ur.d.ts.map +1 -0
  159. package/dist/src/intl/ur.js +245 -0
  160. package/dist/src/intl/vi.d.ts +117 -0
  161. package/dist/src/intl/vi.d.ts.map +1 -0
  162. package/dist/src/intl/vi.js +255 -0
  163. package/dist/src/intl/zh-CN.d.ts +117 -0
  164. package/dist/src/intl/zh-CN.d.ts.map +1 -0
  165. package/dist/src/intl/zh-CN.js +258 -0
  166. package/dist/src/intl/zh-TW.d.ts +117 -0
  167. package/dist/src/intl/zh-TW.d.ts.map +1 -0
  168. package/dist/src/intl/zh-TW.js +258 -0
  169. package/dist/src/local-first/Owner.d.ts +156 -62
  170. package/dist/src/local-first/Owner.d.ts.map +1 -1
  171. package/dist/src/local-first/Owner.js +119 -20
  172. package/package.json +1 -1
  173. package/src/Function.ts +2 -0
  174. package/src/Http.ts +9 -0
  175. package/src/Number.ts +85 -14
  176. package/src/Object.ts +2 -0
  177. package/src/RefCount.ts +2 -0
  178. package/src/Relation.ts +4 -0
  179. package/src/Resource.ts +2 -0
  180. package/src/Result.ts +397 -560
  181. package/src/Schedule.ts +1 -1
  182. package/src/StackTrace.ts +2 -0
  183. package/src/Task.ts +1145 -1225
  184. package/src/Time.ts +110 -62
  185. package/src/Type.ts +2842 -835
  186. package/src/Types.ts +0 -49
  187. package/src/intl/_en.ts +497 -0
  188. package/src/intl/ar.ts +417 -0
  189. package/src/intl/bn.ts +486 -0
  190. package/src/intl/ca.ts +488 -0
  191. package/src/intl/cs.ts +131 -32
  192. package/src/intl/da.ts +488 -0
  193. package/src/intl/de.ts +488 -0
  194. package/src/intl/el.ts +494 -0
  195. package/src/intl/es.ts +488 -0
  196. package/src/intl/fa.ts +487 -0
  197. package/src/intl/fi.ts +487 -0
  198. package/src/intl/fil.ts +488 -0
  199. package/src/intl/fr.ts +488 -0
  200. package/src/intl/he.ts +486 -0
  201. package/src/intl/hi.ts +487 -0
  202. package/src/intl/hr.ts +494 -0
  203. package/src/intl/hu.ts +387 -0
  204. package/src/intl/id.ts +487 -0
  205. package/src/intl/index.ts +42 -0
  206. package/src/intl/it.ts +488 -0
  207. package/src/intl/ja.ts +488 -0
  208. package/src/intl/ko.ts +487 -0
  209. package/src/intl/ml.ts +487 -0
  210. package/src/intl/mr.ts +487 -0
  211. package/src/intl/ms.ts +410 -0
  212. package/src/intl/nb.ts +364 -0
  213. package/src/intl/nl.ts +488 -0
  214. package/src/intl/pa.ts +487 -0
  215. package/src/intl/pl.ts +450 -0
  216. package/src/intl/pt-BR.ts +487 -0
  217. package/src/intl/pt.ts +424 -0
  218. package/src/intl/ro.ts +488 -0
  219. package/src/intl/sk.ts +412 -0
  220. package/src/intl/sl.ts +487 -0
  221. package/src/intl/sv.ts +488 -0
  222. package/src/intl/sw.ts +324 -0
  223. package/src/intl/ta.ts +487 -0
  224. package/src/intl/te.ts +487 -0
  225. package/src/intl/th.ts +484 -0
  226. package/src/intl/tr.ts +487 -0
  227. package/src/intl/uk.ts +488 -0
  228. package/src/intl/ur.ts +410 -0
  229. package/src/intl/vi.ts +435 -0
  230. package/src/intl/zh-CN.ts +482 -0
  231. package/src/intl/zh-TW.ts +482 -0
  232. package/src/local-first/Owner.ts +156 -62
package/src/Number.ts CHANGED
@@ -11,21 +11,86 @@ import type { Result } from "./Result.ts";
11
11
  import { err, ok } from "./Result.ts";
12
12
  import {
13
13
  brand,
14
+ Digit1To9,
15
+ Digit1To99,
14
16
  lessThanOrEqualTo,
15
17
  onePositiveInt,
16
18
  NonNegativeInt,
17
19
  PositiveInt,
18
20
  Ratio,
21
+ templateLiteral,
22
+ union,
19
23
  } from "./Type.ts";
20
- import type {
21
- Digit,
22
- Digit1To9,
23
- Digit1To99,
24
- Predicate,
25
- WidenLiteral,
26
- } from "./Types.ts";
24
+ import type { Predicate, WidenLiteral } from "./Types.ts";
25
+
26
+ /** Integer literal from `1` to `99`. */
27
+ export type Int1To99 = Digit1To99 extends `${infer Value extends number}`
28
+ ? Value
29
+ : never;
30
+
31
+ /** Integer literal from `1` to `100`. */
32
+ export type Int1To100 = Int1To99 | 100;
33
+
34
+ /**
35
+ * Integer literal from 0 to 100 or {@link NonNegativeInt}.
36
+ *
37
+ * Convenience input accepting integer literals from 0 to 100 or an
38
+ * already-validated {@link NonNegativeInt} for larger or dynamic values.
39
+ *
40
+ * ### Example
41
+ *
42
+ * ```ts
43
+ * import {
44
+ * NonNegativeInt,
45
+ * type Int0To100OrNonNegativeInt,
46
+ * } from "@evolu/common";
47
+ *
48
+ * const literal: Int0To100OrNonNegativeInt = 10;
49
+ * const validated: Int0To100OrNonNegativeInt = NonNegativeInt.orThrow(101);
50
+ *
51
+ * assert(literal === 10);
52
+ * assert(validated === 101);
53
+ * ```
54
+ */
55
+ export type Int0To100OrNonNegativeInt = 0 | Int1To100 | NonNegativeInt;
27
56
 
28
- /** Percentage represented as a readable literal or a validated ratio. */
57
+ /**
58
+ * {@link Int1To100} or {@link PositiveInt}.
59
+ *
60
+ * Convenience input accepting integer literals from 1 to 100 or an
61
+ * already-validated {@link PositiveInt} for larger or dynamic values.
62
+ *
63
+ * ### Example
64
+ *
65
+ * ```ts
66
+ * import { PositiveInt, type Int1To100OrPositiveInt } from "@evolu/common";
67
+ *
68
+ * const literal: Int1To100OrPositiveInt = 10;
69
+ * const validated: Int1To100OrPositiveInt = PositiveInt.orThrow(101);
70
+ *
71
+ * assert(literal === 10);
72
+ * assert(validated === 101);
73
+ * ```
74
+ */
75
+ export type Int1To100OrPositiveInt = Int1To100 | PositiveInt;
76
+
77
+ /**
78
+ * {@link PercentageLiteral} or {@link Ratio}.
79
+ *
80
+ * Convenience input accepting a readable {@link PercentageLiteral} or a
81
+ * validated {@link Ratio}. APIs normalize it to `Ratio`.
82
+ *
83
+ * ### Example
84
+ *
85
+ * ```ts
86
+ * import { Ratio, jitter } from "@evolu/common";
87
+ *
88
+ * const readableJitter = jitter("50%");
89
+ * const computedJitter = jitter(Ratio.orThrow(0.5));
90
+ *
91
+ * expectTypeOf(readableJitter).toEqualTypeOf(computedJitter);
92
+ * ```
93
+ */
29
94
  export type Percentage = PercentageLiteral | Ratio;
30
95
 
31
96
  /**
@@ -34,8 +99,18 @@ export type Percentage = PercentageLiteral | Ratio;
34
99
  * Decimal literals support one decimal place. Use {@link Ratio} for computed
35
100
  * values or greater precision.
36
101
  */
37
- export type PercentageLiteral =
38
- "0%" | "100%" | `${Digit1To99}%` | `${Digit | Digit1To99}.${Digit1To9}%`;
102
+ export const PercentageLiteral = /*#__PURE__*/ union(
103
+ "0%",
104
+ "100%",
105
+ /*#__PURE__*/ templateLiteral(Digit1To99, "%"),
106
+ /*#__PURE__*/ templateLiteral(
107
+ /*#__PURE__*/ union("0", Digit1To99),
108
+ ".",
109
+ Digit1To9,
110
+ "%",
111
+ ),
112
+ );
113
+ export type PercentageLiteral = typeof PercentageLiteral.Output;
39
114
 
40
115
  /** Converts a {@link Percentage} to its numeric {@link Ratio}. */
41
116
  export const percentageToRatio = (percentage: Percentage): Ratio =>
@@ -45,10 +120,6 @@ export const percentageToRatio = (percentage: Percentage): Ratio =>
45
120
 
46
121
  export const increment = (n: number): number => n + 1;
47
122
 
48
- /** Increments a positive integer, saturating at the maximum safe integer. */
49
- export const incrementPositiveInt = (n: PositiveInt): PositiveInt =>
50
- PositiveInt.orNull(increment(n)) ?? n;
51
-
52
123
  export const decrement = (n: number): number => n - 1;
53
124
 
54
125
  /** Clamps a number within a given range. */
package/src/Object.ts CHANGED
@@ -279,6 +279,8 @@ export function createMutableRecord<
279
279
  K extends string = string,
280
280
  V = unknown,
281
281
  >(): Record<K, V>;
282
+
283
+ /** Creates a mutable null-prototype copy of an object. */
282
284
  export function createMutableRecord<T extends object>(
283
285
  source: T,
284
286
  ): { -readonly [K in keyof T]: T[K] };
package/src/RefCount.ts CHANGED
@@ -88,6 +88,8 @@ export interface CreateRefCountByKeyOptions<
88
88
 
89
89
  /** Creates {@link RefCountByKey}. */
90
90
  export function createRefCountByKey<TKey = unknown>(): RefCountByKey<TKey>;
91
+
92
+ /** Creates {@link RefCountByKey} with custom logical key lookup. */
91
93
  export function createRefCountByKey<TKey, L>(
92
94
  options: CreateRefCountByKeyOptions<TKey, L>,
93
95
  ): RefCountByKey<TKey>;
package/src/Relation.ts CHANGED
@@ -181,6 +181,8 @@ export interface CreateRelationOptions<A, B, LA = A, LB = B> {
181
181
 
182
182
  /** Creates a {@link Relation}. */
183
183
  export function createRelation<A, B>(): Relation<A, B>;
184
+
185
+ /** Creates a {@link Relation} with custom logical key lookups. */
184
186
  export function createRelation<A, B, LA, LB>(
185
187
  options: CreateRelationOptions<A, B, LA, LB>,
186
188
  ): Relation<A, B>;
@@ -371,6 +373,8 @@ export interface RefCountedRelation<A, B> {
371
373
 
372
374
  /** Creates a {@link RefCountedRelation}. */
373
375
  export function createRefCountedRelation<A, B>(): RefCountedRelation<A, B>;
376
+
377
+ /** Creates a {@link RefCountedRelation} with custom logical key lookups. */
374
378
  export function createRefCountedRelation<A, B, LA, LB>(
375
379
  options: CreateRelationOptions<A, B, LA, LB>,
376
380
  ): RefCountedRelation<A, B>;
package/src/Resource.ts CHANGED
@@ -705,6 +705,8 @@ export function createSharedResourceByKey<
705
705
  >(
706
706
  create: (key: K) => Task<T, never, D>,
707
707
  ): Task<SharedResourceByKey<K, T>, never, D>;
708
+
709
+ /** Creates {@link SharedResourceByKey} with lookup or lifecycle options. */
708
710
  export function createSharedResourceByKey<K, T extends Resource, D, L = K>(
709
711
  create: (key: K) => Task<T, never, D>,
710
712
  options: SharedResourceByKeyOptions<K, L>,