@effect-rx/rx-react 0.1.17 → 0.1.19
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/index.d.ts.map +1 -1
- package/index.js +34 -51
- package/index.js.map +1 -1
- package/mjs/index.mjs +34 -51
- package/mjs/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +41 -51
package/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["./src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEtC;;;GAGG;AACH,eAAO,MAAM,eAAe,kCAA0D,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["./src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEtC;;;GAGG;AACH,eAAO,MAAM,eAAe,kCAA0D,CAAA;AA8BtF;;;GAGG;AACH,eAAO,MAAM,UAAU,wBAItB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,6DAA4D,IAUhF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,wCAAuC,MAAM,IAKrE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,8FAA6F,IAAI,CAIvG,CAAA;AA8CZ;;;GAGG;AACH,eAAO,MAAM,aAAa,mDAEd;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE;wBAE7B,OAAO;;CA0B5B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,mDAErB;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE;wBAE7B,OAAO;;CAW5B,CAAA"}
|
package/index.js
CHANGED
@@ -28,24 +28,23 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
28
28
|
*/
|
29
29
|
const RegistryContext = /*#__PURE__*/React.createContext( /*#__PURE__*/Registry.make());
|
30
30
|
exports.RegistryContext = RegistryContext;
|
31
|
+
const storeRegistry = /*#__PURE__*/(0, _GlobalValue.globalValue)("@effect-rx/rx-react/storeRegistry", () => new WeakMap());
|
31
32
|
function makeStore(registry, rx) {
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
const [get, unmount] = registry.subscribeGetter(rx, f);
|
37
|
-
getter = get;
|
38
|
-
return unmount;
|
39
|
-
}
|
40
|
-
function snapshot() {
|
41
|
-
return getter();
|
33
|
+
const stores = storeRegistry.get(registry) ?? storeRegistry.set(registry, new WeakMap()).get(registry);
|
34
|
+
const store = stores.get(rx);
|
35
|
+
if (store) {
|
36
|
+
return store;
|
42
37
|
}
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
snapshot
|
38
|
+
const newStore = {
|
39
|
+
subscribe(f) {
|
40
|
+
return registry.subscribe(rx, f);
|
41
|
+
},
|
42
|
+
snapshot() {
|
43
|
+
return registry.get(rx);
|
44
|
+
}
|
48
45
|
};
|
46
|
+
stores.set(rx, newStore);
|
47
|
+
return newStore;
|
49
48
|
}
|
50
49
|
/**
|
51
50
|
* @since 1.0.0
|
@@ -53,11 +52,8 @@ function makeStore(registry, rx) {
|
|
53
52
|
*/
|
54
53
|
const useRxValue = rx => {
|
55
54
|
const registry = React.useContext(RegistryContext);
|
56
|
-
const store =
|
57
|
-
|
58
|
-
store.current = makeStore(registry, rx);
|
59
|
-
}
|
60
|
-
return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot);
|
55
|
+
const store = makeStore(registry, rx);
|
56
|
+
return React.useSyncExternalStore(store.subscribe, store.snapshot);
|
61
57
|
};
|
62
58
|
/**
|
63
59
|
* @since 1.0.0
|
@@ -93,23 +89,17 @@ const useRefreshRx = rx => {
|
|
93
89
|
exports.useRefreshRx = useRefreshRx;
|
94
90
|
const useRx = rx => [useRxValue(rx), useSetRx(rx)];
|
95
91
|
exports.useRx = useRx;
|
96
|
-
const suspenseCache = /*#__PURE__*/(0, _GlobalValue.globalValue)("@effect-rx/rx-react/suspenseCache", () => new
|
92
|
+
const suspenseCache = /*#__PURE__*/(0, _GlobalValue.globalValue)("@effect-rx/rx-react/suspenseCache", () => new WeakMap());
|
93
|
+
const suspenseRegistry = /*#__PURE__*/new FinalizationRegistry(unmount => {
|
94
|
+
unmount();
|
95
|
+
});
|
97
96
|
const suspenseRx = /*#__PURE__*/Rx.family(rx => Rx.readable((get, ctx) => {
|
98
97
|
const result = get(rx);
|
99
98
|
const value = Result.noWaiting(result);
|
100
99
|
if (value._tag === "Initial") {
|
101
100
|
return {
|
102
101
|
_tag: "Suspended",
|
103
|
-
promise: new Promise(resolve =>
|
104
|
-
ctx.addFinalizer(() => {
|
105
|
-
resolve();
|
106
|
-
const unmount = suspenseCache.get(rx);
|
107
|
-
if (unmount) {
|
108
|
-
unmount();
|
109
|
-
suspenseCache.delete(rx);
|
110
|
-
}
|
111
|
-
});
|
112
|
-
})
|
102
|
+
promise: new Promise(resolve => ctx.addFinalizer(resolve))
|
113
103
|
};
|
114
104
|
}
|
115
105
|
const isWaiting = Result.isWaiting(result);
|
@@ -124,16 +114,7 @@ const suspenseRxWaiting = /*#__PURE__*/Rx.family(rx => Rx.readable((get, ctx) =>
|
|
124
114
|
if (result._tag === "Waiting" || result._tag === "Initial") {
|
125
115
|
return {
|
126
116
|
_tag: "Suspended",
|
127
|
-
promise: new Promise(resolve =>
|
128
|
-
ctx.addFinalizer(() => {
|
129
|
-
resolve();
|
130
|
-
const unmount = suspenseCache.get(rx);
|
131
|
-
if (unmount) {
|
132
|
-
unmount();
|
133
|
-
suspenseCache.delete(rx);
|
134
|
-
}
|
135
|
-
});
|
136
|
-
})
|
117
|
+
promise: new Promise(resolve => ctx.addFinalizer(resolve))
|
137
118
|
};
|
138
119
|
}
|
139
120
|
return {
|
@@ -152,9 +133,18 @@ const useRxSuspense = (rx, options) => {
|
|
152
133
|
const result = useRxValue(resultRx);
|
153
134
|
if (result._tag === "Suspended") {
|
154
135
|
if (!suspenseCache.has(resultRx)) {
|
155
|
-
|
136
|
+
const unmount = registry.mount(resultRx);
|
137
|
+
suspenseCache.set(resultRx, unmount);
|
138
|
+
suspenseRegistry.register(resultRx, unmount, resultRx);
|
156
139
|
}
|
157
140
|
throw result.promise;
|
141
|
+
} else if (suspenseCache.has(resultRx)) {
|
142
|
+
const unmount = suspenseCache.get(resultRx);
|
143
|
+
if (unmount) {
|
144
|
+
suspenseCache.delete(resultRx);
|
145
|
+
suspenseRegistry.unregister(resultRx);
|
146
|
+
unmount();
|
147
|
+
}
|
158
148
|
}
|
159
149
|
return result;
|
160
150
|
};
|
@@ -164,15 +154,8 @@ const useRxSuspense = (rx, options) => {
|
|
164
154
|
*/
|
165
155
|
exports.useRxSuspense = useRxSuspense;
|
166
156
|
const useRxSuspenseSuccess = (rx, options) => {
|
167
|
-
const
|
168
|
-
|
169
|
-
const result = useRxValue(resultRx);
|
170
|
-
if (result._tag === "Suspended") {
|
171
|
-
if (!suspenseCache.has(resultRx)) {
|
172
|
-
suspenseCache.set(resultRx, registry.mount(resultRx));
|
173
|
-
}
|
174
|
-
throw result.promise;
|
175
|
-
} else if (result.value._tag === "Failure") {
|
157
|
+
const result = useRxSuspense(rx, options);
|
158
|
+
if (result.value._tag === "Failure") {
|
176
159
|
throw Cause.squash(result.value.cause);
|
177
160
|
}
|
178
161
|
return {
|
package/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["Registry","_interopRequireWildcard","require","Registry_1","exports","Result","Result_1","Rx","Rx_1","_GlobalValue","Cause","React","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","RegistryContext","createContext","make","makeStore","registry","rx","
|
1
|
+
{"version":3,"file":"index.js","names":["Registry","_interopRequireWildcard","require","Registry_1","exports","Result","Result_1","Rx","Rx_1","_GlobalValue","Cause","React","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","RegistryContext","createContext","make","storeRegistry","globalValue","makeStore","registry","rx","stores","store","newStore","subscribe","f","snapshot","useRxValue","useContext","useSyncExternalStore","useSetRx","useCallback","value","useRefreshRx","refresh","useRx","suspenseCache","suspenseRegistry","FinalizationRegistry","unmount","suspenseRx","family","readable","ctx","result","noWaiting","_tag","promise","Promise","resolve","addFinalizer","isWaiting","suspenseRxWaiting","useRxSuspense","options","resultRx","useMemo","suspendOnWaiting","mount","register","delete","unregister","useRxSuspenseSuccess","squash","cause"],"sources":["./src/index.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/mjs/index.mjs
CHANGED
@@ -18,24 +18,23 @@ export { Rx_1 as Rx };
|
|
18
18
|
* @category context
|
19
19
|
*/
|
20
20
|
export const RegistryContext = /*#__PURE__*/React.createContext( /*#__PURE__*/Registry.make());
|
21
|
+
const storeRegistry = /*#__PURE__*/globalValue("@effect-rx/rx-react/storeRegistry", () => new WeakMap());
|
21
22
|
function makeStore(registry, rx) {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
const [get, unmount] = registry.subscribeGetter(rx, f);
|
27
|
-
getter = get;
|
28
|
-
return unmount;
|
29
|
-
}
|
30
|
-
function snapshot() {
|
31
|
-
return getter();
|
23
|
+
const stores = storeRegistry.get(registry) ?? storeRegistry.set(registry, new WeakMap()).get(registry);
|
24
|
+
const store = stores.get(rx);
|
25
|
+
if (store) {
|
26
|
+
return store;
|
32
27
|
}
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
snapshot
|
28
|
+
const newStore = {
|
29
|
+
subscribe(f) {
|
30
|
+
return registry.subscribe(rx, f);
|
31
|
+
},
|
32
|
+
snapshot() {
|
33
|
+
return registry.get(rx);
|
34
|
+
}
|
38
35
|
};
|
36
|
+
stores.set(rx, newStore);
|
37
|
+
return newStore;
|
39
38
|
}
|
40
39
|
/**
|
41
40
|
* @since 1.0.0
|
@@ -43,11 +42,8 @@ function makeStore(registry, rx) {
|
|
43
42
|
*/
|
44
43
|
export const useRxValue = rx => {
|
45
44
|
const registry = React.useContext(RegistryContext);
|
46
|
-
const store =
|
47
|
-
|
48
|
-
store.current = makeStore(registry, rx);
|
49
|
-
}
|
50
|
-
return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot);
|
45
|
+
const store = makeStore(registry, rx);
|
46
|
+
return React.useSyncExternalStore(store.subscribe, store.snapshot);
|
51
47
|
};
|
52
48
|
/**
|
53
49
|
* @since 1.0.0
|
@@ -79,23 +75,17 @@ export const useRefreshRx = rx => {
|
|
79
75
|
* @category hooks
|
80
76
|
*/
|
81
77
|
export const useRx = rx => [useRxValue(rx), useSetRx(rx)];
|
82
|
-
const suspenseCache = /*#__PURE__*/globalValue("@effect-rx/rx-react/suspenseCache", () => new
|
78
|
+
const suspenseCache = /*#__PURE__*/globalValue("@effect-rx/rx-react/suspenseCache", () => new WeakMap());
|
79
|
+
const suspenseRegistry = /*#__PURE__*/new FinalizationRegistry(unmount => {
|
80
|
+
unmount();
|
81
|
+
});
|
83
82
|
const suspenseRx = /*#__PURE__*/Rx.family(rx => Rx.readable((get, ctx) => {
|
84
83
|
const result = get(rx);
|
85
84
|
const value = Result.noWaiting(result);
|
86
85
|
if (value._tag === "Initial") {
|
87
86
|
return {
|
88
87
|
_tag: "Suspended",
|
89
|
-
promise: new Promise(resolve =>
|
90
|
-
ctx.addFinalizer(() => {
|
91
|
-
resolve();
|
92
|
-
const unmount = suspenseCache.get(rx);
|
93
|
-
if (unmount) {
|
94
|
-
unmount();
|
95
|
-
suspenseCache.delete(rx);
|
96
|
-
}
|
97
|
-
});
|
98
|
-
})
|
88
|
+
promise: new Promise(resolve => ctx.addFinalizer(resolve))
|
99
89
|
};
|
100
90
|
}
|
101
91
|
const isWaiting = Result.isWaiting(result);
|
@@ -110,16 +100,7 @@ const suspenseRxWaiting = /*#__PURE__*/Rx.family(rx => Rx.readable((get, ctx) =>
|
|
110
100
|
if (result._tag === "Waiting" || result._tag === "Initial") {
|
111
101
|
return {
|
112
102
|
_tag: "Suspended",
|
113
|
-
promise: new Promise(resolve =>
|
114
|
-
ctx.addFinalizer(() => {
|
115
|
-
resolve();
|
116
|
-
const unmount = suspenseCache.get(rx);
|
117
|
-
if (unmount) {
|
118
|
-
unmount();
|
119
|
-
suspenseCache.delete(rx);
|
120
|
-
}
|
121
|
-
});
|
122
|
-
})
|
103
|
+
promise: new Promise(resolve => ctx.addFinalizer(resolve))
|
123
104
|
};
|
124
105
|
}
|
125
106
|
return {
|
@@ -138,9 +119,18 @@ export const useRxSuspense = (rx, options) => {
|
|
138
119
|
const result = useRxValue(resultRx);
|
139
120
|
if (result._tag === "Suspended") {
|
140
121
|
if (!suspenseCache.has(resultRx)) {
|
141
|
-
|
122
|
+
const unmount = registry.mount(resultRx);
|
123
|
+
suspenseCache.set(resultRx, unmount);
|
124
|
+
suspenseRegistry.register(resultRx, unmount, resultRx);
|
142
125
|
}
|
143
126
|
throw result.promise;
|
127
|
+
} else if (suspenseCache.has(resultRx)) {
|
128
|
+
const unmount = suspenseCache.get(resultRx);
|
129
|
+
if (unmount) {
|
130
|
+
suspenseCache.delete(resultRx);
|
131
|
+
suspenseRegistry.unregister(resultRx);
|
132
|
+
unmount();
|
133
|
+
}
|
144
134
|
}
|
145
135
|
return result;
|
146
136
|
};
|
@@ -149,15 +139,8 @@ export const useRxSuspense = (rx, options) => {
|
|
149
139
|
* @category hooks
|
150
140
|
*/
|
151
141
|
export const useRxSuspenseSuccess = (rx, options) => {
|
152
|
-
const
|
153
|
-
|
154
|
-
const result = useRxValue(resultRx);
|
155
|
-
if (result._tag === "Suspended") {
|
156
|
-
if (!suspenseCache.has(resultRx)) {
|
157
|
-
suspenseCache.set(resultRx, registry.mount(resultRx));
|
158
|
-
}
|
159
|
-
throw result.promise;
|
160
|
-
} else if (result.value._tag === "Failure") {
|
142
|
+
const result = useRxSuspense(rx, options);
|
143
|
+
if (result.value._tag === "Failure") {
|
161
144
|
throw Cause.squash(result.value.cause);
|
162
145
|
}
|
163
146
|
return {
|
package/mjs/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Registry","Result","Rx","globalValue","Cause","React","RegistryContext","createContext","make","
|
1
|
+
{"version":3,"file":"index.mjs","names":["Registry","Result","Rx","globalValue","Cause","React","RegistryContext","createContext","make","storeRegistry","WeakMap","makeStore","registry","rx","stores","get","set","store","newStore","subscribe","f","snapshot","useRxValue","useContext","useSyncExternalStore","useSetRx","useCallback","value","useRefreshRx","refresh","useRx","suspenseCache","suspenseRegistry","FinalizationRegistry","unmount","suspenseRx","family","readable","ctx","result","noWaiting","_tag","promise","Promise","resolve","addFinalizer","isWaiting","suspenseRxWaiting","useRxSuspense","options","resultRx","useMemo","suspendOnWaiting","has","mount","register","delete","unregister","useRxSuspenseSuccess","squash","cause"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
@@ -19,25 +19,31 @@ export * as Rx from "@effect-rx/rx/Rx"
|
|
19
19
|
export const RegistryContext = React.createContext<Registry.Registry>(Registry.make())
|
20
20
|
|
21
21
|
interface RxStore<A> {
|
22
|
-
readonly rx: Rx.Rx<A>
|
23
|
-
readonly registry: Registry.Registry
|
24
22
|
readonly subscribe: (f: () => void) => () => void
|
25
23
|
readonly snapshot: () => A
|
26
24
|
}
|
27
25
|
|
26
|
+
const storeRegistry = globalValue(
|
27
|
+
"@effect-rx/rx-react/storeRegistry",
|
28
|
+
() => new WeakMap<Registry.Registry, WeakMap<Rx.Rx<any>, RxStore<any>>>()
|
29
|
+
)
|
30
|
+
|
28
31
|
function makeStore<A>(registry: Registry.Registry, rx: Rx.Rx<A>): RxStore<A> {
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
const [get, unmount] = registry.subscribeGetter(rx, f)
|
34
|
-
getter = get
|
35
|
-
return unmount
|
32
|
+
const stores = storeRegistry.get(registry) ?? storeRegistry.set(registry, new WeakMap()).get(registry)!
|
33
|
+
const store = stores.get(rx)
|
34
|
+
if (store) {
|
35
|
+
return store
|
36
36
|
}
|
37
|
-
|
38
|
-
|
37
|
+
const newStore: RxStore<A> = {
|
38
|
+
subscribe(f) {
|
39
|
+
return registry.subscribe(rx, f)
|
40
|
+
},
|
41
|
+
snapshot() {
|
42
|
+
return registry.get(rx)
|
43
|
+
}
|
39
44
|
}
|
40
|
-
|
45
|
+
stores.set(rx, newStore)
|
46
|
+
return newStore
|
41
47
|
}
|
42
48
|
|
43
49
|
/**
|
@@ -46,11 +52,8 @@ function makeStore<A>(registry: Registry.Registry, rx: Rx.Rx<A>): RxStore<A> {
|
|
46
52
|
*/
|
47
53
|
export const useRxValue = <A>(rx: Rx.Rx<A>): A => {
|
48
54
|
const registry = React.useContext(RegistryContext)
|
49
|
-
const store =
|
50
|
-
|
51
|
-
store.current = makeStore(registry, rx)
|
52
|
-
}
|
53
|
-
return React.useSyncExternalStore(store.current.subscribe, store.current.snapshot)
|
55
|
+
const store = makeStore(registry, rx)
|
56
|
+
return React.useSyncExternalStore(store.subscribe, store.snapshot)
|
54
57
|
}
|
55
58
|
|
56
59
|
/**
|
@@ -101,7 +104,11 @@ type SuspenseResult<E, A> =
|
|
101
104
|
readonly value: Result.Success<E, A> | Result.Failure<E, A>
|
102
105
|
}
|
103
106
|
|
104
|
-
const suspenseCache = globalValue("@effect-rx/rx-react/suspenseCache", () => new
|
107
|
+
const suspenseCache = globalValue("@effect-rx/rx-react/suspenseCache", () => new WeakMap<Rx.Rx<any>, () => void>())
|
108
|
+
const suspenseRegistry = new FinalizationRegistry((unmount: () => void) => {
|
109
|
+
unmount()
|
110
|
+
})
|
111
|
+
|
105
112
|
const suspenseRx = Rx.family((rx: Rx.Rx<Result.Result<any, any>>) =>
|
106
113
|
Rx.readable((get, ctx): SuspenseResult<any, any> => {
|
107
114
|
const result = get(rx)
|
@@ -109,38 +116,21 @@ const suspenseRx = Rx.family((rx: Rx.Rx<Result.Result<any, any>>) =>
|
|
109
116
|
if (value._tag === "Initial") {
|
110
117
|
return {
|
111
118
|
_tag: "Suspended",
|
112
|
-
promise: new Promise<void>((resolve) =>
|
113
|
-
ctx.addFinalizer(() => {
|
114
|
-
resolve()
|
115
|
-
const unmount = suspenseCache.get(rx)
|
116
|
-
if (unmount) {
|
117
|
-
unmount()
|
118
|
-
suspenseCache.delete(rx)
|
119
|
-
}
|
120
|
-
})
|
121
|
-
})
|
119
|
+
promise: new Promise<void>((resolve) => ctx.addFinalizer(resolve))
|
122
120
|
} as const
|
123
121
|
}
|
124
122
|
const isWaiting = Result.isWaiting(result)
|
125
123
|
return { _tag: "Value", isWaiting, value } as const
|
126
124
|
})
|
127
125
|
)
|
126
|
+
|
128
127
|
const suspenseRxWaiting = Rx.family((rx: Rx.Rx<Result.Result<any, any>>) =>
|
129
128
|
Rx.readable((get, ctx): SuspenseResult<any, any> => {
|
130
129
|
const result = get(rx)
|
131
130
|
if (result._tag === "Waiting" || result._tag === "Initial") {
|
132
131
|
return {
|
133
132
|
_tag: "Suspended",
|
134
|
-
promise: new Promise<void>((resolve) =>
|
135
|
-
ctx.addFinalizer(() => {
|
136
|
-
resolve()
|
137
|
-
const unmount = suspenseCache.get(rx)
|
138
|
-
if (unmount) {
|
139
|
-
unmount()
|
140
|
-
suspenseCache.delete(rx)
|
141
|
-
}
|
142
|
-
})
|
143
|
-
})
|
133
|
+
promise: new Promise<void>((resolve) => ctx.addFinalizer(resolve))
|
144
134
|
} as const
|
145
135
|
}
|
146
136
|
return { _tag: "Value", isWaiting: false, value: result } as const
|
@@ -166,10 +156,20 @@ export const useRxSuspense = <E, A>(
|
|
166
156
|
const result = useRxValue(resultRx)
|
167
157
|
if (result._tag === "Suspended") {
|
168
158
|
if (!suspenseCache.has(resultRx)) {
|
169
|
-
|
159
|
+
const unmount = registry.mount(resultRx)
|
160
|
+
suspenseCache.set(resultRx, unmount)
|
161
|
+
suspenseRegistry.register(resultRx, unmount, resultRx)
|
170
162
|
}
|
171
163
|
throw result.promise
|
164
|
+
} else if (suspenseCache.has(resultRx)) {
|
165
|
+
const unmount = suspenseCache.get(resultRx)
|
166
|
+
if (unmount) {
|
167
|
+
suspenseCache.delete(resultRx)
|
168
|
+
suspenseRegistry.unregister(resultRx)
|
169
|
+
unmount()
|
170
|
+
}
|
172
171
|
}
|
172
|
+
|
173
173
|
return result
|
174
174
|
}
|
175
175
|
|
@@ -184,18 +184,8 @@ export const useRxSuspenseSuccess = <E, A>(
|
|
184
184
|
readonly isWaiting: boolean
|
185
185
|
readonly value: A
|
186
186
|
} => {
|
187
|
-
const
|
188
|
-
|
189
|
-
() => (options?.suspendOnWaiting ? suspenseRxWaiting(rx) : suspenseRx(rx)),
|
190
|
-
[options?.suspendOnWaiting, rx]
|
191
|
-
)
|
192
|
-
const result = useRxValue(resultRx)
|
193
|
-
if (result._tag === "Suspended") {
|
194
|
-
if (!suspenseCache.has(resultRx)) {
|
195
|
-
suspenseCache.set(resultRx, registry.mount(resultRx))
|
196
|
-
}
|
197
|
-
throw result.promise
|
198
|
-
} else if (result.value._tag === "Failure") {
|
187
|
+
const result = useRxSuspense(rx, options)
|
188
|
+
if (result.value._tag === "Failure") {
|
199
189
|
throw Cause.squash(result.value.cause)
|
200
190
|
}
|
201
191
|
return {
|