rexfect 0.0.7

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 (190) hide show
  1. package/README.md +1756 -0
  2. package/dist/abortableContext.d.ts +3 -0
  3. package/dist/abortableContext.d.ts.map +1 -0
  4. package/dist/abortableContext.js +48 -0
  5. package/dist/abortableContext.js.map +1 -0
  6. package/dist/action.d.ts +64 -0
  7. package/dist/action.d.ts.map +1 -0
  8. package/dist/action.js +208 -0
  9. package/dist/action.js.map +1 -0
  10. package/dist/action.test.d.ts +2 -0
  11. package/dist/action.test.d.ts.map +1 -0
  12. package/dist/action.test.js +189 -0
  13. package/dist/action.test.js.map +1 -0
  14. package/dist/async/abortable-guard.d.ts +25 -0
  15. package/dist/async/abortable-guard.d.ts.map +1 -0
  16. package/dist/async/abortable-guard.js +33 -0
  17. package/dist/async/abortable-guard.js.map +1 -0
  18. package/dist/async/abortable.d.ts +331 -0
  19. package/dist/async/abortable.d.ts.map +1 -0
  20. package/dist/async/abortable.js +410 -0
  21. package/dist/async/abortable.js.map +1 -0
  22. package/dist/async/abortable.test.d.ts +2 -0
  23. package/dist/async/abortable.test.d.ts.map +1 -0
  24. package/dist/async/abortable.test.js +535 -0
  25. package/dist/async/abortable.test.js.map +1 -0
  26. package/dist/async/abortable.typeCheck.d.ts +8 -0
  27. package/dist/async/abortable.typeCheck.d.ts.map +1 -0
  28. package/dist/async/abortable.typeCheck.js +138 -0
  29. package/dist/async/abortable.typeCheck.js.map +1 -0
  30. package/dist/async/async.d.ts +18 -0
  31. package/dist/async/async.d.ts.map +1 -0
  32. package/dist/async/async.js +20 -0
  33. package/dist/async/async.js.map +1 -0
  34. package/dist/async/index.d.ts +15 -0
  35. package/dist/async/index.d.ts.map +1 -0
  36. package/dist/async/index.js +13 -0
  37. package/dist/async/index.js.map +1 -0
  38. package/dist/async/loadable.d.ts +7 -0
  39. package/dist/async/loadable.d.ts.map +1 -0
  40. package/dist/async/loadable.js +52 -0
  41. package/dist/async/loadable.js.map +1 -0
  42. package/dist/async/loadable.test.d.ts +2 -0
  43. package/dist/async/loadable.test.d.ts.map +1 -0
  44. package/dist/async/loadable.test.js +322 -0
  45. package/dist/async/loadable.test.js.map +1 -0
  46. package/dist/async/promiseCache.d.ts +14 -0
  47. package/dist/async/promiseCache.d.ts.map +1 -0
  48. package/dist/async/promiseCache.js +29 -0
  49. package/dist/async/promiseCache.js.map +1 -0
  50. package/dist/async/read.d.ts +120 -0
  51. package/dist/async/read.d.ts.map +1 -0
  52. package/dist/async/read.js +286 -0
  53. package/dist/async/read.js.map +1 -0
  54. package/dist/async/read.test.d.ts +2 -0
  55. package/dist/async/read.test.d.ts.map +1 -0
  56. package/dist/async/read.test.js +419 -0
  57. package/dist/async/read.test.js.map +1 -0
  58. package/dist/async/read.typeCheck.d.ts +6 -0
  59. package/dist/async/read.typeCheck.d.ts.map +1 -0
  60. package/dist/async/read.typeCheck.js +101 -0
  61. package/dist/async/read.typeCheck.js.map +1 -0
  62. package/dist/async/safe.d.ts +230 -0
  63. package/dist/async/safe.d.ts.map +1 -0
  64. package/dist/async/safe.js +247 -0
  65. package/dist/async/safe.js.map +1 -0
  66. package/dist/async/safe.test.d.ts +2 -0
  67. package/dist/async/safe.test.d.ts.map +1 -0
  68. package/dist/async/safe.test.js +447 -0
  69. package/dist/async/safe.test.js.map +1 -0
  70. package/dist/async/utils.d.ts +17 -0
  71. package/dist/async/utils.d.ts.map +1 -0
  72. package/dist/async/utils.js +38 -0
  73. package/dist/async/utils.js.map +1 -0
  74. package/dist/async/wait.d.ts +120 -0
  75. package/dist/async/wait.d.ts.map +1 -0
  76. package/dist/async/wait.js +112 -0
  77. package/dist/async/wait.js.map +1 -0
  78. package/dist/async/wait.test.d.ts +2 -0
  79. package/dist/async/wait.test.d.ts.map +1 -0
  80. package/dist/async/wait.test.js +122 -0
  81. package/dist/async/wait.test.js.map +1 -0
  82. package/dist/async/wait.typeCheck.d.ts +6 -0
  83. package/dist/async/wait.typeCheck.d.ts.map +1 -0
  84. package/dist/async/wait.typeCheck.js +104 -0
  85. package/dist/async/wait.typeCheck.js.map +1 -0
  86. package/dist/atom.d.ts +46 -0
  87. package/dist/atom.d.ts.map +1 -0
  88. package/dist/atom.js +86 -0
  89. package/dist/atom.js.map +1 -0
  90. package/dist/atom.test.d.ts +2 -0
  91. package/dist/atom.test.d.ts.map +1 -0
  92. package/dist/atom.test.js +75 -0
  93. package/dist/atom.test.js.map +1 -0
  94. package/dist/batch.d.ts +15 -0
  95. package/dist/batch.d.ts.map +1 -0
  96. package/dist/batch.js +45 -0
  97. package/dist/batch.js.map +1 -0
  98. package/dist/defer.d.ts +56 -0
  99. package/dist/defer.d.ts.map +1 -0
  100. package/dist/defer.js +49 -0
  101. package/dist/defer.js.map +1 -0
  102. package/dist/effect.d.ts +91 -0
  103. package/dist/effect.d.ts.map +1 -0
  104. package/dist/effect.js +311 -0
  105. package/dist/effect.js.map +1 -0
  106. package/dist/effect.test.d.ts +2 -0
  107. package/dist/effect.test.d.ts.map +1 -0
  108. package/dist/effect.test.js +123 -0
  109. package/dist/effect.test.js.map +1 -0
  110. package/dist/emitter.d.ts +129 -0
  111. package/dist/emitter.d.ts.map +1 -0
  112. package/dist/emitter.js +164 -0
  113. package/dist/emitter.js.map +1 -0
  114. package/dist/emitter.test.d.ts +2 -0
  115. package/dist/emitter.test.d.ts.map +1 -0
  116. package/dist/emitter.test.js +259 -0
  117. package/dist/emitter.test.js.map +1 -0
  118. package/dist/equality.d.ts +66 -0
  119. package/dist/equality.d.ts.map +1 -0
  120. package/dist/equality.js +145 -0
  121. package/dist/equality.js.map +1 -0
  122. package/dist/event.d.ts +18 -0
  123. package/dist/event.d.ts.map +1 -0
  124. package/dist/event.js +166 -0
  125. package/dist/event.js.map +1 -0
  126. package/dist/event.test.d.ts +2 -0
  127. package/dist/event.test.d.ts.map +1 -0
  128. package/dist/event.test.js +167 -0
  129. package/dist/event.test.js.map +1 -0
  130. package/dist/hooks.d.ts +152 -0
  131. package/dist/hooks.d.ts.map +1 -0
  132. package/dist/hooks.js +122 -0
  133. package/dist/hooks.js.map +1 -0
  134. package/dist/hooks.test.d.ts +2 -0
  135. package/dist/hooks.test.d.ts.map +1 -0
  136. package/dist/hooks.test.js +99 -0
  137. package/dist/hooks.test.js.map +1 -0
  138. package/dist/index.d.ts +33 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +35 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/isPromiseLike.d.ts +10 -0
  143. package/dist/isPromiseLike.d.ts.map +1 -0
  144. package/dist/isPromiseLike.js +15 -0
  145. package/dist/isPromiseLike.js.map +1 -0
  146. package/dist/pick.d.ts +22 -0
  147. package/dist/pick.d.ts.map +1 -0
  148. package/dist/pick.js +46 -0
  149. package/dist/pick.js.map +1 -0
  150. package/dist/react/index.d.ts +8 -0
  151. package/dist/react/index.d.ts.map +1 -0
  152. package/dist/react/index.js +8 -0
  153. package/dist/react/index.js.map +1 -0
  154. package/dist/react/useRx.d.ts +14 -0
  155. package/dist/react/useRx.d.ts.map +1 -0
  156. package/dist/react/useRx.js +110 -0
  157. package/dist/react/useRx.js.map +1 -0
  158. package/dist/react/useRx.test.d.ts +2 -0
  159. package/dist/react/useRx.test.d.ts.map +1 -0
  160. package/dist/react/useRx.test.js +457 -0
  161. package/dist/react/useRx.test.js.map +1 -0
  162. package/dist/strictModeTest.d.ts +11 -0
  163. package/dist/strictModeTest.d.ts.map +1 -0
  164. package/dist/strictModeTest.js +41 -0
  165. package/dist/strictModeTest.js.map +1 -0
  166. package/dist/types.d.ts +606 -0
  167. package/dist/types.d.ts.map +1 -0
  168. package/dist/types.js +5 -0
  169. package/dist/types.js.map +1 -0
  170. package/dist/untrack.d.ts +14 -0
  171. package/dist/untrack.d.ts.map +1 -0
  172. package/dist/untrack.js +17 -0
  173. package/dist/untrack.js.map +1 -0
  174. package/dist/utils/withUse.d.ts +10 -0
  175. package/dist/utils/withUse.d.ts.map +1 -0
  176. package/dist/utils/withUse.js +21 -0
  177. package/dist/utils/withUse.js.map +1 -0
  178. package/dist/utils/withUse.test.d.ts +2 -0
  179. package/dist/utils/withUse.test.d.ts.map +1 -0
  180. package/dist/utils/withUse.test.js +233 -0
  181. package/dist/utils/withUse.test.js.map +1 -0
  182. package/dist/utils.d.ts +7 -0
  183. package/dist/utils.d.ts.map +1 -0
  184. package/dist/utils.js +7 -0
  185. package/dist/utils.js.map +1 -0
  186. package/dist/utils.test.d.ts +2 -0
  187. package/dist/utils.test.d.ts.map +1 -0
  188. package/dist/utils.test.js +119 -0
  189. package/dist/utils.test.js.map +1 -0
  190. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/async/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,6DAA6D;AAC7D,KAAK,SAAS,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnC,kDAAkD;AAClD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAElE,0BAA0B;AAC1B,KAAK,UAAU,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAE5C,2BAA2B;AAC3B,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAElD,8DAA8D;AAC9D,KAAK,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF,mCAAmC;AACnC,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF,iCAAiC;AACjC,KAAK,eAAe,CAAC,CAAC,SAAS,UAAU,IAAI,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAErE,0DAA0D;AAC1D,KAAK,gBAAgB,CAAC,CAAC,SAAS,WAAW,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,oCAAoC;AACpC,KAAK,kBAAkB,CAAC,CAAC,SAAS,UAAU,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC;AAEF,qCAAqC;AACrC,KAAK,mBAAmB,CAAC,CAAC,SAAS,WAAW,IAAI;KAC/C,CAAC,IAAI,MAAM,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC;AAWF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvD;AAMD,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;OAUG;IACH,SAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,EAC5C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAC7C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAS7B;AAkBD,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,SAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,EAC7C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,SAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAC9C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;CASjC;AAeD,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,SAAgB,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,EAChD,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,SAAgB,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EACjD,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;CAcpC;AAkBD,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,SAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,EAC5C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,SAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAC7C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;CASjC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Promise utilities for waiting on async values.
3
+ *
4
+ * Works with Promise<T>, PromiseLike<T> (including Action<T>).
5
+ * Returns Promises - use with `await`.
6
+ *
7
+ * For Suspense mode with Signals, use `read` instead.
8
+ */
9
+ /** Check if input is array-like */
10
+ function isArray(input) {
11
+ return Array.isArray(input);
12
+ }
13
+ // ============================================================================
14
+ // Main wait function
15
+ // ============================================================================
16
+ /**
17
+ * Waits for a PromiseLike to resolve, returning a Promise.
18
+ * Works with Promise, Action, or any thenable.
19
+ *
20
+ * @param input - Promise or PromiseLike (including Action)
21
+ * @returns Promise that resolves with the value
22
+ *
23
+ * @example
24
+ * // With Promise
25
+ * const data = await wait(fetchData());
26
+ *
27
+ * @example
28
+ * // With Action (thenable)
29
+ * const payload = await wait(onUserReady);
30
+ */
31
+ export function wait(input) {
32
+ return Promise.resolve(input);
33
+ }
34
+ // ============================================================================
35
+ // wait.all - Wait for all to resolve
36
+ // ============================================================================
37
+ (function (wait) {
38
+ function all(inputs) {
39
+ if (isArray(inputs)) {
40
+ return Promise.all(inputs);
41
+ }
42
+ return allObject(inputs);
43
+ }
44
+ wait.all = all;
45
+ })(wait || (wait = {}));
46
+ async function allObject(inputs) {
47
+ const keys = Object.keys(inputs);
48
+ const values = await Promise.all(keys.map((k) => inputs[k]));
49
+ const result = {};
50
+ for (let i = 0; i < keys.length; i++) {
51
+ result[keys[i]] = values[i];
52
+ }
53
+ return result;
54
+ }
55
+ // ============================================================================
56
+ // wait.race - Wait for first to settle
57
+ // ============================================================================
58
+ (function (wait) {
59
+ function race(inputs) {
60
+ if (isArray(inputs)) {
61
+ return Promise.race(inputs);
62
+ }
63
+ return raceObject(inputs);
64
+ }
65
+ wait.race = race;
66
+ })(wait || (wait = {}));
67
+ async function raceObject(inputs) {
68
+ const keys = Object.keys(inputs);
69
+ const promises = keys.map((k, i) => Promise.resolve(inputs[k]).then((value) => ({ index: i, value })));
70
+ const { index, value } = await Promise.race(promises);
71
+ return [keys[index], value];
72
+ }
73
+ // ============================================================================
74
+ // wait.settled - Wait for all to settle (no throw on rejection)
75
+ // ============================================================================
76
+ (function (wait) {
77
+ function settled(inputs) {
78
+ if (isArray(inputs)) {
79
+ return Promise.allSettled(inputs);
80
+ }
81
+ return settledObject(inputs);
82
+ }
83
+ wait.settled = settled;
84
+ })(wait || (wait = {}));
85
+ async function settledObject(inputs) {
86
+ const keys = Object.keys(inputs);
87
+ const results = await Promise.allSettled(keys.map((k) => inputs[k]));
88
+ const result = {};
89
+ for (let i = 0; i < keys.length; i++) {
90
+ result[keys[i]] = results[i];
91
+ }
92
+ return result;
93
+ }
94
+ // ============================================================================
95
+ // wait.any - Wait for first success (ignores rejections until all fail)
96
+ // ============================================================================
97
+ (function (wait) {
98
+ function any(inputs) {
99
+ if (isArray(inputs)) {
100
+ return Promise.any(inputs);
101
+ }
102
+ return anyObject(inputs);
103
+ }
104
+ wait.any = any;
105
+ })(wait || (wait = {}));
106
+ async function anyObject(inputs) {
107
+ const keys = Object.keys(inputs);
108
+ const promises = keys.map((k, i) => Promise.resolve(inputs[k]).then((value) => ({ index: i, value })));
109
+ const { index, value } = await Promise.any(promises);
110
+ return [keys[index], value];
111
+ }
112
+ //# sourceMappingURL=wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/async/wait.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wait.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.test.d.ts","sourceRoot":"","sources":["../../src/async/wait.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { action } from "../action";
3
+ import { wait } from "./wait";
4
+ describe("wait", () => {
5
+ describe("wait(input)", () => {
6
+ it("should return Promise for Promise input", async () => {
7
+ const result = await wait(Promise.resolve("hello"));
8
+ expect(result).toBe("hello");
9
+ });
10
+ it("should work with Event (thenable)", async () => {
11
+ const onReady = action();
12
+ // Dispatch after a delay
13
+ setTimeout(() => onReady("ready!"), 10);
14
+ const result = await wait(onReady);
15
+ expect(result).toBe("ready!");
16
+ });
17
+ });
18
+ describe("wait.all", () => {
19
+ it("should wait for all promises (array)", async () => {
20
+ const result = await wait.all([
21
+ Promise.resolve(1),
22
+ Promise.resolve("two"),
23
+ ]);
24
+ expect(result).toEqual([1, "two"]);
25
+ });
26
+ it("should wait for all (object)", async () => {
27
+ const result = await wait.all({
28
+ num: Promise.resolve(1),
29
+ str: Promise.resolve("two"),
30
+ });
31
+ expect(result).toEqual({ num: 1, str: "two" });
32
+ });
33
+ it("should work with actions", async () => {
34
+ const onUser = action();
35
+ const onConfig = action();
36
+ setTimeout(() => {
37
+ onUser("alice");
38
+ onConfig(42);
39
+ }, 10);
40
+ const result = await wait.all([onUser, onConfig]);
41
+ expect(result).toEqual(["alice", 42]);
42
+ });
43
+ it("should work with mixed Promise and Event", async () => {
44
+ const onReady = action();
45
+ setTimeout(() => onReady("ready"), 10);
46
+ const result = await wait.all({
47
+ data: Promise.resolve(123),
48
+ status: onReady,
49
+ });
50
+ expect(result).toEqual({ data: 123, status: "ready" });
51
+ });
52
+ });
53
+ describe("wait.race", () => {
54
+ it("should return first resolved value (array)", async () => {
55
+ const slow = new Promise((r) => setTimeout(() => r("slow"), 100));
56
+ const fast = Promise.resolve("fast");
57
+ const result = await wait.race([slow, fast]);
58
+ expect(result).toBe("fast");
59
+ });
60
+ it("should return [winner, value] tuple for object input", async () => {
61
+ const slow = new Promise((r) => setTimeout(() => r("slow"), 100));
62
+ const fast = Promise.resolve("fast");
63
+ const result = await wait.race({ slow, fast });
64
+ expect(result).toEqual(["fast", "fast"]);
65
+ });
66
+ it("should work with actions - cancellation pattern", async () => {
67
+ const onCancel = action();
68
+ const longOperation = new Promise((r) => setTimeout(() => r("done"), 100));
69
+ // Cancel immediately
70
+ setTimeout(() => onCancel(), 10);
71
+ const result = await wait.race({
72
+ data: longOperation,
73
+ cancel: onCancel,
74
+ });
75
+ const [winner] = result;
76
+ expect(winner).toBe("cancel");
77
+ });
78
+ });
79
+ describe("wait.settled", () => {
80
+ it("should return all results (array)", async () => {
81
+ const error = new Error("test");
82
+ const results = await wait.settled([
83
+ Promise.resolve(1),
84
+ Promise.reject(error),
85
+ ]);
86
+ expect(results[0]).toEqual({ status: "fulfilled", value: 1 });
87
+ expect(results[1]).toEqual({ status: "rejected", reason: error });
88
+ });
89
+ it("should return all results (object)", async () => {
90
+ const error = new Error("test");
91
+ const results = await wait.settled({
92
+ success: Promise.resolve(1),
93
+ fail: Promise.reject(error),
94
+ });
95
+ expect(results.success).toEqual({ status: "fulfilled", value: 1 });
96
+ expect(results.fail).toEqual({ status: "rejected", reason: error });
97
+ });
98
+ });
99
+ describe("wait.any", () => {
100
+ it("should return first successful value (array)", async () => {
101
+ const result = await wait.any([
102
+ Promise.reject(new Error("fail")),
103
+ Promise.resolve("success"),
104
+ ]);
105
+ expect(result).toBe("success");
106
+ });
107
+ it("should return [winner, value] tuple for object input", async () => {
108
+ const result = await wait.any({
109
+ fail: Promise.reject(new Error("fail")),
110
+ win: Promise.resolve("success"),
111
+ });
112
+ expect(result).toEqual(["win", "success"]);
113
+ });
114
+ it("should throw AggregateError if all reject", async () => {
115
+ await expect(wait.any([
116
+ Promise.reject(new Error("error1")),
117
+ Promise.reject(new Error("error2")),
118
+ ])).rejects.toThrow(AggregateError);
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=wait.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.test.js","sourceRoot":"","sources":["../../src/async/wait.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type-level tests for wait API (Promise mode).
3
+ * This file is only for compile-time type checking - not executed at runtime.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=wait.typeCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.typeCheck.d.ts","sourceRoot":"","sources":["../../src/async/wait.typeCheck.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Type-level tests for wait API (Promise mode).
3
+ * This file is only for compile-time type checking - not executed at runtime.
4
+ */
5
+ import { wait } from "./wait";
6
+ // ============================================================================
7
+ // wait(input) - Single input
8
+ // ============================================================================
9
+ // With Promise - returns Promise
10
+ consume(wait(stringPromise));
11
+ consume(wait(numberPromise));
12
+ // With Action - returns Promise
13
+ consume(wait(stringAction));
14
+ consume(wait(numberAction));
15
+ // ============================================================================
16
+ // wait.all - Array form
17
+ // ============================================================================
18
+ {
19
+ const result = wait.all([stringPromise, numberPromise]);
20
+ consume(result);
21
+ }
22
+ // Mixed Promise and Event
23
+ {
24
+ const result = wait.all([stringAction, numberPromise]);
25
+ consume(result);
26
+ }
27
+ // ============================================================================
28
+ // wait.all - Object form
29
+ // ============================================================================
30
+ {
31
+ const result = wait.all({
32
+ user: stringPromise,
33
+ count: numberAction,
34
+ });
35
+ consume(result);
36
+ }
37
+ // ============================================================================
38
+ // wait.race - Array form
39
+ // ============================================================================
40
+ {
41
+ const result = wait.race([stringPromise, numberAction]);
42
+ consume(result);
43
+ }
44
+ // ============================================================================
45
+ // wait.race - Object form (returns [winner, value] tuple)
46
+ // ============================================================================
47
+ {
48
+ const result = wait.race({
49
+ data: numberPromise,
50
+ cancel: stringAction,
51
+ });
52
+ consume(result);
53
+ }
54
+ // ============================================================================
55
+ // wait.settled - Array form
56
+ // ============================================================================
57
+ {
58
+ const results = wait.settled([stringPromise, numberAction]);
59
+ consume(results);
60
+ }
61
+ // ============================================================================
62
+ // wait.settled - Object form
63
+ // ============================================================================
64
+ {
65
+ const results = wait.settled({
66
+ a: stringPromise,
67
+ b: numberAction,
68
+ });
69
+ consume(results);
70
+ }
71
+ // ============================================================================
72
+ // wait.any - Array form
73
+ // ============================================================================
74
+ {
75
+ const result = wait.any([stringPromise, numberAction]);
76
+ consume(result);
77
+ }
78
+ // ============================================================================
79
+ // wait.any - Object form (returns [winner, value] tuple)
80
+ // ============================================================================
81
+ {
82
+ const result = wait.any({
83
+ primary: stringPromise,
84
+ fallback: numberAction,
85
+ });
86
+ consume(result);
87
+ }
88
+ // ============================================================================
89
+ // Practical patterns
90
+ // ============================================================================
91
+ // Cancellation pattern with events
92
+ {
93
+ const result = wait.race({
94
+ data: fetchData,
95
+ cancel: onCancel,
96
+ });
97
+ consume(result);
98
+ }
99
+ // Wait for multiple events
100
+ {
101
+ const result = wait.all([onUserReady, onConfigLoaded]);
102
+ consume(result);
103
+ }
104
+ //# sourceMappingURL=wait.typeCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.typeCheck.js","sourceRoot":"","sources":["../../src/async/wait.typeCheck.ts"],"names":[],"mappings":"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"}
package/dist/atom.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ import type { Signal, Setter, AtomOptions, Atom } from "./types";
2
+ /**
3
+ * Creates an atom instance with signal, setter, and dispose.
4
+ * Used internally by pick() and other utilities that need cleanup.
5
+ */
6
+ export declare function atomInstance<T>(initial: T, options?: AtomOptions<T>): {
7
+ initial: T;
8
+ signal: Signal<T>;
9
+ setter: Setter<T>;
10
+ dispose: VoidFunction;
11
+ options: AtomOptions<T>;
12
+ };
13
+ /**
14
+ * Creates a reactive atom (signal) with an initial value.
15
+ *
16
+ * @param initial - The initial value of the atom
17
+ * @param options - Optional configuration
18
+ * @returns A mappable tuple of [signal, setter] with .map() method
19
+ *
20
+ * @example
21
+ * // Basic usage - can destructure normally
22
+ * const [count, setCount] = atom(0);
23
+ * console.log(count()); // 0
24
+ * setCount(1);
25
+ * console.log(count()); // 1
26
+ *
27
+ * @example
28
+ * // With equality shorthand
29
+ * const [user, setUser] = atom({ name: "Ada" }, { equals: "shallow" });
30
+ *
31
+ * @example
32
+ * // Transform setter only
33
+ * const [signal, setter] = atom({a: 0}).map(
34
+ * (set) => (value: string) => set({ a: Number(value) })
35
+ * );
36
+ * setter("123"); // Converts string to number
37
+ *
38
+ * @example
39
+ * // Transform signal and setter
40
+ * const [signal, setter] = atom({a: 0}).map({
41
+ * sig: (s) => () => s().a, // Extract 'a' property
42
+ * set: (set) => (value: number) => set({ a: value })
43
+ * });
44
+ */
45
+ export declare function atom<T>(initial: T, options?: AtomOptions<T>): Atom<T>;
46
+ //# sourceMappingURL=atom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.d.ts","sourceRoot":"","sources":["../src/atom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAY,IAAI,EAAE,MAAM,SAAS,CAAC;AAM3E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,OAAO,EAAE,CAAC,EACV,OAAO,GAAE,WAAW,CAAC,CAAC,CAAM,GAC3B;IACD,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CACzB,CA0CA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAGrE"}
package/dist/atom.js ADDED
@@ -0,0 +1,86 @@
1
+ import { getHooks } from "./hooks";
2
+ import { resolveEquality } from "./equality";
3
+ import { emitter } from "./emitter";
4
+ import { withUse } from "./utils/withUse";
5
+ /**
6
+ * Creates an atom instance with signal, setter, and dispose.
7
+ * Used internally by pick() and other utilities that need cleanup.
8
+ */
9
+ export function atomInstance(initial, options = {}) {
10
+ let value = initial;
11
+ let disposed = false;
12
+ // Lazy emitter - only created when first listener subscribes
13
+ let onChangeEmitter;
14
+ const signal = function () {
15
+ getHooks().track?.(signal);
16
+ return value;
17
+ };
18
+ // Attach on method - creates emitter lazily
19
+ signal.on = (listener) => {
20
+ if (!onChangeEmitter)
21
+ onChangeEmitter = emitter();
22
+ return onChangeEmitter.on(listener);
23
+ };
24
+ // Notify wrapper that emits current value
25
+ const notify = () => onChangeEmitter?.emit(value);
26
+ // Setter with equality check
27
+ const eq = options?.equals ? resolveEquality(options.equals) : Object.is;
28
+ const setter = (newValue) => {
29
+ if (disposed)
30
+ return;
31
+ if (eq(value, newValue))
32
+ return;
33
+ value = newValue;
34
+ // Only schedule if emitter exists and has listeners
35
+ if (onChangeEmitter?.size)
36
+ getHooks().scheduleNotify(notify);
37
+ };
38
+ const dispose = () => {
39
+ if (disposed)
40
+ return;
41
+ disposed = true;
42
+ onChangeEmitter?.clear();
43
+ onChangeEmitter = undefined;
44
+ };
45
+ getHooks().scheduleCleanup?.(dispose);
46
+ return { initial, signal, setter, dispose, options };
47
+ }
48
+ /**
49
+ * Creates a reactive atom (signal) with an initial value.
50
+ *
51
+ * @param initial - The initial value of the atom
52
+ * @param options - Optional configuration
53
+ * @returns A mappable tuple of [signal, setter] with .map() method
54
+ *
55
+ * @example
56
+ * // Basic usage - can destructure normally
57
+ * const [count, setCount] = atom(0);
58
+ * console.log(count()); // 0
59
+ * setCount(1);
60
+ * console.log(count()); // 1
61
+ *
62
+ * @example
63
+ * // With equality shorthand
64
+ * const [user, setUser] = atom({ name: "Ada" }, { equals: "shallow" });
65
+ *
66
+ * @example
67
+ * // Transform setter only
68
+ * const [signal, setter] = atom({a: 0}).map(
69
+ * (set) => (value: string) => set({ a: Number(value) })
70
+ * );
71
+ * setter("123"); // Converts string to number
72
+ *
73
+ * @example
74
+ * // Transform signal and setter
75
+ * const [signal, setter] = atom({a: 0}).map({
76
+ * sig: (s) => () => s().a, // Extract 'a' property
77
+ * set: (set) => (value: number) => set({ a: value })
78
+ * });
79
+ */
80
+ export function atom(initial, options) {
81
+ const { signal, setter } = atomInstance(initial, options);
82
+ return withUse([signal, setter]);
83
+ }
84
+ // const toUppercase = (sig: Signal, set: Setter) => {};
85
+ // const [signal, setter] = atom(1).use(toUppercase);
86
+ //# sourceMappingURL=atom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.js","sourceRoot":"","sources":["../src/atom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAU,EACV,UAA0B,EAAE;IAQ5B,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,6DAA6D;IAC7D,IAAI,eAAuC,CAAC;IAE5C,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,MAAmB,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAc,CAAC;IAEf,4CAA4C;IAC3C,MAAc,CAAC,EAAE,GAAG,CACnB,QAAqC,EACvB,EAAE;QAChB,IAAI,CAAC,eAAe;YAAE,eAAe,GAAG,OAAO,EAAK,CAAC;QACrD,OAAO,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,0CAA0C;IAC1C,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAExD,6BAA6B;IAC7B,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzE,MAAM,MAAM,GAAc,CAAC,QAAW,EAAQ,EAAE;QAC9C,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO;QAChC,KAAK,GAAG,QAAQ,CAAC;QACjB,oDAAoD;QACpD,IAAI,eAAe,EAAE,IAAI;YAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,eAAe,EAAE,KAAK,EAAE,CAAC;QACzB,eAAe,GAAG,SAAS,CAAC;IAC9B,CAAC,CAAC;IAEF,QAAQ,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC;IAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,IAAI,CAAI,OAAU,EAAE,OAAwB;IAC1D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC,CAAC;AAC5C,CAAC;AAED,wDAAwD;AAExD,qDAAqD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=atom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.test.d.ts","sourceRoot":"","sources":["../src/atom.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { atom } from "./atom";
3
+ import { effect } from "./effect";
4
+ describe("atom", () => {
5
+ it("should create an atom with initial value", () => {
6
+ const [count] = atom(0);
7
+ expect(count()).toBe(0);
8
+ });
9
+ it("should update value with setter", () => {
10
+ const [count, setCount] = atom(0);
11
+ setCount(5);
12
+ expect(count()).toBe(5);
13
+ });
14
+ it("should notify subscribers on change", () => {
15
+ const [count, setCount] = atom(0);
16
+ const listener = vi.fn();
17
+ count.on(listener);
18
+ setCount(1);
19
+ expect(listener).toHaveBeenCalledWith(1);
20
+ });
21
+ it("should not notify if value is same (default equality)", () => {
22
+ const [count, setCount] = atom(0);
23
+ const listener = vi.fn();
24
+ count.on(listener);
25
+ setCount(0); // same value
26
+ expect(listener).not.toHaveBeenCalled();
27
+ });
28
+ it("should use custom equality function", () => {
29
+ const [user, setUser] = atom({ id: 1, name: "Alice" }, { equals: (a, b) => a.id === b.id });
30
+ const listener = vi.fn();
31
+ user.on(listener);
32
+ // Same id, different name - should NOT notify
33
+ setUser({ id: 1, name: "Alice Updated" });
34
+ expect(listener).not.toHaveBeenCalled();
35
+ // Different id - should notify
36
+ setUser({ id: 2, name: "Bob" });
37
+ expect(listener).toHaveBeenCalledTimes(1);
38
+ });
39
+ it("should allow unsubscribing", () => {
40
+ const [count, setCount] = atom(0);
41
+ const listener = vi.fn();
42
+ const unsubscribe = count.on(listener);
43
+ setCount(1);
44
+ expect(listener).toHaveBeenCalledTimes(1);
45
+ unsubscribe();
46
+ setCount(2);
47
+ expect(listener).toHaveBeenCalledTimes(1); // not called again
48
+ });
49
+ it("should support multiple subscribers", () => {
50
+ const [count, setCount] = atom(0);
51
+ const listener1 = vi.fn();
52
+ const listener2 = vi.fn();
53
+ count.on(listener1);
54
+ count.on(listener2);
55
+ setCount(1);
56
+ expect(listener1).toHaveBeenCalledWith(1);
57
+ expect(listener2).toHaveBeenCalledWith(1);
58
+ });
59
+ describe("reactive context", () => {
60
+ it("should dispose after context is disposed", () => {
61
+ let signal;
62
+ let setter;
63
+ const dispose = effect(() => {
64
+ [signal, setter] = atom(0);
65
+ });
66
+ expect(signal?.()).toBe(0);
67
+ setter?.(1);
68
+ expect(signal?.()).toBe(1);
69
+ dispose();
70
+ setter?.(2);
71
+ expect(signal?.()).toBe(1);
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=atom.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.test.js","sourceRoot":"","sources":["../src/atom.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Batches multiple state updates into a single reactive update.
3
+ *
4
+ * @param fn - Function containing multiple state updates
5
+ * @returns The return value of the function
6
+ *
7
+ * @example
8
+ * batch(() => {
9
+ * setA(1);
10
+ * setB(2);
11
+ * setC(3);
12
+ * }); // Effects run once after all updates
13
+ */
14
+ export declare function batch<T>(fn: () => T): T;
15
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CA2BvC"}