synstate 3.0.1 → 3.0.3
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/README.md +1 -1
- package/dist/core/base/create-child-observable.d.mts.map +1 -1
- package/dist/core/base/create-child-observable.mjs +6 -1
- package/dist/core/base/create-child-observable.mjs.map +1 -1
- package/dist/core/base/create-observable-base.d.mts.map +1 -1
- package/dist/core/base/create-observable-base.mjs +8 -1
- package/dist/core/base/create-observable-base.mjs.map +1 -1
- package/dist/core/create/from-abortable-promise.d.mts +46 -5
- package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
- package/dist/core/create/from-abortable-promise.mjs +41 -0
- package/dist/core/create/from-abortable-promise.mjs.map +1 -1
- package/dist/core/types/observable-family.d.mts +2 -2
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/types/observable-family.mjs +0 -4
- package/dist/core/types/observable-family.mjs.map +1 -1
- package/dist/core/types/timer.d.mts +11 -1
- package/dist/core/types/timer.d.mts.map +1 -1
- package/package.json +14 -11
- package/src/core/base/create-child-observable.mts +6 -1
- package/src/core/base/create-observable-base.mts +8 -1
- package/src/core/create/from-abortable-promise.mts +46 -5
- package/src/core/types/observable-family.mts +53 -34
- package/src/core/types/timer.mts +11 -2
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
- 🎯 **Simple State Management**: Easy-to-use `createState` and `createReducer` similar to React useState/useReducer for global state
|
|
25
25
|
- ⚡ **High Performance**: Optimized for fast state updates and minimal re-renders
|
|
26
26
|
- 🎨 **Type-Safe**: Full TypeScript support with precise type inference
|
|
27
|
-
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~4.6 kB min+gzip<!-- /bundle-size:synstate --> with
|
|
27
|
+
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~4.6 kB min+gzip<!-- /bundle-size:synstate --> with two external runtime dependencies ([ts-data-forge](https://www.npmjs.com/package/ts-data-forge) and [ts-std-forge](https://www.npmjs.com/package/ts-std-forge), and the first depends on the second)
|
|
28
28
|
- 🌐 **Framework Agnostic**: Works with React, Vue, Svelte, or vanilla JavaScript
|
|
29
29
|
- 🔄 **Reactive Updates**: Automatic propagation of state changes to all subscribers
|
|
30
30
|
- 📡 **Event System**: Built-in `createValueEmitter`, `createEventEmitter` for event-driven architecture
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EAGxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACjD,sEAAsE;IACtE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAE1D,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAClD,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;CACrC,CAAC,GACA,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE9B,KAAK,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,IAAI,QAAQ,CAAC;IACvE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEL,MAAM,MAAM,gCAAgC,CAC1C,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEL;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,EAAE,CAAC,SAAS,mBAAmB,iDAMrE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,mBACb,CACf,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CA0C1B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oCAAoC,GAC/C,CAAC,EACD,CAAC,SAAS,mBAAmB,UAErB,gCAAgC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAC7B,CACf,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,8BAA8B,CAAC,CAAC,EAAE,CAAC,CASrC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,CAAC,EAAE,CAAC,SAAS,mBAAmB,iDAMtE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,mBACb,CACf,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,KAChC,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CA6C3B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Arr } from 'ts-data-forge';
|
|
2
|
+
import { panic } from 'ts-std-forge';
|
|
2
3
|
import { isChildObservable, isManagerObservable, } from '../types/index.mjs';
|
|
3
4
|
import { maxDepth } from '../utils/index.mjs';
|
|
4
5
|
import { assembleObservable, createManagerObservableParts, createObservableBaseHandle, } from './create-observable-base.mjs';
|
|
@@ -133,7 +134,11 @@ const detectCircularDependency = (child, parents) => {
|
|
|
133
134
|
const mut_inPath = new Set([child.id]);
|
|
134
135
|
for (const parent of parents) {
|
|
135
136
|
if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {
|
|
136
|
-
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
panic('Circular dependency detected in observable graph: a child observable cannot be its own ancestor.');
|
|
137
142
|
}
|
|
138
143
|
}
|
|
139
144
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA4B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-observable-base.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"create-observable-base.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAS5B;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7C,EAAE,EAAE,YAAY,CAAC;IAEjB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAEjD,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B,WAAW,EAAE,MAAM,WAAW,CAAC;IAE/B,aAAa,EAAE,MAAM,OAAO,CAAC;IAE7B,QAAQ,EAAE,MAAM,OAAO,CAAC;IAExB,cAAc,EAAE,MAAM,OAAO,CAAC;IAE9B,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,KAAK,YAAY,CAAC;IAE7E,wEAAwE;IACxE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAE1D;;;;;OAKG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC,CAAC;AAEH,eAAO,MAAM,0BAA0B,GAAI,CAAC,gBAC5B,QAAQ,CAAC,CAAC,CAAC,KACxB,oBAAoB,CAAC,CAAC,CAwHxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAEtD,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;CACrC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GAAI,CAAC,UACpC,oBAAoB,CAAC,CAAC,CAAC,KAC9B,sBAAsB,CAAC,CAAC,CAiC1B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,QAAO,CAAC,CAChD,YAAY,EAAE,WAAW,KACtB,IAAI,CAA4B,CAAC;AAYtC,KAAK,sBAAsB,CACzB,CAAC,EACD,IAAI,SAAS,cAAc,EAC3B,KAAK,SAAS,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,IAC3C,QAAQ,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,CAAC,EACD,IAAI,SAAS,cAAc,EAC3B,KAAK,SAAS,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,qEAS5C,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAG,KAAK,GAC/C,cAAc,CAAC,CAAC,CAAC,GACjB,QAAQ,CAAC;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAyDxB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Arr, Optional } from 'ts-data-forge';
|
|
2
|
+
import { unreachable } from 'ts-std-forge';
|
|
2
3
|
import { binarySearch, issueObservableId, issueSubscriberId, issueUpdateToken, toSubscriber, } from '../utils/index.mjs';
|
|
3
4
|
export const createObservableBaseHandle = (initialValue) => {
|
|
4
5
|
const id = issueObservableId();
|
|
@@ -110,7 +111,13 @@ export const createManagerObservableParts = (handle) => {
|
|
|
110
111
|
|
|
111
112
|
export const createTryUpdateNotImplemented = () => tryUpdateNotImplemented;
|
|
112
113
|
const tryUpdateNotImplemented = (_updateToken) => {
|
|
113
|
-
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
unreachable();
|
|
114
121
|
};
|
|
115
122
|
|
|
116
123
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-observable-base.mjs","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"create-observable-base.mjs","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"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"}
|
|
@@ -16,13 +16,54 @@ import { type FromPromiseObservable } from '../types/index.mjs';
|
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```ts
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* // Timeline:
|
|
20
|
+
* //
|
|
21
|
+
* // query$ "a" "b"
|
|
22
|
+
* // request a [in flight] | (aborted)
|
|
23
|
+
* // request b [in flight] -> "result for b"
|
|
24
|
+
* // results$ Ok("result for b")
|
|
25
|
+
* //
|
|
26
|
+
* // Explanation:
|
|
27
|
+
* // - fromAbortablePromise hands its factory an AbortSignal
|
|
28
|
+
* // - switchMap completes the previous inner observable, which aborts it
|
|
29
|
+
* // - The AbortError that follows is swallowed, so nothing is emitted for it
|
|
30
|
+
*
|
|
31
|
+
* const search = (query: string, signal: AbortSignal): Promise<string> =>
|
|
32
|
+
* new Promise((resolve, reject) => {
|
|
33
|
+
* const timer = setTimeout(() => {
|
|
34
|
+
* resolve(`result for ${query}`);
|
|
35
|
+
* }, 50);
|
|
36
|
+
*
|
|
37
|
+
* signal.addEventListener('abort', () => {
|
|
38
|
+
* clearTimeout(timer);
|
|
39
|
+
*
|
|
40
|
+
* reject(new DOMException('aborted', 'AbortError'));
|
|
41
|
+
* });
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* const query$ = source<string>();
|
|
45
|
+
*
|
|
46
|
+
* const results$ = query$.pipe(
|
|
47
|
+
* switchMap((query) =>
|
|
48
|
+
* fromAbortablePromise((signal) => search(query, signal)),
|
|
24
49
|
* ),
|
|
25
50
|
* );
|
|
51
|
+
*
|
|
52
|
+
* const valueHistory: Result<string, unknown>[] = [];
|
|
53
|
+
*
|
|
54
|
+
* results$.subscribe((result) => {
|
|
55
|
+
* valueHistory.push(result);
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* query$.next('a');
|
|
59
|
+
*
|
|
60
|
+
* query$.next('b');
|
|
61
|
+
*
|
|
62
|
+
* await new Promise<void>((resolve) => {
|
|
63
|
+
* setTimeout(resolve, 150);
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* assert.deepStrictEqual(valueHistory, [Result.ok('result for b')]);
|
|
26
67
|
* ```
|
|
27
68
|
*/
|
|
28
69
|
export declare const fromAbortablePromise: <A, E = unknown>(factory: (signal: AbortSignal) => Promise<A>) => FromPromiseObservable<A, E>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-abortable-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-abortable-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"from-abortable-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-abortable-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,WAExC,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,KAC3C,qBAAqB,CAAC,CAAC,EAAE,CAAC,CA0C5B,CAAC"}
|
|
@@ -20,6 +20,47 @@ import { createRootObservable } from '../base/index.mjs';
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
23
64
|
|
|
24
65
|
|
|
25
66
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-abortable-promise.mjs","sourceRoot":"","sources":["../../../src/core/create/from-abortable-promise.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD
|
|
1
|
+
{"version":3,"file":"from-abortable-promise.mjs","sourceRoot":"","sources":["../../../src/core/create/from-abortable-promise.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;AAClC,8EAA8E;AAC9E,OAA4C,EACf,EAAE;IAC/B,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAE9C,OAAO,oBAAoB,CACzB;QACE,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,UAAU,EAAE,GAAG,EAAE;YACf,eAAe,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF,EACD,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO;aACJ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,WAAW,EAAE;gBAAE,OAAO;YAE1B,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,WAAW,EAAE;gBAAE,OAAO;YAE1B,2DAA2D;YAC3D,gDAAgD;YAChD,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,WAAW,CACT,MAAM,CAAC,GAAG;YACR,oEAAoE;YACpE,KAAU,CACX,CACF,CAAC;QACJ,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,CAAC;IACZ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -20,14 +20,14 @@ export type WithInitialValueOperatorObservable<A, I = A> = InitializedSyncChildO
|
|
|
20
20
|
export type ScanOperatorObservable<A, B> = InitializedSyncChildObservable<B, readonly [A]>;
|
|
21
21
|
declare namespace SynStateInternals {
|
|
22
22
|
type Cast<A> = A extends NonEmptyUnknownList ? A : never;
|
|
23
|
-
type EveryInitialized<OS extends NonEmptyTuple<Observable<unknown>>> = OS extends NonEmptyTuple<InitializedObservable<unknown>> ? true : false;
|
|
23
|
+
export type EveryInitialized<OS extends NonEmptyTuple<Observable<unknown>>> = OS extends NonEmptyTuple<InitializedObservable<unknown>> ? true : false;
|
|
24
24
|
type IsInitialized<O> = readonly [O] extends readonly [
|
|
25
25
|
InitializedObservable<unknown>
|
|
26
26
|
] ? true : false;
|
|
27
27
|
/** Evaluates true | false as true instead of boolean */
|
|
28
28
|
type LogicalValue<B extends boolean> = readonly [B] extends readonly [true] ? true : readonly [B] extends readonly [false] ? false : true;
|
|
29
29
|
type SomeInitializedImpl<OS extends Observable<unknown>> = LogicalValue<OS extends OS ? IsInitialized<OS> : never>;
|
|
30
|
-
type SomeInitialized<OS extends NonEmptyTuple<Observable<unknown>>> = SomeInitializedImpl<OS[number]>;
|
|
30
|
+
export type SomeInitialized<OS extends NonEmptyTuple<Observable<unknown>>> = SomeInitializedImpl<OS[number]>;
|
|
31
31
|
type InitializedCombineObservableImpl<A extends NonEmptyUnknownList> = InitializedSyncChildObservable<A, A>;
|
|
32
32
|
export type CombineObservableImpl<A extends NonEmptyUnknownList> = SyncChildObservable<A, A>;
|
|
33
33
|
export type CombineObservableRefinedImpl<OS extends NonEmptyTuple<Observable<unknown>>> = EveryInitialized<OS> extends true ? InitializedCombineObservableImpl<Cast<Unwrap<OS>>> : CombineObservableImpl<Unwrap<OS>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-family.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,MAAM,MAAM,2BAA2B,CAAC,CAAC,IAAI,QAAQ,CAAC;IACpD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC1B,CAAC,GACA,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAE/B,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACzC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC1B,CAAC,GACA,cAAc,CAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,MAAM,qBAAqB,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,cAAc,CAChE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CACb,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,cAAc,CACrE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CACb,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC,GACA,cAAc,CAAC,QAAQ,CAAC,CAAC;AAE3B,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC,GACA,cAAc,CAAC,CAAC,CAAC,CAAC;AAIpB,MAAM,MAAM,kCAAkC,CAC5C,CAAC,EACD,CAAC,GAAG,CAAC,IACH,8BAA8B,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAExD,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,8BAA8B,CACvE,CAAC,EACD,SAAS,CAAC,CAAC,CAAC,CACb,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-family.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-family.mjs","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-family.mjs","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAsIxD,UAAU,CACR,GAAG,CACJ,CAAC;AAEF,UAAU,CAGR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CACR,GAAG,CACJ,CAAC;AAEF,UAAU,CAGR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC"}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Timer handle for Node.js / browser compatibility.
|
|
3
|
+
*
|
|
4
|
+
* Defined by what `clearTimeout` accepts rather than by what `setTimeout`
|
|
5
|
+
* returns. The two are not the same type under the strict standard library:
|
|
6
|
+
* `setTimeout` there returns `{} | null`, which `clearTimeout`'s
|
|
7
|
+
* `number | undefined` parameter rejects. Every use of this type here is a
|
|
8
|
+
* handle on its way to `clearTimeout` / `clearInterval`, so the consumer's
|
|
9
|
+
* side is the one that has to fit.
|
|
10
|
+
*/
|
|
11
|
+
export type TimerId = NonNullable<Parameters<typeof clearTimeout>[0]>;
|
|
2
12
|
//# sourceMappingURL=timer.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.d.mts","sourceRoot":"","sources":["../../../src/core/types/timer.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timer.d.mts","sourceRoot":"","sources":["../../../src/core/types/timer.mts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "synstate",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Type-safe State Management Library for TypeScript/JavaScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,18 +29,20 @@
|
|
|
29
29
|
"LICENSE"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"ts-data-forge": "^14.
|
|
32
|
+
"ts-data-forge": "^14.7.1",
|
|
33
|
+
"ts-std-forge": "^0.5.1",
|
|
33
34
|
"ts-type-forge": "^9.2.2"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@reduxjs/toolkit": "2.12.0",
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
38
|
+
"@sumi-lang/cli": "0.0.3",
|
|
39
|
+
"@types/react": "19.3.0",
|
|
40
|
+
"@vitest/browser-playwright": "5.0.0",
|
|
39
41
|
"argparse": "3.0.1",
|
|
40
|
-
"eslint-config-typed": "5.11.
|
|
41
|
-
"eslint-plugin-ts-data-forge": "0.7.
|
|
42
|
-
"eslint-plugin-ts-fortress": "1.2.
|
|
43
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
42
|
+
"eslint-config-typed": "5.11.7",
|
|
43
|
+
"eslint-plugin-ts-data-forge": "0.7.4",
|
|
44
|
+
"eslint-plugin-ts-fortress": "1.2.2",
|
|
45
|
+
"eslint-plugin-ts-type-forge": "0.8.3",
|
|
44
46
|
"jotai": "2.20.3",
|
|
45
47
|
"mobx": "7.0.3",
|
|
46
48
|
"playwright": "1.62.1",
|
|
@@ -49,9 +51,9 @@
|
|
|
49
51
|
"prettier-plugin-packagejson": "3.0.2",
|
|
50
52
|
"react": "19.2.8",
|
|
51
53
|
"rxjs": "7.8.2",
|
|
52
|
-
"synstate-react-hooks": "3.0.
|
|
53
|
-
"synstate-react-hooks-compat": "3.0.
|
|
54
|
-
"ts-repo-utils": "10.6.
|
|
54
|
+
"synstate-react-hooks": "3.0.3",
|
|
55
|
+
"synstate-react-hooks-compat": "3.0.3",
|
|
56
|
+
"ts-repo-utils": "10.6.2",
|
|
55
57
|
"valtio": "2.3.2",
|
|
56
58
|
"zustand": "5.0.15"
|
|
57
59
|
},
|
|
@@ -82,6 +84,7 @@
|
|
|
82
84
|
"gi:src": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/gen-index-ts.mts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude entry-point.mts --exclude \"core/base/**\" --exclude \"core/utils/**\"",
|
|
83
85
|
"lint": "eslint .",
|
|
84
86
|
"lint:fix": "eslint . --fix",
|
|
87
|
+
"sumi:check": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../languages/sumi/cli/src/cmd/sumi.mts check ./tsconfig.sumi.json",
|
|
85
88
|
"test": "pnpm run z:vitest:node run",
|
|
86
89
|
"test:browser": "pnpm run z:vitest --project='Browser' run",
|
|
87
90
|
"test:cov": "pnpm run z:vitest:node run --coverage",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Arr, type Optional, type Some } from 'ts-data-forge';
|
|
2
|
+
import { panic } from 'ts-std-forge';
|
|
2
3
|
import { type MutableSet } from 'ts-type-forge';
|
|
3
4
|
import {
|
|
4
5
|
isChildObservable,
|
|
@@ -270,7 +271,11 @@ const detectCircularDependency = (
|
|
|
270
271
|
|
|
271
272
|
for (const parent of parents) {
|
|
272
273
|
if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {
|
|
273
|
-
|
|
274
|
+
// A programming error (invariant violation), not a recoverable
|
|
275
|
+
// failure. `panic` marks the error it throws, so the `Result` /
|
|
276
|
+
// `AsyncResult` boundaries rethrow it rather than turning an invariant
|
|
277
|
+
// violation into an `Err` a caller might handle (Sumi D-48 / D-53).
|
|
278
|
+
panic(
|
|
274
279
|
'Circular dependency detected in observable graph: a child observable cannot be its own ancestor.',
|
|
275
280
|
);
|
|
276
281
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Arr, Optional } from 'ts-data-forge';
|
|
2
|
+
import { unreachable } from 'ts-std-forge';
|
|
2
3
|
import {
|
|
3
4
|
type MutableMap,
|
|
4
5
|
type MutableSet,
|
|
@@ -254,7 +255,13 @@ export const createTryUpdateNotImplemented = (): ((
|
|
|
254
255
|
) => void) => tryUpdateNotImplemented;
|
|
255
256
|
|
|
256
257
|
const tryUpdateNotImplemented = (_updateToken: UpdateToken): void => {
|
|
257
|
-
|
|
258
|
+
// Not `todo()`: nothing here is waiting to be written. This is the base
|
|
259
|
+
// default of what was a base-class method, and every observable that can
|
|
260
|
+
// receive a parent update supplies its own `tryUpdate`; an observable with
|
|
261
|
+
// no parents never gets one. Reaching this is the invariant breaking, which
|
|
262
|
+
// is what `unreachable` says (Sumi D-48). There is no `never` value to
|
|
263
|
+
// hand it — the fact of the call is the error.
|
|
264
|
+
unreachable();
|
|
258
265
|
};
|
|
259
266
|
|
|
260
267
|
type AssembleObservableArgs<
|
|
@@ -19,13 +19,54 @@ import { type FromPromiseObservable } from '../types/index.mjs';
|
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```ts
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
22
|
+
* // Timeline:
|
|
23
|
+
* //
|
|
24
|
+
* // query$ "a" "b"
|
|
25
|
+
* // request a [in flight] | (aborted)
|
|
26
|
+
* // request b [in flight] -> "result for b"
|
|
27
|
+
* // results$ Ok("result for b")
|
|
28
|
+
* //
|
|
29
|
+
* // Explanation:
|
|
30
|
+
* // - fromAbortablePromise hands its factory an AbortSignal
|
|
31
|
+
* // - switchMap completes the previous inner observable, which aborts it
|
|
32
|
+
* // - The AbortError that follows is swallowed, so nothing is emitted for it
|
|
33
|
+
*
|
|
34
|
+
* const search = (query: string, signal: AbortSignal): Promise<string> =>
|
|
35
|
+
* new Promise((resolve, reject) => {
|
|
36
|
+
* const timer = setTimeout(() => {
|
|
37
|
+
* resolve(`result for ${query}`);
|
|
38
|
+
* }, 50);
|
|
39
|
+
*
|
|
40
|
+
* signal.addEventListener('abort', () => {
|
|
41
|
+
* clearTimeout(timer);
|
|
42
|
+
*
|
|
43
|
+
* reject(new DOMException('aborted', 'AbortError'));
|
|
44
|
+
* });
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* const query$ = source<string>();
|
|
48
|
+
*
|
|
49
|
+
* const results$ = query$.pipe(
|
|
50
|
+
* switchMap((query) =>
|
|
51
|
+
* fromAbortablePromise((signal) => search(query, signal)),
|
|
27
52
|
* ),
|
|
28
53
|
* );
|
|
54
|
+
*
|
|
55
|
+
* const valueHistory: Result<string, unknown>[] = [];
|
|
56
|
+
*
|
|
57
|
+
* results$.subscribe((result) => {
|
|
58
|
+
* valueHistory.push(result);
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* query$.next('a');
|
|
62
|
+
*
|
|
63
|
+
* query$.next('b');
|
|
64
|
+
*
|
|
65
|
+
* await new Promise<void>((resolve) => {
|
|
66
|
+
* setTimeout(resolve, 150);
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* assert.deepStrictEqual(valueHistory, [Result.ok('result for b')]);
|
|
29
70
|
* ```
|
|
30
71
|
*/
|
|
31
72
|
export const fromAbortablePromise = <A, E = unknown>(
|
|
@@ -61,10 +61,15 @@ export type ScanOperatorObservable<A, B> = InitializedSyncChildObservable<
|
|
|
61
61
|
|
|
62
62
|
// SyncChildObservable
|
|
63
63
|
|
|
64
|
+
// The helpers stay in a namespace so their names do not crowd the module
|
|
65
|
+
// scope. A namespace holding only types is erasable, so it passes
|
|
66
|
+
// `erasableSyntaxOnly` (TS1294); the `expectType` assertions are call
|
|
67
|
+
// statements, which is why they sit below it rather than beside the types
|
|
68
|
+
// they check.
|
|
64
69
|
namespace SynStateInternals {
|
|
65
70
|
type Cast<A> = A extends NonEmptyUnknownList ? A : never;
|
|
66
71
|
|
|
67
|
-
type EveryInitialized<OS extends NonEmptyTuple<Observable<unknown>>> =
|
|
72
|
+
export type EveryInitialized<OS extends NonEmptyTuple<Observable<unknown>>> =
|
|
68
73
|
OS extends NonEmptyTuple<InitializedObservable<unknown>> ? true : false;
|
|
69
74
|
|
|
70
75
|
type IsInitialized<O> = readonly [O] extends readonly [
|
|
@@ -84,41 +89,9 @@ namespace SynStateInternals {
|
|
|
84
89
|
// union distribution
|
|
85
90
|
LogicalValue<OS extends OS ? IsInitialized<OS> : never>;
|
|
86
91
|
|
|
87
|
-
type SomeInitialized<OS extends NonEmptyTuple<Observable<unknown>>> =
|
|
92
|
+
export type SomeInitialized<OS extends NonEmptyTuple<Observable<unknown>>> =
|
|
88
93
|
SomeInitializedImpl<OS[number]>;
|
|
89
94
|
|
|
90
|
-
expectType<EveryInitialized<readonly [Observable<1>]>, false>('=');
|
|
91
|
-
|
|
92
|
-
expectType<EveryInitialized<readonly [InitializedObservable<1>]>, true>('=');
|
|
93
|
-
|
|
94
|
-
expectType<
|
|
95
|
-
EveryInitialized<
|
|
96
|
-
readonly [InitializedObservable<1>, InitializedObservable<2>]
|
|
97
|
-
>,
|
|
98
|
-
true
|
|
99
|
-
>('=');
|
|
100
|
-
|
|
101
|
-
expectType<
|
|
102
|
-
EveryInitialized<readonly [Observable<1>, InitializedObservable<2>]>,
|
|
103
|
-
false
|
|
104
|
-
>('=');
|
|
105
|
-
|
|
106
|
-
expectType<SomeInitialized<readonly [Observable<1>]>, false>('=');
|
|
107
|
-
|
|
108
|
-
expectType<SomeInitialized<readonly [InitializedObservable<1>]>, true>('=');
|
|
109
|
-
|
|
110
|
-
expectType<
|
|
111
|
-
SomeInitialized<
|
|
112
|
-
readonly [InitializedObservable<1>, InitializedObservable<2>]
|
|
113
|
-
>,
|
|
114
|
-
true
|
|
115
|
-
>('=');
|
|
116
|
-
|
|
117
|
-
expectType<
|
|
118
|
-
SomeInitialized<readonly [Observable<1>, InitializedObservable<2>]>,
|
|
119
|
-
true
|
|
120
|
-
>('=');
|
|
121
|
-
|
|
122
95
|
type InitializedCombineObservableImpl<A extends NonEmptyUnknownList> =
|
|
123
96
|
InitializedSyncChildObservable<A, A>;
|
|
124
97
|
|
|
@@ -159,6 +132,52 @@ namespace SynStateInternals {
|
|
|
159
132
|
: MergeObservableImpl<Unwrap<OS>>;
|
|
160
133
|
}
|
|
161
134
|
|
|
135
|
+
expectType<SynStateInternals.EveryInitialized<readonly [Observable<1>]>, false>(
|
|
136
|
+
'=',
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
expectType<
|
|
140
|
+
SynStateInternals.EveryInitialized<readonly [InitializedObservable<1>]>,
|
|
141
|
+
true
|
|
142
|
+
>('=');
|
|
143
|
+
|
|
144
|
+
expectType<
|
|
145
|
+
SynStateInternals.EveryInitialized<
|
|
146
|
+
readonly [InitializedObservable<1>, InitializedObservable<2>]
|
|
147
|
+
>,
|
|
148
|
+
true
|
|
149
|
+
>('=');
|
|
150
|
+
|
|
151
|
+
expectType<
|
|
152
|
+
SynStateInternals.EveryInitialized<
|
|
153
|
+
readonly [Observable<1>, InitializedObservable<2>]
|
|
154
|
+
>,
|
|
155
|
+
false
|
|
156
|
+
>('=');
|
|
157
|
+
|
|
158
|
+
expectType<SynStateInternals.SomeInitialized<readonly [Observable<1>]>, false>(
|
|
159
|
+
'=',
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
expectType<
|
|
163
|
+
SynStateInternals.SomeInitialized<readonly [InitializedObservable<1>]>,
|
|
164
|
+
true
|
|
165
|
+
>('=');
|
|
166
|
+
|
|
167
|
+
expectType<
|
|
168
|
+
SynStateInternals.SomeInitialized<
|
|
169
|
+
readonly [InitializedObservable<1>, InitializedObservable<2>]
|
|
170
|
+
>,
|
|
171
|
+
true
|
|
172
|
+
>('=');
|
|
173
|
+
|
|
174
|
+
expectType<
|
|
175
|
+
SynStateInternals.SomeInitialized<
|
|
176
|
+
readonly [Observable<1>, InitializedObservable<2>]
|
|
177
|
+
>,
|
|
178
|
+
true
|
|
179
|
+
>('=');
|
|
180
|
+
|
|
162
181
|
export type CombineObservable<A extends NonEmptyUnknownList> =
|
|
163
182
|
SynStateInternals.CombineObservableImpl<A>;
|
|
164
183
|
|
package/src/core/types/timer.mts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Timer handle for Node.js / browser compatibility.
|
|
3
|
+
*
|
|
4
|
+
* Defined by what `clearTimeout` accepts rather than by what `setTimeout`
|
|
5
|
+
* returns. The two are not the same type under the strict standard library:
|
|
6
|
+
* `setTimeout` there returns `{} | null`, which `clearTimeout`'s
|
|
7
|
+
* `number | undefined` parameter rejects. Every use of this type here is a
|
|
8
|
+
* handle on its way to `clearTimeout` / `clearInterval`, so the consumer's
|
|
9
|
+
* side is the one that has to fit.
|
|
10
|
+
*/
|
|
11
|
+
export type TimerId = NonNullable<Parameters<typeof clearTimeout>[0]>;
|