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 CHANGED
@@ -51,7 +51,7 @@ function useMount(effect: EffectCallback): void
51
51
 
52
52
  ### useMountAsync
53
53
  ```ts
54
- function useMountAsync(effect: (signal: AbortSignal) => Promise<void>): void
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) => Promise<void>
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) => Promise<void>, deps?: React.DependencyList): void;
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,MAA8C,EAC9C,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"}
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"}
@@ -1 +1 @@
1
- export declare function useMountAsync(effect: (signal: AbortSignal) => Promise<void>): void;
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,MAA8C;IAC1E,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAC5B,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extra-react-hooks",
3
- "version": "0.8.4",
3
+ "version": "0.8.5",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "files": [
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'
@@ -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) => Promise<void>
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
+ }
@@ -1,5 +1,5 @@
1
1
  import { useEffectAsync } from './use-effect-async.js'
2
2
 
3
- export function useMountAsync(effect: (signal: AbortSignal) => Promise<void>): void {
3
+ export function useMountAsync(effect: (signal: AbortSignal) => PromiseLike<void>): void {
4
4
  useEffectAsync(effect, [])
5
5
  }