rask-ui 0.29.2 → 0.29.4

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 (115) hide show
  1. package/dist/component.d.ts.map +1 -1
  2. package/dist/component.js +0 -4
  3. package/dist/render.d.ts.map +1 -1
  4. package/dist/render.js +21 -17
  5. package/package.json +1 -1
  6. package/swc-plugin/target/wasm32-wasip1/release/swc_plugin_rask_component.wasm +0 -0
  7. package/dist/compiler.d.ts +0 -4
  8. package/dist/compiler.d.ts.map +0 -1
  9. package/dist/compiler.js +0 -7
  10. package/dist/createAsync.d.ts +0 -39
  11. package/dist/createAsync.d.ts.map +0 -1
  12. package/dist/createAsync.js +0 -47
  13. package/dist/createComputed.d.ts +0 -4
  14. package/dist/createComputed.d.ts.map +0 -1
  15. package/dist/createComputed.js +0 -69
  16. package/dist/createEffect.d.ts +0 -2
  17. package/dist/createEffect.d.ts.map +0 -1
  18. package/dist/createEffect.js +0 -29
  19. package/dist/createMutation.d.ts +0 -43
  20. package/dist/createMutation.d.ts.map +0 -1
  21. package/dist/createMutation.js +0 -76
  22. package/dist/createQuery.d.ts +0 -42
  23. package/dist/createQuery.d.ts.map +0 -1
  24. package/dist/createQuery.js +0 -80
  25. package/dist/createRouter.d.ts +0 -8
  26. package/dist/createRouter.d.ts.map +0 -1
  27. package/dist/createRouter.js +0 -27
  28. package/dist/createState.d.ts +0 -28
  29. package/dist/createState.d.ts.map +0 -1
  30. package/dist/createState.js +0 -129
  31. package/dist/createTask.d.ts +0 -31
  32. package/dist/createTask.d.ts.map +0 -1
  33. package/dist/createTask.js +0 -79
  34. package/dist/createView.d.ts +0 -28
  35. package/dist/createView.d.ts.map +0 -1
  36. package/dist/createView.js +0 -77
  37. package/dist/error.d.ts +0 -5
  38. package/dist/error.d.ts.map +0 -1
  39. package/dist/error.js +0 -16
  40. package/dist/jsx.d.ts +0 -11
  41. package/dist/patchInferno.d.ts +0 -6
  42. package/dist/patchInferno.d.ts.map +0 -1
  43. package/dist/patchInferno.js +0 -53
  44. package/dist/tests/batch.test.d.ts +0 -2
  45. package/dist/tests/batch.test.d.ts.map +0 -1
  46. package/dist/tests/batch.test.js +0 -434
  47. package/dist/tests/createComputed.test.d.ts +0 -2
  48. package/dist/tests/createComputed.test.d.ts.map +0 -1
  49. package/dist/tests/createComputed.test.js +0 -257
  50. package/dist/tests/createContext.test.d.ts +0 -2
  51. package/dist/tests/createContext.test.d.ts.map +0 -1
  52. package/dist/tests/createContext.test.js +0 -149
  53. package/dist/tests/createEffect.test.d.ts +0 -2
  54. package/dist/tests/createEffect.test.d.ts.map +0 -1
  55. package/dist/tests/createEffect.test.js +0 -467
  56. package/dist/tests/createState.test.d.ts +0 -2
  57. package/dist/tests/createState.test.d.ts.map +0 -1
  58. package/dist/tests/createState.test.js +0 -144
  59. package/dist/tests/createTask.test.d.ts +0 -2
  60. package/dist/tests/createTask.test.d.ts.map +0 -1
  61. package/dist/tests/createTask.test.js +0 -322
  62. package/dist/tests/createView.test.d.ts +0 -2
  63. package/dist/tests/createView.test.d.ts.map +0 -1
  64. package/dist/tests/createView.test.js +0 -203
  65. package/dist/tests/error.test.d.ts +0 -2
  66. package/dist/tests/error.test.d.ts.map +0 -1
  67. package/dist/tests/error.test.js +0 -181
  68. package/dist/tests/observation.test.d.ts +0 -2
  69. package/dist/tests/observation.test.d.ts.map +0 -1
  70. package/dist/tests/observation.test.js +0 -341
  71. package/dist/tests/renderCount.test.d.ts +0 -2
  72. package/dist/tests/renderCount.test.d.ts.map +0 -1
  73. package/dist/tests/renderCount.test.js +0 -95
  74. package/dist/tests/scopeEnforcement.test.d.ts +0 -2
  75. package/dist/tests/scopeEnforcement.test.d.ts.map +0 -1
  76. package/dist/tests/scopeEnforcement.test.js +0 -157
  77. package/dist/tests/useAction.test.d.ts +0 -2
  78. package/dist/tests/useAction.test.d.ts.map +0 -1
  79. package/dist/tests/useAction.test.js +0 -132
  80. package/dist/tests/useAsync.test.d.ts +0 -2
  81. package/dist/tests/useAsync.test.d.ts.map +0 -1
  82. package/dist/tests/useAsync.test.js +0 -499
  83. package/dist/tests/useDerived.test.d.ts +0 -2
  84. package/dist/tests/useDerived.test.d.ts.map +0 -1
  85. package/dist/tests/useDerived.test.js +0 -407
  86. package/dist/tests/useEffect.test.d.ts +0 -2
  87. package/dist/tests/useEffect.test.d.ts.map +0 -1
  88. package/dist/tests/useEffect.test.js +0 -600
  89. package/dist/tests/useLookup.test.d.ts +0 -2
  90. package/dist/tests/useLookup.test.d.ts.map +0 -1
  91. package/dist/tests/useLookup.test.js +0 -299
  92. package/dist/tests/useRef.test.d.ts +0 -2
  93. package/dist/tests/useRef.test.d.ts.map +0 -1
  94. package/dist/tests/useRef.test.js +0 -189
  95. package/dist/tests/useState.test.d.ts +0 -2
  96. package/dist/tests/useState.test.d.ts.map +0 -1
  97. package/dist/tests/useState.test.js +0 -178
  98. package/dist/tests/useSuspend.test.d.ts +0 -2
  99. package/dist/tests/useSuspend.test.d.ts.map +0 -1
  100. package/dist/tests/useSuspend.test.js +0 -752
  101. package/dist/tests/useView.test.d.ts +0 -2
  102. package/dist/tests/useView.test.d.ts.map +0 -1
  103. package/dist/tests/useView.test.js +0 -305
  104. package/dist/useComputed.d.ts +0 -5
  105. package/dist/useComputed.d.ts.map +0 -1
  106. package/dist/useComputed.js +0 -69
  107. package/dist/useQuery.d.ts +0 -25
  108. package/dist/useQuery.d.ts.map +0 -1
  109. package/dist/useQuery.js +0 -25
  110. package/dist/useSuspendAsync.d.ts +0 -18
  111. package/dist/useSuspendAsync.d.ts.map +0 -1
  112. package/dist/useSuspendAsync.js +0 -37
  113. package/dist/useTask.d.ts +0 -25
  114. package/dist/useTask.d.ts.map +0 -1
  115. package/dist/useTask.js +0 -70
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useView.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useView.test.d.ts","sourceRoot":"","sources":["../../src/tests/useView.test.tsx"],"names":[],"mappings":""}
@@ -1,305 +0,0 @@
1
- import { jsx as _jsx } from "rask-ui/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { useView } from "../useView";
4
- import { useState } from "../useState";
5
- import { Observer } from "../observation";
6
- import { render } from "../";
7
- describe("createView", () => {
8
- it("should merge two plain objects", () => {
9
- let view;
10
- function Component() {
11
- const a = { x: 1, y: 2 };
12
- const b = { z: 3 };
13
- view = useView(a, b);
14
- return () => _jsx("div", { children: "test" });
15
- }
16
- const container = document.createElement("div");
17
- render(_jsx(Component, {}), container);
18
- expect(view.x).toBe(1);
19
- expect(view.y).toBe(2);
20
- expect(view.z).toBe(3);
21
- });
22
- it("should allow later arguments to override earlier ones", () => {
23
- let view;
24
- function Component() {
25
- const a = { x: 1, y: 2 };
26
- const b = { y: 3, z: 4 };
27
- view = useView(a, b);
28
- return () => _jsx("div", { children: "test" });
29
- }
30
- const container = document.createElement("div");
31
- render(_jsx(Component, {}), container);
32
- expect(view.x).toBe(1);
33
- expect(view.y).toBe(3); // b.y overrides a.y
34
- expect(view.z).toBe(4);
35
- });
36
- it("should maintain reactivity with reactive objects", async () => {
37
- let view;
38
- let state;
39
- function Component() {
40
- state = useState({ count: 0 });
41
- view = useView(state);
42
- return () => _jsx("div", { children: "test" });
43
- }
44
- const container = document.createElement("div");
45
- render(_jsx(Component, {}), container);
46
- let renderCount = 0;
47
- let lastValue = 0;
48
- const observer = new Observer(() => {
49
- renderCount++;
50
- });
51
- const dispose = observer.observe();
52
- lastValue = view.count; // Track the property
53
- dispose();
54
- expect(renderCount).toBe(0);
55
- state.count = 5;
56
- // Wait for microtask to process notification
57
- await new Promise((resolve) => {
58
- queueMicrotask(() => {
59
- expect(renderCount).toBe(1);
60
- lastValue = view.count;
61
- expect(lastValue).toBe(5);
62
- resolve(undefined);
63
- });
64
- });
65
- });
66
- it("should merge reactive and plain objects while maintaining reactivity", () => {
67
- let view;
68
- let state;
69
- function Component() {
70
- state = useState({ count: 0 });
71
- const helpers = {
72
- increment() {
73
- state.count++;
74
- },
75
- decrement() {
76
- state.count--;
77
- },
78
- };
79
- view = useView(state, helpers);
80
- return () => _jsx("div", { children: "test" });
81
- }
82
- const container = document.createElement("div");
83
- render(_jsx(Component, {}), container);
84
- expect(view.count).toBe(0);
85
- expect(typeof view.increment).toBe("function");
86
- expect(typeof view.decrement).toBe("function");
87
- view.increment();
88
- expect(view.count).toBe(1);
89
- view.decrement();
90
- expect(view.count).toBe(0);
91
- });
92
- it("should merge multiple reactive objects", () => {
93
- let view;
94
- let state1;
95
- let state2;
96
- let state3;
97
- function Component() {
98
- state1 = useState({ count: 0 });
99
- state2 = useState({ name: "Alice" });
100
- state3 = useState({ age: 25 });
101
- view = useView(state1, state2, state3);
102
- return () => _jsx("div", { children: "test" });
103
- }
104
- const container = document.createElement("div");
105
- render(_jsx(Component, {}), container);
106
- expect(view.count).toBe(0);
107
- expect(view.name).toBe("Alice");
108
- expect(view.age).toBe(25);
109
- state1.count = 10;
110
- state2.name = "Bob";
111
- state3.age = 30;
112
- expect(view.count).toBe(10);
113
- expect(view.name).toBe("Bob");
114
- expect(view.age).toBe(30);
115
- });
116
- it("should reflect changes in source objects", () => {
117
- let view;
118
- let source;
119
- function Component() {
120
- source = { x: 1 };
121
- view = useView(source);
122
- return () => _jsx("div", { children: "test" });
123
- }
124
- const container = document.createElement("div");
125
- render(_jsx(Component, {}), container);
126
- expect(view.x).toBe(1);
127
- source.x = 2;
128
- expect(view.x).toBe(2);
129
- });
130
- it("should handle property override order correctly", () => {
131
- let view;
132
- function Component() {
133
- const a = { x: 1, y: 2, z: 3 };
134
- const b = { y: 20 };
135
- const c = { z: 30 };
136
- view = useView(a, b, c);
137
- return () => _jsx("div", { children: "test" });
138
- }
139
- const container = document.createElement("div");
140
- render(_jsx(Component, {}), container);
141
- expect(view.x).toBe(1); // From a
142
- expect(view.y).toBe(20); // From b (overrides a)
143
- expect(view.z).toBe(30); // From c (overrides a)
144
- });
145
- it("should only include enumerable properties", () => {
146
- let view;
147
- function Component() {
148
- const obj = { x: 1 };
149
- Object.defineProperty(obj, "hidden", {
150
- value: 42,
151
- enumerable: false,
152
- });
153
- view = useView(obj);
154
- return () => _jsx("div", { children: "test" });
155
- }
156
- const container = document.createElement("div");
157
- render(_jsx(Component, {}), container);
158
- expect(view.x).toBe(1);
159
- expect(view.hidden).toBeUndefined();
160
- });
161
- it("should handle symbol keys", () => {
162
- let view;
163
- let sym;
164
- function Component() {
165
- sym = Symbol("test");
166
- const obj = { x: 1, [sym]: "symbol value" };
167
- view = useView(obj);
168
- return () => _jsx("div", { children: "test" });
169
- }
170
- const container = document.createElement("div");
171
- render(_jsx(Component, {}), container);
172
- expect(view.x).toBe(1);
173
- expect(view[sym]).toBe("symbol value");
174
- });
175
- it("should track dependencies for each property independently", async () => {
176
- let view;
177
- let state;
178
- function Component() {
179
- state = useState({ count: 0, name: "Alice" });
180
- view = useView(state);
181
- return () => _jsx("div", { children: "test" });
182
- }
183
- const container = document.createElement("div");
184
- render(_jsx(Component, {}), container);
185
- let countRenderCount = 0;
186
- let nameRenderCount = 0;
187
- // Observer that only accesses count
188
- const countObserver = new Observer(() => {
189
- countRenderCount++;
190
- });
191
- const dispose1 = countObserver.observe();
192
- view.count; // Track count
193
- dispose1();
194
- expect(countRenderCount).toBe(0);
195
- // Change count - should trigger
196
- state.count = 1;
197
- await new Promise((resolve) => {
198
- queueMicrotask(() => {
199
- expect(countRenderCount).toBe(1);
200
- resolve(undefined);
201
- });
202
- });
203
- // Change name - should NOT trigger (not tracked)
204
- state.name = "Bob";
205
- await new Promise((resolve) => {
206
- queueMicrotask(() => {
207
- expect(countRenderCount).toBe(1); // Still 1
208
- resolve(undefined);
209
- });
210
- });
211
- // Now track name with a different observer
212
- const nameObserver = new Observer(() => {
213
- nameRenderCount++;
214
- });
215
- const dispose2 = nameObserver.observe();
216
- view.name; // Track name
217
- dispose2();
218
- expect(nameRenderCount).toBe(0);
219
- // Change name - should trigger name observer
220
- state.name = "Charlie";
221
- await new Promise((resolve) => {
222
- queueMicrotask(() => {
223
- expect(nameRenderCount).toBe(1);
224
- resolve(undefined);
225
- });
226
- });
227
- });
228
- it("should return the same value type as source", () => {
229
- let view;
230
- function Component() {
231
- const obj = { nums: [1, 2, 3], nested: { x: 1 } };
232
- view = useView(obj);
233
- return () => _jsx("div", { children: "test" });
234
- }
235
- const container = document.createElement("div");
236
- render(_jsx(Component, {}), container);
237
- expect(Array.isArray(view.nums)).toBe(true);
238
- expect(view.nums).toEqual([1, 2, 3]);
239
- expect(typeof view.nested).toBe("object");
240
- expect(view.nested.x).toBe(1);
241
- });
242
- it("should handle empty merge", () => {
243
- let view;
244
- function Component() {
245
- view = useView({});
246
- return () => _jsx("div", { children: "test" });
247
- }
248
- const container = document.createElement("div");
249
- render(_jsx(Component, {}), container);
250
- expect(Object.keys(view).length).toBe(0);
251
- });
252
- it("should merge single object", () => {
253
- let view;
254
- function Component() {
255
- const obj = { x: 1, y: 2 };
256
- view = useView(obj);
257
- return () => _jsx("div", { children: "test" });
258
- }
259
- const container = document.createElement("div");
260
- render(_jsx(Component, {}), container);
261
- expect(view.x).toBe(1);
262
- expect(view.y).toBe(2);
263
- });
264
- it("should maintain function context", () => {
265
- let view;
266
- let state;
267
- function Component() {
268
- state = useState({ count: 0 });
269
- const methods = {
270
- increment() {
271
- state.count++;
272
- },
273
- };
274
- view = useView(state, methods);
275
- return () => _jsx("div", { children: "test" });
276
- }
277
- const container = document.createElement("div");
278
- render(_jsx(Component, {}), container);
279
- expect(view.count).toBe(0);
280
- view.increment();
281
- expect(view.count).toBe(1);
282
- expect(state.count).toBe(1);
283
- });
284
- it("should work with reactive state and computed-like patterns", () => {
285
- let view;
286
- let state;
287
- function Component() {
288
- state = useState({ firstName: "John", lastName: "Doe" });
289
- const computed = {
290
- get fullName() {
291
- return `${state.firstName} ${state.lastName}`;
292
- },
293
- };
294
- view = useView(state, computed);
295
- return () => _jsx("div", { children: "test" });
296
- }
297
- const container = document.createElement("div");
298
- render(_jsx(Component, {}), container);
299
- expect(view.firstName).toBe("John");
300
- expect(view.lastName).toBe("Doe");
301
- expect(view.fullName).toBe("John Doe");
302
- state.firstName = "Jane";
303
- expect(view.fullName).toBe("Jane Doe");
304
- });
305
- });
@@ -1,5 +0,0 @@
1
- export type Computed<T extends Record<string, () => any>> = {
2
- [K in keyof T]: ReturnType<T[K]>;
3
- };
4
- export declare function useComputed<T extends Record<string, () => any>>(computed: T): Computed<T>;
5
- //# sourceMappingURL=useComputed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComputed.d.ts","sourceRoot":"","sources":["../src/useComputed.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,IAAI;KACzD,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAC7D,QAAQ,EAAE,CAAC,GACV,QAAQ,CAAC,CAAC,CAAC,CA0Eb"}
@@ -1,69 +0,0 @@
1
- import { getCurrentComponent, useCleanup } from "./component";
2
- import { INSPECT_MARKER, INSPECTOR_ENABLED } from "./inspect";
3
- import { getCurrentObserver, Observer, Signal } from "./observation";
4
- export function useComputed(computed) {
5
- const currentComponent = getCurrentComponent();
6
- const proxy = {};
7
- let notifyInspectorRef = {};
8
- for (const prop in computed) {
9
- let isDirty = true;
10
- let value;
11
- const signal = new Signal();
12
- const computedObserver = new Observer(() => {
13
- isDirty = true;
14
- signal.notify();
15
- if (INSPECTOR_ENABLED) {
16
- notifyInspectorRef.current?.notify({
17
- type: "computed",
18
- path: notifyInspectorRef.current.path.concat(prop),
19
- isDirty: true,
20
- value,
21
- });
22
- }
23
- });
24
- useCleanup(() => computedObserver.dispose());
25
- Object.defineProperty(proxy, prop, {
26
- enumerable: true,
27
- configurable: true,
28
- get() {
29
- const currentObserver = getCurrentObserver();
30
- if (currentObserver) {
31
- currentObserver.subscribeSignal(signal);
32
- }
33
- if (isDirty) {
34
- const stopObserving = computedObserver.observe();
35
- value = computed[prop]();
36
- stopObserving();
37
- isDirty = false;
38
- if (INSPECTOR_ENABLED) {
39
- notifyInspectorRef.current?.notify({
40
- type: "computed",
41
- path: notifyInspectorRef.current.path.concat(prop),
42
- isDirty: false,
43
- value,
44
- });
45
- }
46
- return value;
47
- }
48
- return value;
49
- },
50
- });
51
- }
52
- if (INSPECTOR_ENABLED) {
53
- Object.defineProperty(proxy, INSPECT_MARKER, {
54
- enumerable: false,
55
- configurable: false,
56
- get() {
57
- return !notifyInspectorRef.current;
58
- },
59
- set: (value) => {
60
- Object.defineProperty(notifyInspectorRef, "current", {
61
- get() {
62
- return value.current;
63
- },
64
- });
65
- },
66
- });
67
- }
68
- return proxy;
69
- }
@@ -1,25 +0,0 @@
1
- type QueryState<T, I = null> = {
2
- isPending: true;
3
- error: null;
4
- value: I;
5
- } | {
6
- isPending: false;
7
- error: null;
8
- value: T;
9
- } | {
10
- isPending: false;
11
- error: string;
12
- value: I | null;
13
- };
14
- export type Query<T, P, I = null> = [
15
- QueryState<T, I>,
16
- [
17
- P
18
- ] extends [never] ? (params: P) => void : () => void
19
- ];
20
- export declare function useQuery<T>(query: () => Promise<T>): Query<T, never>;
21
- export declare function useQuery<T>(query: () => Promise<T>, initialValue: T): Query<T, never, T>;
22
- export declare function useQuery<T, P>(query: (params: P) => Promise<T>): Query<T, never>;
23
- export declare function useQuery<T, P>(query: (params: P) => Promise<T>, initialValue: T): Query<T, never, T>;
24
- export {};
25
- //# sourceMappingURL=useQuery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../src/useQuery.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IACvB;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;CACV,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;CACV,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI;IAClC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB;QAAC,CAAC;KAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;CACvD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACtE,wBAAgB,QAAQ,CAAC,CAAC,EACxB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACvB,YAAY,EAAE,CAAC,GACd,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACtB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC/B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAChC,YAAY,EAAE,CAAC,GACd,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC"}
package/dist/useQuery.js DELETED
@@ -1,25 +0,0 @@
1
- import { useEffect } from "./useEffect";
2
- import { useTask } from "./useTask";
3
- export function useQuery(query, initialValue) {
4
- const [taskState, runTask] = useTask(query);
5
- let lastValue = initialValue === undefined ? null : initialValue;
6
- useEffect(() => {
7
- if (taskState.result) {
8
- lastValue = taskState.result;
9
- }
10
- });
11
- return [
12
- {
13
- get value() {
14
- return taskState.result || lastValue;
15
- },
16
- get isPending() {
17
- return taskState.isPending;
18
- },
19
- get error() {
20
- return taskState.error;
21
- },
22
- },
23
- runTask,
24
- ];
25
- }
@@ -1,18 +0,0 @@
1
- import { AsyncState } from "./useAsync";
2
- type SuspendAsyncState<T extends Record<string, AsyncState<any>>> = {
3
- values: {
4
- [K in keyof T]: T[K]["value"];
5
- };
6
- } & ({
7
- isPending: true;
8
- error: null;
9
- } | {
10
- isPending: false;
11
- error: string;
12
- } | {
13
- isPending: false;
14
- error: null;
15
- });
16
- export declare function useSuspendAsync<T extends Record<string, AsyncState<any>>>(asyncs: T): SuspendAsyncState<T>;
17
- export {};
18
- //# sourceMappingURL=useSuspendAsync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSuspendAsync.d.ts","sourceRoot":"","sources":["../src/useSuspendAsync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI;IAClE,MAAM,EAAE;SACL,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;KAC9B,CAAC;CACH,GAAG,CACA;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC;CACb,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;CACb,CACJ,CAAC;AAEF,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EACvE,MAAM,EAAE,CAAC,wBAyCV"}
@@ -1,37 +0,0 @@
1
- import { useEffect } from "./useEffect";
2
- import { useState } from "./useState";
3
- export function useSuspendAsync(asyncs) {
4
- const state = useState({
5
- isPending: false,
6
- error: null,
7
- values: Object.keys(asyncs).reduce((aggr, key) => ({ ...aggr, [key]: asyncs[key].value }), {}),
8
- });
9
- useEffect(() => {
10
- let isPending = false;
11
- let error = "";
12
- for (const key in asyncs) {
13
- if (asyncs[key].error) {
14
- error += asyncs[key].error + "\n";
15
- continue;
16
- }
17
- if (asyncs[key].isPending) {
18
- isPending = true;
19
- continue;
20
- }
21
- }
22
- if (error) {
23
- state.isPending = false;
24
- state.error = error;
25
- return;
26
- }
27
- if (isPending) {
28
- state.isPending = false;
29
- state.error = null;
30
- return;
31
- }
32
- for (const key in asyncs) {
33
- state.values[key] = asyncs[key].value;
34
- }
35
- });
36
- return state;
37
- }
package/dist/useTask.d.ts DELETED
@@ -1,25 +0,0 @@
1
- export type TaskState<P, T> = {
2
- isPending: false;
3
- params: null;
4
- result: null;
5
- error: null;
6
- } | {
7
- isPending: true;
8
- result: T | null;
9
- params: P;
10
- error: null;
11
- } | {
12
- isPending: false;
13
- params: null;
14
- result: T;
15
- error: null;
16
- } | {
17
- isPending: false;
18
- params: null;
19
- result: null;
20
- error: string;
21
- };
22
- export type Task<A, B = never> = [B] extends [never] ? [TaskState<null, A>, () => void] : [TaskState<A, B>, (params: A) => void];
23
- export declare function useTask<T>(task: (params: undefined, signal: AbortSignal) => Promise<T>): Task<T>;
24
- export declare function useTask<P, T>(task: (params: P, signal: AbortSignal) => Promise<T>): Task<P, T>;
25
- //# sourceMappingURL=useTask.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTask.d.ts","sourceRoot":"","sources":["../src/useTask.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IACtB;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,IAAI,CAAC;CACb,GACD;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,IAAI,CAAC;CACb,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,IAAI,CAAC;CACb,GACD;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAChD,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,GAChC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AAE3C,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3D,IAAI,CAAC,CAAC,CAAC,CAAC;AACX,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACnD,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
package/dist/useTask.js DELETED
@@ -1,70 +0,0 @@
1
- import { useCleanup, getCurrentComponent } from "./component";
2
- import { assignState, useState } from "./useState";
3
- export function useTask(task) {
4
- const currentComponent = getCurrentComponent();
5
- if (!currentComponent || currentComponent.isRendering) {
6
- throw new Error("Only use createTask in component setup");
7
- }
8
- const state = useState({
9
- isPending: false,
10
- result: null,
11
- error: null,
12
- params: null,
13
- });
14
- let currentAbortController;
15
- const fetch = (params) => {
16
- currentAbortController?.abort();
17
- const abortController = (currentAbortController = new AbortController());
18
- const promise = task(params, abortController.signal);
19
- promise
20
- .then((result) => {
21
- if (abortController.signal.aborted) {
22
- return;
23
- }
24
- assignState(state, {
25
- isPending: false,
26
- result,
27
- error: null,
28
- params: null,
29
- });
30
- })
31
- .catch((error) => {
32
- if (abortController.signal.aborted) {
33
- return;
34
- }
35
- assignState(state, {
36
- isPending: false,
37
- result: null,
38
- error: String(error),
39
- params: null,
40
- });
41
- });
42
- return promise;
43
- };
44
- useCleanup(() => currentAbortController?.abort());
45
- return [
46
- {
47
- get isPending() {
48
- return state.isPending;
49
- },
50
- get result() {
51
- return state.result;
52
- },
53
- get error() {
54
- return state.error;
55
- },
56
- get params() {
57
- return state.params;
58
- },
59
- },
60
- (params) => {
61
- fetch(params);
62
- assignState(state, {
63
- isPending: true,
64
- result: null,
65
- error: null,
66
- params: (params || null),
67
- });
68
- },
69
- ];
70
- }