@evolu/common 8.9.0 → 8.11.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.
- package/dist/src/Bytes.d.ts +647 -0
- package/dist/src/Bytes.d.ts.map +1 -0
- package/dist/src/{Binary.js → Bytes.js} +266 -16
- package/dist/src/Config.d.ts +142 -0
- package/dist/src/Config.d.ts.map +1 -0
- package/dist/src/Config.js +181 -0
- package/dist/src/Console.d.ts +62 -7
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +20 -4
- package/dist/src/Crypto.d.ts +76 -4
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +55 -4
- package/dist/src/Error.d.ts +45 -0
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Error.js +69 -0
- package/dist/src/Fs.d.ts +376 -0
- package/dist/src/Fs.d.ts.map +1 -0
- package/dist/src/Fs.js +113 -0
- package/dist/src/Identicon.d.ts +2 -2
- package/dist/src/Identicon.js +2 -2
- package/dist/src/LeakDetector.d.ts +22 -3
- package/dist/src/LeakDetector.d.ts.map +1 -1
- package/dist/src/LeakDetector.js +12 -2
- package/dist/src/LockManager.d.ts +8 -0
- package/dist/src/LockManager.d.ts.map +1 -1
- package/dist/src/LockManager.js +6 -0
- package/dist/src/Number.d.ts +50 -7
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +47 -8
- package/dist/src/Object.d.ts +32 -0
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +46 -0
- package/dist/src/Platform.d.ts +47 -7
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +24 -5
- package/dist/src/Random.d.ts +25 -2
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +14 -2
- package/dist/src/Resource.d.ts +156 -1
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +201 -72
- package/dist/src/Schedule.d.ts +11 -10
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +1 -1
- package/dist/src/Sqlite.d.ts +132 -16
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +64 -10
- package/dist/src/Task.d.ts +15 -4
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +41 -15
- package/dist/src/Test.d.ts +9 -0
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +4 -0
- package/dist/src/Time.d.ts +179 -20
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +95 -6
- package/dist/src/Type.d.ts +3056 -1539
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +2548 -584
- package/dist/src/WebSocket.d.ts +164 -13
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +133 -24
- package/dist/src/Worker.d.ts +90 -8
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +28 -2
- package/dist/src/index.d.ts +9 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -4
- package/dist/src/intl/_en.d.ts +24 -1
- package/dist/src/intl/_en.d.ts.map +1 -1
- package/dist/src/intl/_en.js +20 -0
- package/dist/src/intl/ar.d.ts +24 -1
- package/dist/src/intl/ar.d.ts.map +1 -1
- package/dist/src/intl/ar.js +20 -0
- package/dist/src/intl/bn.d.ts +24 -1
- package/dist/src/intl/bn.d.ts.map +1 -1
- package/dist/src/intl/bn.js +20 -0
- package/dist/src/intl/ca.d.ts +24 -1
- package/dist/src/intl/ca.d.ts.map +1 -1
- package/dist/src/intl/ca.js +20 -0
- package/dist/src/intl/cs.d.ts +24 -1
- package/dist/src/intl/cs.d.ts.map +1 -1
- package/dist/src/intl/cs.js +20 -0
- package/dist/src/intl/da.d.ts +24 -1
- package/dist/src/intl/da.d.ts.map +1 -1
- package/dist/src/intl/da.js +20 -0
- package/dist/src/intl/de.d.ts +24 -1
- package/dist/src/intl/de.d.ts.map +1 -1
- package/dist/src/intl/de.js +20 -0
- package/dist/src/intl/el.d.ts +24 -1
- package/dist/src/intl/el.d.ts.map +1 -1
- package/dist/src/intl/el.js +20 -0
- package/dist/src/intl/es.d.ts +24 -1
- package/dist/src/intl/es.d.ts.map +1 -1
- package/dist/src/intl/es.js +20 -0
- package/dist/src/intl/fa.d.ts +24 -1
- package/dist/src/intl/fa.d.ts.map +1 -1
- package/dist/src/intl/fa.js +20 -0
- package/dist/src/intl/fi.d.ts +24 -1
- package/dist/src/intl/fi.d.ts.map +1 -1
- package/dist/src/intl/fi.js +20 -0
- package/dist/src/intl/fil.d.ts +24 -1
- package/dist/src/intl/fil.d.ts.map +1 -1
- package/dist/src/intl/fil.js +20 -0
- package/dist/src/intl/fr.d.ts +24 -1
- package/dist/src/intl/fr.d.ts.map +1 -1
- package/dist/src/intl/fr.js +20 -0
- package/dist/src/intl/he.d.ts +24 -1
- package/dist/src/intl/he.d.ts.map +1 -1
- package/dist/src/intl/he.js +20 -0
- package/dist/src/intl/hi.d.ts +24 -1
- package/dist/src/intl/hi.d.ts.map +1 -1
- package/dist/src/intl/hi.js +20 -0
- package/dist/src/intl/hr.d.ts +24 -1
- package/dist/src/intl/hr.d.ts.map +1 -1
- package/dist/src/intl/hr.js +20 -0
- package/dist/src/intl/hu.d.ts +22 -1
- package/dist/src/intl/hu.d.ts.map +1 -1
- package/dist/src/intl/hu.js +18 -0
- package/dist/src/intl/id.d.ts +24 -1
- package/dist/src/intl/id.d.ts.map +1 -1
- package/dist/src/intl/id.js +20 -0
- package/dist/src/intl/it.d.ts +24 -1
- package/dist/src/intl/it.d.ts.map +1 -1
- package/dist/src/intl/it.js +20 -0
- package/dist/src/intl/ja.d.ts +24 -1
- package/dist/src/intl/ja.d.ts.map +1 -1
- package/dist/src/intl/ja.js +20 -0
- package/dist/src/intl/ko.d.ts +24 -1
- package/dist/src/intl/ko.d.ts.map +1 -1
- package/dist/src/intl/ko.js +20 -0
- package/dist/src/intl/ml.d.ts +24 -1
- package/dist/src/intl/ml.d.ts.map +1 -1
- package/dist/src/intl/ml.js +20 -0
- package/dist/src/intl/mr.d.ts +24 -1
- package/dist/src/intl/mr.d.ts.map +1 -1
- package/dist/src/intl/mr.js +20 -0
- package/dist/src/intl/ms.d.ts +24 -1
- package/dist/src/intl/ms.d.ts.map +1 -1
- package/dist/src/intl/ms.js +20 -0
- package/dist/src/intl/nb.d.ts +22 -1
- package/dist/src/intl/nb.d.ts.map +1 -1
- package/dist/src/intl/nb.js +18 -0
- package/dist/src/intl/nl.d.ts +24 -1
- package/dist/src/intl/nl.d.ts.map +1 -1
- package/dist/src/intl/nl.js +20 -0
- package/dist/src/intl/pa.d.ts +24 -1
- package/dist/src/intl/pa.d.ts.map +1 -1
- package/dist/src/intl/pa.js +20 -0
- package/dist/src/intl/pl.d.ts +23 -0
- package/dist/src/intl/pl.d.ts.map +1 -1
- package/dist/src/intl/pl.js +20 -0
- package/dist/src/intl/pt-BR.d.ts +24 -1
- package/dist/src/intl/pt-BR.d.ts.map +1 -1
- package/dist/src/intl/pt-BR.js +20 -0
- package/dist/src/intl/pt.d.ts +24 -1
- package/dist/src/intl/pt.d.ts.map +1 -1
- package/dist/src/intl/pt.js +20 -0
- package/dist/src/intl/ro.d.ts +24 -1
- package/dist/src/intl/ro.d.ts.map +1 -1
- package/dist/src/intl/ro.js +20 -0
- package/dist/src/intl/sk.d.ts +24 -1
- package/dist/src/intl/sk.d.ts.map +1 -1
- package/dist/src/intl/sk.js +20 -0
- package/dist/src/intl/sl.d.ts +24 -1
- package/dist/src/intl/sl.d.ts.map +1 -1
- package/dist/src/intl/sl.js +20 -0
- package/dist/src/intl/sv.d.ts +24 -1
- package/dist/src/intl/sv.d.ts.map +1 -1
- package/dist/src/intl/sv.js +20 -0
- package/dist/src/intl/sw.d.ts +21 -0
- package/dist/src/intl/sw.d.ts.map +1 -1
- package/dist/src/intl/sw.js +18 -0
- package/dist/src/intl/ta.d.ts +24 -1
- package/dist/src/intl/ta.d.ts.map +1 -1
- package/dist/src/intl/ta.js +20 -0
- package/dist/src/intl/te.d.ts +24 -1
- package/dist/src/intl/te.d.ts.map +1 -1
- package/dist/src/intl/te.js +20 -0
- package/dist/src/intl/th.d.ts +24 -1
- package/dist/src/intl/th.d.ts.map +1 -1
- package/dist/src/intl/th.js +20 -0
- package/dist/src/intl/tr.d.ts +24 -1
- package/dist/src/intl/tr.d.ts.map +1 -1
- package/dist/src/intl/tr.js +20 -0
- package/dist/src/intl/uk.d.ts +80 -57
- package/dist/src/intl/uk.d.ts.map +1 -1
- package/dist/src/intl/uk.js +174 -149
- package/dist/src/intl/ur.d.ts +24 -1
- package/dist/src/intl/ur.d.ts.map +1 -1
- package/dist/src/intl/ur.js +20 -0
- package/dist/src/intl/vi.d.ts +24 -1
- package/dist/src/intl/vi.d.ts.map +1 -1
- package/dist/src/intl/vi.js +20 -0
- package/dist/src/intl/zh-CN.d.ts +24 -1
- package/dist/src/intl/zh-CN.d.ts.map +1 -1
- package/dist/src/intl/zh-CN.js +20 -0
- package/dist/src/intl/zh-TW.d.ts +24 -1
- package/dist/src/intl/zh-TW.d.ts.map +1 -1
- package/dist/src/intl/zh-TW.js +20 -0
- package/dist/src/local-first/Db.d.ts +52 -3
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +412 -137
- package/dist/src/local-first/Evolu.d.ts +336 -211
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +102 -15
- package/dist/src/local-first/Owner.d.ts +13 -30
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +13 -30
- package/dist/src/local-first/Protocol.d.ts +95 -17
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +119 -39
- package/dist/src/local-first/Query.d.ts +8 -15
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Schema.d.ts +345 -21
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +214 -17
- package/dist/src/local-first/Shared.d.ts +537 -22
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +1437 -234
- package/dist/src/local-first/Storage.d.ts +192 -14
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +82 -21
- package/dist/src/local-first/Timestamp.d.ts +392 -41
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +404 -82
- package/dist/src/local-first/index.d.ts +0 -1
- package/dist/src/local-first/index.d.ts.map +1 -1
- package/dist/src/local-first/index.js +0 -1
- package/package.json +1 -1
- package/src/Assert.test.ts +2 -5
- package/src/{Binary.test.ts → Bytes.test.ts} +286 -1
- package/src/{Binary.ts → Bytes.ts} +652 -21
- package/src/Config.test.ts +668 -0
- package/src/Config.ts +410 -0
- package/src/Console.ts +62 -7
- package/src/Crypto.ts +76 -4
- package/src/Eq.test.ts +2 -3
- package/src/Error.test.ts +76 -3
- package/src/Error.ts +71 -0
- package/src/Fs.test.ts +105 -0
- package/src/Fs.ts +488 -0
- package/src/Identicon.ts +2 -2
- package/src/LeakDetector.ts +22 -3
- package/src/LockManager.ts +8 -0
- package/src/Number.test.ts +82 -18
- package/src/Number.ts +76 -8
- package/src/Object.test.ts +139 -10
- package/src/Object.ts +49 -0
- package/src/Platform.ts +50 -8
- package/src/Random.ts +25 -2
- package/src/Resource.test.ts +837 -0
- package/src/Resource.ts +235 -15
- package/src/Schedule.test.ts +50 -12
- package/src/Schedule.ts +24 -14
- package/src/Sqlite.ts +138 -18
- package/src/Task.test.ts +189 -8
- package/src/Task.ts +56 -17
- package/src/Test.ts +9 -0
- package/src/Time.test.ts +82 -11
- package/src/Time.ts +246 -24
- package/src/Type.test.ts +3994 -1119
- package/src/Type.ts +7258 -3842
- package/src/Types.test.ts +4 -14
- package/src/WebSocket.ts +313 -40
- package/src/Worker.ts +90 -8
- package/src/index.ts +18 -7
- package/src/intl/_en.ts +70 -0
- package/src/intl/ar.ts +71 -0
- package/src/intl/bn.ts +70 -0
- package/src/intl/ca.ts +70 -0
- package/src/intl/cs.ts +70 -0
- package/src/intl/da.ts +70 -0
- package/src/intl/de.ts +70 -0
- package/src/intl/el.ts +70 -0
- package/src/intl/es.ts +70 -0
- package/src/intl/fa.ts +70 -0
- package/src/intl/fi.ts +70 -0
- package/src/intl/fil.ts +70 -0
- package/src/intl/fr.ts +70 -0
- package/src/intl/he.ts +70 -0
- package/src/intl/hi.ts +70 -0
- package/src/intl/hr.ts +70 -0
- package/src/intl/hu.ts +69 -0
- package/src/intl/id.ts +70 -0
- package/src/intl/intl.test.ts +819 -1
- package/src/intl/it.ts +70 -0
- package/src/intl/ja.ts +70 -0
- package/src/intl/ko.ts +68 -0
- package/src/intl/ml.ts +70 -0
- package/src/intl/mr.ts +70 -0
- package/src/intl/ms.ts +71 -0
- package/src/intl/nb.ts +69 -0
- package/src/intl/nl.ts +70 -0
- package/src/intl/pa.ts +70 -0
- package/src/intl/pl.ts +63 -0
- package/src/intl/pt-BR.ts +70 -0
- package/src/intl/pt.ts +71 -0
- package/src/intl/ro.ts +70 -0
- package/src/intl/sk.ts +71 -0
- package/src/intl/sl.ts +70 -0
- package/src/intl/sv.ts +70 -0
- package/src/intl/sw.ts +62 -0
- package/src/intl/ta.ts +70 -0
- package/src/intl/te.ts +70 -0
- package/src/intl/th.ts +68 -0
- package/src/intl/tr.ts +70 -0
- package/src/intl/uk.ts +228 -155
- package/src/intl/ur.ts +70 -0
- package/src/intl/vi.ts +70 -0
- package/src/intl/zh-CN.ts +68 -0
- package/src/intl/zh-TW.ts +68 -0
- package/src/local-first/Db.ts +644 -339
- package/src/local-first/Evolu.test.ts +686 -21
- package/src/local-first/Evolu.ts +450 -228
- package/src/local-first/Owner.ts +13 -30
- package/src/local-first/Protocol.test.ts +618 -11
- package/src/local-first/Protocol.ts +197 -73
- package/src/local-first/Query.ts +8 -15
- package/src/local-first/Schema.test.ts +143 -0
- package/src/local-first/Schema.ts +374 -24
- package/src/local-first/Shared.test.ts +7731 -559
- package/src/local-first/Shared.ts +2036 -267
- package/src/local-first/Storage.ts +219 -33
- package/src/local-first/Timestamp.test.ts +344 -70
- package/src/local-first/Timestamp.ts +435 -119
- package/src/local-first/index.ts +0 -1
- package/dist/src/Binary.d.ts +0 -254
- package/dist/src/Binary.d.ts.map +0 -1
- package/dist/src/local-first/Error.d.ts +0 -12
- package/dist/src/local-first/Error.d.ts.map +0 -1
- package/dist/src/local-first/Error.js +0 -6
- package/dist/src/local-first/LocalAuth.d.ts +0 -150
- package/dist/src/local-first/LocalAuth.d.ts.map +0 -1
- package/dist/src/local-first/LocalAuth.js +0 -179
- package/src/local-first/Error.ts +0 -17
- package/src/local-first/LocalAuth.ts +0 -457
package/dist/src/Time.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Time representations, durations, and scheduling utilities.
|
|
3
3
|
*
|
|
4
|
+
* Durations follow a pattern that other quantities in Evolu repeat, such as
|
|
5
|
+
* sizes in Bytes.ts:
|
|
6
|
+
*
|
|
7
|
+
* - {@link Millis} is the canonical unit, a validated number of milliseconds.
|
|
8
|
+
* - {@link DurationLiteral} is the human-readable form, such as `"1.5s"`,
|
|
9
|
+
* validated at compile time and runtime.
|
|
10
|
+
* - {@link Duration} is what APIs accept: `DurationLiteral | Millis`.
|
|
11
|
+
* - {@link durationToMillis} normalizes a `Duration` to `Millis`.
|
|
12
|
+
*
|
|
4
13
|
* @module
|
|
5
14
|
*/
|
|
15
|
+
import { safelyStringifyUnknownValue } from "./String.js";
|
|
6
16
|
import { assert } from "./Assert.js";
|
|
7
17
|
import { exhaustiveCheck } from "./Function.js";
|
|
8
|
-
import { brand, Digit, Digit1To23, Digit1To51, Digit1To59, Digit1To6, Digit1To9, Digit1To99, lessThan, NonNegativeInt, positive, templateLiteral, union, } from "./Type.js";
|
|
18
|
+
import { brand, createTypeWithError, Digit, Digit1To23, Digit1To51, Digit1To59, Digit1To6, Digit1To9, Digit1To99, lessThan, NonNegativeInt, positive, templateLiteral, union, } from "./Type.js";
|
|
9
19
|
/**
|
|
10
20
|
* Creates a {@link Time} using `Date.now()`, `performance`, and
|
|
11
21
|
* `globalThis.setTimeout`.
|
|
@@ -17,6 +27,8 @@ import { brand, Digit, Digit1To23, Digit1To51, Digit1To59, Digit1To6, Digit1To9,
|
|
|
17
27
|
*
|
|
18
28
|
* Throws if the system clock returns an out-of-range value. This is intentional
|
|
19
29
|
* — there's no reasonable fallback for a misconfigured clock.
|
|
30
|
+
*
|
|
31
|
+
* @group Core
|
|
20
32
|
*/
|
|
21
33
|
export const createTime = () => {
|
|
22
34
|
const timeoutOwner = Symbol("Time");
|
|
@@ -96,6 +108,8 @@ const clearTimeoutId = (owner, id) => {
|
|
|
96
108
|
* wall-clock or performance `now()` call. `"microtask"` increments after the
|
|
97
109
|
* current turn, while `"sync"` increments immediately after each read. Omit it
|
|
98
110
|
* to keep time fixed until `advance()` is called.
|
|
111
|
+
*
|
|
112
|
+
* @group Testing
|
|
99
113
|
*/
|
|
100
114
|
export const testCreateTime = (options) => {
|
|
101
115
|
const startAt = options?.startAt ?? minMillis;
|
|
@@ -190,18 +204,34 @@ const maxMillisWithInfinity = 281474976710655;
|
|
|
190
204
|
*
|
|
191
205
|
* If a system clock exceeds this range, operations will throw. This is
|
|
192
206
|
* intentional — there's no reasonable fallback for a misconfigured clock.
|
|
207
|
+
*
|
|
208
|
+
* @group Millis
|
|
193
209
|
*/
|
|
194
210
|
export const Millis = /*#__PURE__*/ brand("Millis",
|
|
195
211
|
/*#__PURE__*/ lessThan(maxMillisWithInfinity)(NonNegativeInt));
|
|
196
|
-
/**
|
|
212
|
+
/**
|
|
213
|
+
* Positive {@link Millis} value.
|
|
214
|
+
*
|
|
215
|
+
* @group Millis
|
|
216
|
+
*/
|
|
197
217
|
export const PositiveMillis = /*#__PURE__*/ positive(Millis);
|
|
198
|
-
/**
|
|
218
|
+
/**
|
|
219
|
+
* Minimum {@link Millis} value.
|
|
220
|
+
*
|
|
221
|
+
* @group Millis
|
|
222
|
+
*/
|
|
199
223
|
export const minMillis = 0;
|
|
200
|
-
/**
|
|
224
|
+
/**
|
|
225
|
+
* Maximum {@link Millis} value.
|
|
226
|
+
*
|
|
227
|
+
* @group Millis
|
|
228
|
+
*/
|
|
201
229
|
export const maxMillis = (maxMillisWithInfinity - 1);
|
|
202
230
|
/**
|
|
203
231
|
* Converts a number to {@link Millis}, rounding to the nearest millisecond and
|
|
204
232
|
* saturating overflow at {@link maxMillis}.
|
|
233
|
+
*
|
|
234
|
+
* @group Millis
|
|
205
235
|
*/
|
|
206
236
|
export const saturateMillis = (value) => Millis.orNull(Math.max(0, Math.round(value))) ?? maxMillis;
|
|
207
237
|
/**
|
|
@@ -209,18 +239,28 @@ export const saturateMillis = (value) => Millis.orNull(Math.max(0, Math.round(va
|
|
|
209
239
|
*
|
|
210
240
|
* This is a safe cast because {@link Millis} guarantees a valid timestamp range
|
|
211
241
|
* that always produces a valid ISO string.
|
|
242
|
+
*
|
|
243
|
+
* @group Millis
|
|
212
244
|
*/
|
|
213
245
|
export const millisToDateIso = (value) => new Date(value).toISOString();
|
|
214
246
|
/**
|
|
215
247
|
* Returns the elapsed fractional milliseconds between two performance times.
|
|
216
248
|
*
|
|
217
249
|
* Throws if `end` precedes `start`.
|
|
250
|
+
*
|
|
251
|
+
* @group Performance
|
|
218
252
|
*/
|
|
219
253
|
export const performanceDurationBetween = (start, end) => {
|
|
220
254
|
assert(end >= start, "Performance end time must not precede start time");
|
|
221
255
|
return (end - start);
|
|
222
256
|
};
|
|
223
|
-
|
|
257
|
+
// Keep these annotations concrete. Generic unit wrappers add thousands of
|
|
258
|
+
// compiler instantiations to pnpm bench:type.
|
|
259
|
+
/**
|
|
260
|
+
* Milliseconds duration: `"1ms"` to `"999ms"`. See {@link DurationLiteral}.
|
|
261
|
+
*
|
|
262
|
+
* @group Durations
|
|
263
|
+
*/
|
|
224
264
|
export const DurationLiteralMilliseconds = /*#__PURE__*/ union(
|
|
225
265
|
/*#__PURE__*/ templateLiteral(Digit1To9, "ms"),
|
|
226
266
|
/*#__PURE__*/ templateLiteral(Digit1To9, Digit, "ms"),
|
|
@@ -228,6 +268,8 @@ export const DurationLiteralMilliseconds = /*#__PURE__*/ union(
|
|
|
228
268
|
/**
|
|
229
269
|
* Seconds duration: `"1s"` to `"59s"` or `"1.1s"` to `"59.9s"`. See
|
|
230
270
|
* {@link DurationLiteral}.
|
|
271
|
+
*
|
|
272
|
+
* @group Durations
|
|
231
273
|
*/
|
|
232
274
|
export const DurationLiteralSeconds = /*#__PURE__*/ union(
|
|
233
275
|
/*#__PURE__*/ templateLiteral(Digit1To59, "s"),
|
|
@@ -235,6 +277,8 @@ export const DurationLiteralSeconds = /*#__PURE__*/ union(
|
|
|
235
277
|
/**
|
|
236
278
|
* Minutes duration: `"1m"` to `"59m"` or `"1.1m"` to `"59.9m"`. See
|
|
237
279
|
* {@link DurationLiteral}.
|
|
280
|
+
*
|
|
281
|
+
* @group Durations
|
|
238
282
|
*/
|
|
239
283
|
export const DurationLiteralMinutes = /*#__PURE__*/ union(
|
|
240
284
|
/*#__PURE__*/ templateLiteral(Digit1To59, "m"),
|
|
@@ -242,6 +286,8 @@ export const DurationLiteralMinutes = /*#__PURE__*/ union(
|
|
|
242
286
|
/**
|
|
243
287
|
* Hours duration: `"1h"` to `"23h"` or `"1.1h"` to `"23.9h"`. See
|
|
244
288
|
* {@link DurationLiteral}.
|
|
289
|
+
*
|
|
290
|
+
* @group Durations
|
|
245
291
|
*/
|
|
246
292
|
export const DurationLiteralHours = /*#__PURE__*/ union(
|
|
247
293
|
/*#__PURE__*/ templateLiteral(Digit1To23, "h"),
|
|
@@ -249,6 +295,8 @@ export const DurationLiteralHours = /*#__PURE__*/ union(
|
|
|
249
295
|
/**
|
|
250
296
|
* Days duration: `"1d"` to `"6d"` or `"1.1d"` to `"6.9d"`. See
|
|
251
297
|
* {@link DurationLiteral}.
|
|
298
|
+
*
|
|
299
|
+
* @group Durations
|
|
252
300
|
*/
|
|
253
301
|
export const DurationLiteralDays = /*#__PURE__*/ union(
|
|
254
302
|
/*#__PURE__*/ templateLiteral(Digit1To6, "d"),
|
|
@@ -256,6 +304,8 @@ export const DurationLiteralDays = /*#__PURE__*/ union(
|
|
|
256
304
|
/**
|
|
257
305
|
* Weeks duration: `"1w"` to `"51w"` or `"1.1w"` to `"51.9w"`. See
|
|
258
306
|
* {@link DurationLiteral}.
|
|
307
|
+
*
|
|
308
|
+
* @group Durations
|
|
259
309
|
*/
|
|
260
310
|
export const DurationLiteralWeeks = /*#__PURE__*/ union(
|
|
261
311
|
/*#__PURE__*/ templateLiteral(Digit1To51, "w"),
|
|
@@ -263,10 +313,13 @@ export const DurationLiteralWeeks = /*#__PURE__*/ union(
|
|
|
263
313
|
/**
|
|
264
314
|
* Years duration: `"1y"` to `"99y"` or `"1.1y"` to `"99.9y"`. See
|
|
265
315
|
* {@link DurationLiteral}.
|
|
316
|
+
*
|
|
317
|
+
* @group Durations
|
|
266
318
|
*/
|
|
267
319
|
export const DurationLiteralYears = /*#__PURE__*/ union(
|
|
268
320
|
/*#__PURE__*/ templateLiteral(Digit1To99, "y"),
|
|
269
321
|
/*#__PURE__*/ templateLiteral(Digit1To99, ".", Digit1To9, "y"));
|
|
322
|
+
const durationLiteralSyntax = /*#__PURE__*/ union(DurationLiteralMilliseconds, DurationLiteralSeconds, DurationLiteralMinutes, DurationLiteralHours, DurationLiteralDays, DurationLiteralWeeks, DurationLiteralYears);
|
|
270
323
|
/**
|
|
271
324
|
* Duration literal Type with compile-time and runtime validation.
|
|
272
325
|
*
|
|
@@ -294,8 +347,35 @@ export const DurationLiteralYears = /*#__PURE__*/ union(
|
|
|
294
347
|
*
|
|
295
348
|
* See {@link Duration} for a type that also accepts {@link Millis}. Use
|
|
296
349
|
* {@link durationToMillis} to convert to milliseconds.
|
|
350
|
+
*
|
|
351
|
+
* Invalid values produce a {@link DurationLiteralError}.
|
|
352
|
+
*
|
|
353
|
+
* ### Example
|
|
354
|
+
*
|
|
355
|
+
* ```ts
|
|
356
|
+
* import {
|
|
357
|
+
* assertFalse,
|
|
358
|
+
* assertOk,
|
|
359
|
+
* assertType,
|
|
360
|
+
* DurationLiteral,
|
|
361
|
+
* } from "@evolu/common";
|
|
362
|
+
*
|
|
363
|
+
* // The TypeScript type accepts valid spellings and rejects the rest.
|
|
364
|
+
* const literal: DurationLiteral = "1.5s";
|
|
365
|
+
* assertType<Extract<DurationLiteral, "1000ms" | "60s" | "0s">, never>();
|
|
366
|
+
*
|
|
367
|
+
* // The runtime Type validates the same grammar.
|
|
368
|
+
* assertOk(DurationLiteral.fromUnknown(literal), "1.5s");
|
|
369
|
+
* assertFalse(DurationLiteral.is("1000ms"));
|
|
370
|
+
* ```
|
|
371
|
+
*
|
|
372
|
+
* @group Durations
|
|
297
373
|
*/
|
|
298
|
-
export const DurationLiteral = /*#__PURE__*/
|
|
374
|
+
export const DurationLiteral = /*#__PURE__*/ createTypeWithError("DurationLiteral", durationLiteralSyntax, (cause, value) => ({
|
|
375
|
+
type: "DurationLiteral",
|
|
376
|
+
value,
|
|
377
|
+
cause,
|
|
378
|
+
}), (error) => `The value ${safelyStringifyUnknownValue(error.value)} is not a duration literal. Use a value such as "500ms" or "1.5s".`);
|
|
299
379
|
export function durationToMillis(duration) {
|
|
300
380
|
if (typeof duration === "number")
|
|
301
381
|
return duration;
|
|
@@ -319,12 +399,16 @@ const durationUnits = {
|
|
|
319
399
|
* Frame budget at 60fps (16ms).
|
|
320
400
|
*
|
|
321
401
|
* Work exceeding this blocks a frame, causing visible jank in animations.
|
|
402
|
+
*
|
|
403
|
+
* @group Millis
|
|
322
404
|
*/
|
|
323
405
|
export const ms60fps = 16;
|
|
324
406
|
/**
|
|
325
407
|
* Frame budget at 120fps (8ms).
|
|
326
408
|
*
|
|
327
409
|
* For high refresh rate displays. Work exceeding this blocks a frame.
|
|
410
|
+
*
|
|
411
|
+
* @group Millis
|
|
328
412
|
*/
|
|
329
413
|
export const ms120fps = 8;
|
|
330
414
|
/**
|
|
@@ -333,6 +417,7 @@ export const ms120fps = 8;
|
|
|
333
417
|
* Tasks exceeding this are "long tasks" per web standards. Use with
|
|
334
418
|
* {@link yieldNow} to yield periodically and keep UI responsive.
|
|
335
419
|
*
|
|
420
|
+
* @group Millis
|
|
336
421
|
* @see https://web.dev/articles/optimize-long-tasks
|
|
337
422
|
*/
|
|
338
423
|
export const msLongTask = 50;
|
|
@@ -364,6 +449,8 @@ export const msLongTask = 50;
|
|
|
364
449
|
* "1d1h1m1.000s",
|
|
365
450
|
* );
|
|
366
451
|
* ```
|
|
452
|
+
*
|
|
453
|
+
* @group Millis
|
|
367
454
|
*/
|
|
368
455
|
export const formatMillisAsDuration = (millis) => {
|
|
369
456
|
const seconds = ((millis % durationUnits.m) / durationUnits.s).toFixed(3);
|
|
@@ -403,6 +490,8 @@ export const formatMillisAsDuration = (millis) => {
|
|
|
403
490
|
* "14:32:15.234",
|
|
404
491
|
* );
|
|
405
492
|
* ```
|
|
493
|
+
*
|
|
494
|
+
* @group Millis
|
|
406
495
|
*/
|
|
407
496
|
export const formatMillisAsClockTime = (millis) => {
|
|
408
497
|
const date = new Date(millis);
|