extra-react-hooks 0.8.4 → 0.8.5
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 +10 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/use-effect-async.d.ts +1 -1
- package/lib/use-effect-async.js.map +1 -1
- package/lib/use-iife-async.d.ts +1 -0
- package/lib/use-iife-async.js +25 -0
- package/lib/use-iife-async.js.map +1 -0
- package/lib/use-mount-async.d.ts +1 -1
- package/lib/use-mount-async.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/use-effect-async.ts +1 -1
- package/src/use-iife-async.ts +29 -0
- package/src/use-mount-async.ts +1 -1
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ function useMount(effect: EffectCallback): void
|
|
|
51
51
|
|
|
52
52
|
### useMountAsync
|
|
53
53
|
```ts
|
|
54
|
-
function useMountAsync(effect: (signal: AbortSignal) =>
|
|
54
|
+
function useMountAsync(effect: (signal: AbortSignal) => PromiseLike<void>): void
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
### useUnmount
|
|
@@ -62,7 +62,7 @@ function useUnmount(effect: () => void): void
|
|
|
62
62
|
### useEffectAsync
|
|
63
63
|
```ts
|
|
64
64
|
function useEffectAsync(
|
|
65
|
-
effect: (signal: AbortSignal) =>
|
|
65
|
+
effect: (signal: AbortSignal) => PromiseLike<void>
|
|
66
66
|
, deps?: React.DependencyList
|
|
67
67
|
): void
|
|
68
68
|
```
|
|
@@ -178,6 +178,14 @@ function useIIFE(
|
|
|
178
178
|
|
|
179
179
|
[If you don't need an effect]: https://react.dev/learn/you-might-not-need-an-effect
|
|
180
180
|
|
|
181
|
+
### useIIFEAsync
|
|
182
|
+
```ts
|
|
183
|
+
function useIIFEAsync(
|
|
184
|
+
iife: (signal: AbortSignal) => PromiseLike<void>
|
|
185
|
+
, deps?: React.DependencyList
|
|
186
|
+
): void
|
|
187
|
+
```
|
|
188
|
+
|
|
181
189
|
### useMemoWithCleanup
|
|
182
190
|
```ts
|
|
183
191
|
function useMemoWithCleanup<T>(
|
package/lib/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export * from './use-step.js';
|
|
|
18
18
|
export * from './use-force-update.js';
|
|
19
19
|
export * from './use-finite-state-machine.js';
|
|
20
20
|
export * from './use-iife.js';
|
|
21
|
+
export * from './use-iife-async.js';
|
|
21
22
|
export * from './use-memo-with-cleanup.js';
|
|
22
23
|
export * from './use-get-set.js';
|
|
23
24
|
export * from './use-isomorphic-layout-effect.js';
|
package/lib/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export * from './use-step.js';
|
|
|
18
18
|
export * from './use-force-update.js';
|
|
19
19
|
export * from './use-finite-state-machine.js';
|
|
20
20
|
export * from './use-iife.js';
|
|
21
|
+
export * from './use-iife-async.js';
|
|
21
22
|
export * from './use-memo-with-cleanup.js';
|
|
22
23
|
export * from './use-get-set.js';
|
|
23
24
|
export * from './use-isomorphic-layout-effect.js';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,mCAAmC,CAAA;AACjD,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,mCAAmC,CAAA;AACjD,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function useEffectAsync(effect: (signal: AbortSignal) =>
|
|
1
|
+
export declare function useEffectAsync(effect: (signal: AbortSignal) => PromiseLike<void>, deps?: React.DependencyList): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-effect-async.js","sourceRoot":"","sources":["../src/use-effect-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,kBAAmB,SAAQ,WAAW;CAAG;AAE/C,MAAM,UAAU,cAAc,CAC5B,
|
|
1
|
+
{"version":3,"file":"use-effect-async.js","sourceRoot":"","sources":["../src/use-effect-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,kBAAmB,SAAQ,WAAW;CAAG;AAE/C,MAAM,UAAU,cAAc,CAC5B,MAAkD,EAClD,IAA2B;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QAExC,EAAE,CAAC,KAAK,IAAI,EAAE;YACZ,IAAI,CAAC;gBACH,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;gBAElC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;oBACtC,IAAI,EAAE,CAAA;gBACR,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAA;IACzD,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useIIFEAsync(iife: (signal: AbortSignal) => PromiseLike<void>, deps?: React.DependencyList): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CustomError, go, pass } from '@blackglory/prelude';
|
|
2
|
+
import { useIIFE } from './use-iife.js';
|
|
3
|
+
class InternalAbortError extends CustomError {
|
|
4
|
+
}
|
|
5
|
+
export function useIIFEAsync(iife, deps) {
|
|
6
|
+
useIIFE(() => {
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
go(async () => {
|
|
9
|
+
try {
|
|
10
|
+
controller.signal.throwIfAborted();
|
|
11
|
+
await iife(controller.signal);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
if (err instanceof InternalAbortError) {
|
|
15
|
+
pass();
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return () => controller.abort(new InternalAbortError());
|
|
23
|
+
}, deps);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=use-iife-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-iife-async.js","sourceRoot":"","sources":["../src/use-iife-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,MAAM,kBAAmB,SAAQ,WAAW;CAAG;AAE/C,MAAM,UAAU,YAAY,CAC1B,IAAgD,EAChD,IAA2B;IAE3B,OAAO,CAAC,GAAG,EAAE;QACX,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QAExC,EAAE,CAAC,KAAK,IAAI,EAAE;YACZ,IAAI,CAAC;gBACH,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;gBAElC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;oBACtC,IAAI,EAAE,CAAA;gBACR,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAA;IACzD,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"}
|
package/lib/use-mount-async.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function useMountAsync(effect: (signal: AbortSignal) =>
|
|
1
|
+
export declare function useMountAsync(effect: (signal: AbortSignal) => PromiseLike<void>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-mount-async.js","sourceRoot":"","sources":["../src/use-mount-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"use-mount-async.js","sourceRoot":"","sources":["../src/use-mount-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAAC,MAAkD;IAC9E,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ export * from './use-step.js'
|
|
|
18
18
|
export * from './use-force-update.js'
|
|
19
19
|
export * from './use-finite-state-machine.js'
|
|
20
20
|
export * from './use-iife.js'
|
|
21
|
+
export * from './use-iife-async.js'
|
|
21
22
|
export * from './use-memo-with-cleanup.js'
|
|
22
23
|
export * from './use-get-set.js'
|
|
23
24
|
export * from './use-isomorphic-layout-effect.js'
|
package/src/use-effect-async.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { CustomError } from '@blackglory/errors'
|
|
|
6
6
|
class InternalAbortError extends CustomError {}
|
|
7
7
|
|
|
8
8
|
export function useEffectAsync(
|
|
9
|
-
effect: (signal: AbortSignal) =>
|
|
9
|
+
effect: (signal: AbortSignal) => PromiseLike<void>
|
|
10
10
|
, deps?: React.DependencyList
|
|
11
11
|
): void {
|
|
12
12
|
useEffect(() => {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CustomError, go, pass } from '@blackglory/prelude'
|
|
2
|
+
import { useIIFE } from './use-iife.js'
|
|
3
|
+
|
|
4
|
+
class InternalAbortError extends CustomError {}
|
|
5
|
+
|
|
6
|
+
export function useIIFEAsync(
|
|
7
|
+
iife: (signal: AbortSignal) => PromiseLike<void>
|
|
8
|
+
, deps?: React.DependencyList
|
|
9
|
+
): void {
|
|
10
|
+
useIIFE(() => {
|
|
11
|
+
const controller = new AbortController()
|
|
12
|
+
|
|
13
|
+
go(async () => {
|
|
14
|
+
try {
|
|
15
|
+
controller.signal.throwIfAborted()
|
|
16
|
+
|
|
17
|
+
await iife(controller.signal)
|
|
18
|
+
} catch (err) {
|
|
19
|
+
if (err instanceof InternalAbortError) {
|
|
20
|
+
pass()
|
|
21
|
+
} else {
|
|
22
|
+
throw err
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
return () => controller.abort(new InternalAbortError())
|
|
28
|
+
}, deps)
|
|
29
|
+
}
|
package/src/use-mount-async.ts
CHANGED