synstate 3.0.2 → 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.
@@ -16,13 +16,54 @@ import { type FromPromiseObservable } from '../types/index.mjs';
16
16
  *
17
17
  * @example
18
18
  * ```ts
19
- * const results$ = query.pipe(
20
- * switchMap((q) =>
21
- * fromAbortablePromise((signal) =>
22
- * fetch(`/api/search?q=${q}`, { signal }).then((r) => r.json()),
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;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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"}
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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synstate",
3
- "version": "3.0.2",
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,18 @@
29
29
  "LICENSE"
30
30
  ],
31
31
  "dependencies": {
32
- "ts-data-forge": "^14.7.0",
33
- "ts-std-forge": "^0.5.0",
32
+ "ts-data-forge": "^14.7.1",
33
+ "ts-std-forge": "^0.5.1",
34
34
  "ts-type-forge": "^9.2.2"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@reduxjs/toolkit": "2.12.0",
38
- "@sumi-lang/cli": "0.0.1",
39
- "@types/react": "19.2.18",
40
- "@vitest/browser-playwright": "4.1.11",
38
+ "@sumi-lang/cli": "0.0.3",
39
+ "@types/react": "19.3.0",
40
+ "@vitest/browser-playwright": "5.0.0",
41
41
  "argparse": "3.0.1",
42
- "eslint-config-typed": "5.11.6",
43
- "eslint-plugin-ts-data-forge": "0.7.3",
42
+ "eslint-config-typed": "5.11.7",
43
+ "eslint-plugin-ts-data-forge": "0.7.4",
44
44
  "eslint-plugin-ts-fortress": "1.2.2",
45
45
  "eslint-plugin-ts-type-forge": "0.8.3",
46
46
  "jotai": "2.20.3",
@@ -51,9 +51,9 @@
51
51
  "prettier-plugin-packagejson": "3.0.2",
52
52
  "react": "19.2.8",
53
53
  "rxjs": "7.8.2",
54
- "synstate-react-hooks": "3.0.2",
55
- "synstate-react-hooks-compat": "3.0.2",
56
- "ts-repo-utils": "10.6.1",
54
+ "synstate-react-hooks": "3.0.3",
55
+ "synstate-react-hooks-compat": "3.0.3",
56
+ "ts-repo-utils": "10.6.2",
57
57
  "valtio": "2.3.2",
58
58
  "zustand": "5.0.15"
59
59
  },
@@ -19,13 +19,54 @@ import { type FromPromiseObservable } from '../types/index.mjs';
19
19
  *
20
20
  * @example
21
21
  * ```ts
22
- * const results$ = query.pipe(
23
- * switchMap((q) =>
24
- * fromAbortablePromise((signal) =>
25
- * fetch(`/api/search?q=${q}`, { signal }).then((r) => r.json()),
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>(