@superutils/fetch 1.3.0 → 1.4.1

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
@@ -12,9 +12,9 @@ For full API reference check out the [docs page](https://alien45.github.io/super
12
12
 
13
13
  ## Table of Contents
14
14
 
15
- - Features
16
- - Installation
17
- - Usage
15
+ - [Features](#features)
16
+ - [Installation](#installation)
17
+ - [Usage](#usage)
18
18
  - [`fetch()`](#fetch): drop-in replacement for built-in `fetch()`
19
19
  - [`PromisE Features`](#promise-features): status, early finalization etc
20
20
  - [`Method Specific Functions`](#methods)
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _superutils_promise from '@superutils/promise';
2
- import { RetryOptions, RetryIfFunc, DeferredAsyncOptions, IPromisE_Timeout } from '@superutils/promise';
2
+ import { RetryOptions, RetryIfFunc, TimeoutOptions, DeferredAsyncOptions, IPromisE_Timeout } from '@superutils/promise';
3
3
  export { DeferredAsyncOptions, ResolveError, ResolveIgnored } from '@superutils/promise';
4
4
  import { ValueOrPromise } from '@superutils/core';
5
5
 
@@ -258,18 +258,16 @@ type FetchCustomOptions = {
258
258
  *
259
259
  * Default: `globalThis.fetch`
260
260
  */
261
- fetchFunc?: (...args: FetchArgs) => Promise<Response>;
261
+ fetchFunc?: FetchFunc;
262
262
  errMsgs?: FetchErrMsgs;
263
263
  /**
264
264
  * Interceptor/transformer callback executed at different stages of the request.
265
265
  * See {@link FetchInterceptors} for more details.
266
266
  */
267
267
  interceptors?: FetchInterceptors;
268
- /** Request timeout in milliseconds */
269
- timeout?: number;
270
268
  /** Whether to validate URL before making the request. Default: `true` */
271
269
  validateUrl?: boolean;
272
- } & FetchRetryOptions;
270
+ } & FetchRetryOptions & TimeoutOptions<[]>;
273
271
  /** Default args */
274
272
  type FetchDeferredArgs<OmitMethod extends boolean = false> = [
275
273
  url?: string | URL,
@@ -287,6 +285,7 @@ type FetchErrMsgs = {
287
285
  /** Error message to be used when request fails */
288
286
  requestFailed?: string;
289
287
  };
288
+ type FetchFunc = (...args: FetchArgs) => Promise<Response>;
290
289
  /**
291
290
  * Fetch request options
292
291
  */
@@ -461,13 +460,17 @@ declare class FetchError extends Error {
461
460
  * .then(console.log, console.warn)
462
461
  * ```
463
462
  */
464
- declare const createClient: <FixedOpts extends FetchOptions | undefined, CommonOpts extends ExcludeOptions<FixedOpts> | undefined, FixedAs extends FetchAs | undefined = FetchAsFromOptions<FixedOpts, undefined>>(
463
+ declare const createClient: <FixedOpts extends FetchOptions | undefined, CommonOpts extends ExcludeOptions<FixedOpts> | undefined, FixedAs extends FetchAs | undefined = FetchAsFromOptions<FixedOpts, undefined>, CommonDelay extends number = number>(
465
464
  /** Mandatory fetch options that cannot be overriden by individual request */
466
465
  fixedOptions?: FixedOpts,
467
466
  /** Common fetch options that can be overriden by individual request */
468
- commonOptions?: FetchOptions & CommonOpts, commonDeferOptions?: DeferredAsyncOptions<unknown, unknown>) => {
469
- <T, TOptions extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined, TAs extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions, FetchAsFromOptions<CommonOpts>>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions): _superutils_promise.IPromisE_Timeout<TReturn>;
470
- deferred<ThisArg = unknown, Delay extends number = number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined>(deferOptions?: DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl, defaultOptions?: DefaultOptions): <TResult = unknown, TOptions_1 extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined, TAs_1 extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions_1, FetchAsFromOptions<CommonOpts>>, TReturn_1 = FetchResult<TResult>[TAs_1]>(...args: DefaultUrl extends undefined ? [url: FetchArgs[0], options?: TOptions_1] : [options?: TOptions_1]) => _superutils_promise.IPromisE_Timeout<TReturn_1>;
467
+ commonOptions?: FetchOptions & CommonOpts, commonDeferOptions?: DeferredAsyncOptions<unknown, CommonDelay>) => {
468
+ <T = unknown, TOptions extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined, TAs extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions, FetchAsFromOptions<CommonOpts>>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
469
+ abortCtrl: AbortController;
470
+ };
471
+ deferred<ThisArg, Delay extends CommonDelay | number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined>(deferOptions?: DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl, defaultOptions?: DefaultOptions): <TResult = unknown, TOptions_1 extends ExcludeOptions<FixedOpts> | undefined = ExcludeOptions<FixedOpts> | undefined, TAs_1 extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions_1, FetchAsFromOptions<CommonOpts>>, TReturn_1 = FetchResult<TResult>[TAs_1]>(...args: DefaultUrl extends undefined ? [url: FetchArgs[0], options?: TOptions_1] : [options?: TOptions_1]) => Omit<_superutils_promise.IPromisE_Timeout<TReturn_1>, "abortCtrl"> & {
472
+ abortCtrl: AbortController;
473
+ };
471
474
  };
472
475
 
473
476
  /**
@@ -516,13 +519,17 @@ commonOptions?: FetchOptions & CommonOpts, commonDeferOptions?: DeferredAsyncOpt
516
519
  * updateProduct({ title: 'New title 2' }) // executed
517
520
  * ```
518
521
  */
519
- declare const createPostClient: <FixedOpts extends PostOptions | undefined, CommonOpts extends ExcludePostOptions<FixedOpts> | undefined, FixedAs extends FetchAs | undefined = FetchAsFromOptions<FixedOpts, undefined>>(
522
+ declare const createPostClient: <FixedOpts extends PostOptions | undefined, CommonOpts extends ExcludePostOptions<FixedOpts> | undefined, FixedAs extends FetchAs | undefined = FetchAsFromOptions<FixedOpts, undefined>, CommonDelay extends number = number>(
520
523
  /** Mandatory fetch options that cannot be overriden by individual request */
521
524
  fixedOptions?: FixedOpts,
522
525
  /** Common fetch options that can be overriden by individual request */
523
- commonOptions?: PostOptions & CommonOpts, commonDeferOptions?: DeferredAsyncOptions<unknown, unknown>) => {
524
- <T = unknown, TOptions extends ExcludePostOptions<FixedOpts> | undefined = ExcludePostOptions<FixedOpts> | undefined, TAs extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions, FetchAsFromOptions<CommonOpts>>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions): IPromisE_Timeout<TReturn>;
525
- deferred<ThisArg, Delay extends number, DefaultUrl extends PostArgs[0] | undefined, DefaultData extends PostArgs[1] = undefined, DefaultOptions extends ExcludePostOptions<FixedOpts> | undefined = undefined>(deferOptions?: DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl, defaultData?: DefaultData, defaultOptions?: DefaultOptions): <TResult = unknown, TOptions_1 extends ExcludePostOptions<FixedOpts> | undefined = ExcludePostOptions<FixedOpts>, TAs_1 extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions_1, FetchAsFromOptions<CommonOpts>>, TReturn_1 = FetchResult<TResult>[TAs_1]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions_1>) => IPromisE_Timeout<TReturn_1>;
526
+ commonOptions?: PostOptions & CommonOpts, commonDeferOptions?: DeferredAsyncOptions<unknown, CommonDelay>) => {
527
+ <T = unknown, TOptions extends ExcludePostOptions<FixedOpts> | undefined = ExcludePostOptions<FixedOpts> | undefined, TAs extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions, FetchAsFromOptions<CommonOpts>>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
528
+ abortCtrl: AbortController;
529
+ };
530
+ deferred<ThisArg, Delay extends CommonDelay | number, DefaultOptions extends ExcludePostOptions<FixedOpts> | undefined = ExcludePostOptions<FixedOpts> | undefined, DefaultUrl extends PostArgs[0] | undefined = string | URL | undefined, DefaultData extends PostArgs[1] = PostBody | (() => PostBody) | undefined>(deferOptions?: DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl, defaultData?: DefaultData, defaultOptions?: DefaultOptions): <TResult = unknown, TOptions_1 extends ExcludePostOptions<FixedOpts> | undefined = ExcludePostOptions<FixedOpts> | undefined, TAs_1 extends FetchAs = FixedAs extends FetchAs ? FixedAs : FetchAsFromOptions<TOptions_1, FetchAsFromOptions<CommonOpts>>, TReturn_1 = FetchResult<TResult>[TAs_1]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions_1>) => Omit<_superutils_promise.IPromisE_Timeout<TReturn_1>, "abortCtrl"> & {
531
+ abortCtrl: AbortController;
532
+ };
526
533
  };
527
534
 
528
535
  /** Node.js setTimeout limit is 2147483647 (2^31-1). Larger values fire immediately. */
@@ -546,7 +553,10 @@ declare const MAX_TIMEOUT = 2147483647;
546
553
  * ```
547
554
  */
548
555
  declare const fetch: {
549
- <T, TOptions extends FetchOptions = FetchOptions, TAs extends FetchAs = TOptions["as"] extends FetchAs ? TOptions["as"] : FetchAs.json, TReturn = FetchResult<T>[TAs]>(url: string | URL, options?: FetchOptions & TOptions): IPromisE_Timeout<TReturn>;
556
+ <T, TOptions extends FetchOptions = FetchOptions, TAs extends FetchAs = TOptions["as"] extends FetchAs ? TOptions["as"] : FetchAs.json, TReturn = FetchResult<T>[TAs]>(url: string | URL, options?: FetchOptions & TOptions): Omit<IPromisE_Timeout<TReturn>, "abortCtrl"> & {
557
+ /** An `AbortController` instance to control the request. */
558
+ abortCtrl: AbortController;
559
+ };
550
560
  /** Default fetch options */
551
561
  defaults: FetchOptionsDefault;
552
562
  };
@@ -567,19 +577,23 @@ declare const fetch: {
567
577
  * ```
568
578
  */
569
579
  declare const fetchResponse: {
570
- <T = Response, TOptions extends FetchOptions = FetchOptions, TAs extends FetchAs = TOptions["as"] extends FetchAs ? TOptions["as"] : FetchAs.response, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: Parameters<typeof fetch<T, TOptions, TAs, TReturn>>[1]): IPromisE_Timeout<TReturn>;
580
+ <T = Response, TOptions extends FetchOptions = FetchOptions, TAs extends FetchAs = TOptions["as"] extends FetchAs ? TOptions["as"] : FetchAs.response, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: Parameters<typeof fetch<T, TOptions, TAs, TReturn>>[1]): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
581
+ abortCtrl: AbortController;
582
+ };
571
583
  defaults: FetchOptionsDefault;
572
584
  };
573
585
 
574
586
  declare const methods: {
575
587
  /** Make HTTP requests with method GET */
576
588
  get: {
577
- <T, TOptions extends ({
589
+ <T = unknown, TOptions extends ({
578
590
  headers?: HeadersInit | undefined;
579
591
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
580
592
  headers?: HeadersInit | undefined;
581
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
582
- deferred<ThisArg = unknown, Delay extends number = number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
593
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
594
+ abortCtrl: AbortController;
595
+ };
596
+ deferred<ThisArg, Delay extends number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
583
597
  headers?: HeadersInit | undefined;
584
598
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
585
599
  headers?: HeadersInit | undefined;
@@ -587,16 +601,20 @@ declare const methods: {
587
601
  headers?: HeadersInit | undefined;
588
602
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
589
603
  headers?: HeadersInit | undefined;
590
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => _superutils_promise.IPromisE_Timeout<TReturn>;
604
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
605
+ abortCtrl: AbortController;
606
+ };
591
607
  };
592
608
  /** Make HTTP requests with method HEAD */
593
609
  head: {
594
- <T, TOptions extends ({
610
+ <T = unknown, TOptions extends ({
595
611
  headers?: HeadersInit | undefined;
596
612
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
597
613
  headers?: HeadersInit | undefined;
598
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
599
- deferred<ThisArg = unknown, Delay extends number = number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
614
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
615
+ abortCtrl: AbortController;
616
+ };
617
+ deferred<ThisArg, Delay extends number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
600
618
  headers?: HeadersInit | undefined;
601
619
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
602
620
  headers?: HeadersInit | undefined;
@@ -604,16 +622,20 @@ declare const methods: {
604
622
  headers?: HeadersInit | undefined;
605
623
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
606
624
  headers?: HeadersInit | undefined;
607
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => _superutils_promise.IPromisE_Timeout<TReturn>;
625
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
626
+ abortCtrl: AbortController;
627
+ };
608
628
  };
609
629
  /** Make HTTP requests with method OPTIONS */
610
630
  options: {
611
- <T, TOptions extends ({
631
+ <T = unknown, TOptions extends ({
612
632
  headers?: HeadersInit | undefined;
613
633
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
614
634
  headers?: HeadersInit | undefined;
615
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
616
- deferred<ThisArg = unknown, Delay extends number = number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
635
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: FetchArgs[0], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
636
+ abortCtrl: AbortController;
637
+ };
638
+ deferred<ThisArg, Delay extends number, DefaultUrl extends FetchArgs[0] | undefined = string | URL | undefined, DefaultOptions extends ({
617
639
  headers?: HeadersInit | undefined;
618
640
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
619
641
  headers?: HeadersInit | undefined;
@@ -621,7 +643,9 @@ declare const methods: {
621
643
  headers?: HeadersInit | undefined;
622
644
  } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
623
645
  headers?: HeadersInit | undefined;
624
- } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => _superutils_promise.IPromisE_Timeout<TReturn>;
646
+ } & Omit<FetchOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: DefaultUrl extends undefined ? [url: string | URL, options?: TOptions | undefined] : [options?: TOptions | undefined]) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
647
+ abortCtrl: AbortController;
648
+ };
625
649
  };
626
650
  /** Make HTTP requests with method DELETE */
627
651
  delete: {
@@ -629,14 +653,20 @@ declare const methods: {
629
653
  headers?: HeadersInit | undefined;
630
654
  } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
631
655
  headers?: HeadersInit | undefined;
632
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
633
- deferred<ThisArg, Delay extends number, DefaultUrl extends PostArgs[0] | undefined, DefaultData extends PostArgs[1] = undefined, DefaultOptions extends ({
656
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
657
+ abortCtrl: AbortController;
658
+ };
659
+ deferred<ThisArg, Delay extends number, DefaultOptions extends ({
634
660
  headers?: HeadersInit | undefined;
635
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
661
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
636
662
  headers?: HeadersInit | undefined;
637
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = {
663
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, DefaultUrl extends PostArgs[0] | undefined = string | URL | undefined, DefaultData extends PostArgs[1] = PostBody | (() => PostBody) | undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
638
664
  headers?: HeadersInit | undefined;
639
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => _superutils_promise.IPromisE_Timeout<TReturn>;
665
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
666
+ headers?: HeadersInit | undefined;
667
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
668
+ abortCtrl: AbortController;
669
+ };
640
670
  };
641
671
  /** Make HTTP requests with method PATCH */
642
672
  patch: {
@@ -644,14 +674,20 @@ declare const methods: {
644
674
  headers?: HeadersInit | undefined;
645
675
  } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
646
676
  headers?: HeadersInit | undefined;
647
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
648
- deferred<ThisArg, Delay extends number, DefaultUrl extends PostArgs[0] | undefined, DefaultData extends PostArgs[1] = undefined, DefaultOptions extends ({
677
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
678
+ abortCtrl: AbortController;
679
+ };
680
+ deferred<ThisArg, Delay extends number, DefaultOptions extends ({
649
681
  headers?: HeadersInit | undefined;
650
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
682
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
651
683
  headers?: HeadersInit | undefined;
652
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = {
684
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, DefaultUrl extends PostArgs[0] | undefined = string | URL | undefined, DefaultData extends PostArgs[1] = PostBody | (() => PostBody) | undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
653
685
  headers?: HeadersInit | undefined;
654
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => _superutils_promise.IPromisE_Timeout<TReturn>;
686
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
687
+ headers?: HeadersInit | undefined;
688
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
689
+ abortCtrl: AbortController;
690
+ };
655
691
  };
656
692
  /** Make HTTP requests with method POST */
657
693
  post: {
@@ -659,14 +695,20 @@ declare const methods: {
659
695
  headers?: HeadersInit | undefined;
660
696
  } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
661
697
  headers?: HeadersInit | undefined;
662
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
663
- deferred<ThisArg, Delay extends number, DefaultUrl extends PostArgs[0] | undefined, DefaultData extends PostArgs[1] = undefined, DefaultOptions extends ({
698
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
699
+ abortCtrl: AbortController;
700
+ };
701
+ deferred<ThisArg, Delay extends number, DefaultOptions extends ({
664
702
  headers?: HeadersInit | undefined;
665
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
703
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
666
704
  headers?: HeadersInit | undefined;
667
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = {
705
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, DefaultUrl extends PostArgs[0] | undefined = string | URL | undefined, DefaultData extends PostArgs[1] = PostBody | (() => PostBody) | undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
668
706
  headers?: HeadersInit | undefined;
669
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => _superutils_promise.IPromisE_Timeout<TReturn>;
707
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
708
+ headers?: HeadersInit | undefined;
709
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
710
+ abortCtrl: AbortController;
711
+ };
670
712
  };
671
713
  /** Make HTTP requests with method PUT */
672
714
  put: {
@@ -674,14 +716,20 @@ declare const methods: {
674
716
  headers?: HeadersInit | undefined;
675
717
  } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
676
718
  headers?: HeadersInit | undefined;
677
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): _superutils_promise.IPromisE_Timeout<TReturn>;
678
- deferred<ThisArg, Delay extends number, DefaultUrl extends PostArgs[0] | undefined, DefaultData extends PostArgs[1] = undefined, DefaultOptions extends ({
719
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<T>[TAs]>(url: PostArgs[0], data?: PostArgs[1], options?: TOptions | undefined): Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
720
+ abortCtrl: AbortController;
721
+ };
722
+ deferred<ThisArg, Delay extends number, DefaultOptions extends ({
679
723
  headers?: HeadersInit | undefined;
680
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
724
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
681
725
  headers?: HeadersInit | undefined;
682
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = {
726
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, DefaultUrl extends PostArgs[0] | undefined = string | URL | undefined, DefaultData extends PostArgs[1] = PostBody | (() => PostBody) | undefined>(deferOptions?: _superutils_promise.DeferredAsyncOptions<ThisArg, Delay>, defaultUrl?: DefaultUrl | undefined, defaultData?: DefaultData | undefined, defaultOptions?: DefaultOptions | undefined): <TResult = unknown, TOptions extends ({
683
727
  headers?: HeadersInit | undefined;
684
- } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => _superutils_promise.IPromisE_Timeout<TReturn>;
728
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined = ({
729
+ headers?: HeadersInit | undefined;
730
+ } & Omit<PostOptions, "headers" | "method"> & Partial<Record<"method", never>>) | undefined, TAs extends FetchAs = FetchAsFromOptions<TOptions, FetchAs.json>, TReturn = FetchResult<TResult>[TAs]>(...args: PostDeferredCbArgs<DefaultUrl, DefaultData, TOptions, [url: string | URL, data: PostBody | (() => PostBody), options: PostOptions]>) => Omit<_superutils_promise.IPromisE_Timeout<TReturn>, "abortCtrl"> & {
731
+ abortCtrl: AbortController;
732
+ };
685
733
  };
686
734
  };
687
735
  /**
@@ -828,21 +876,15 @@ declare const defaultFetch: typeof fetchResponse & typeof methods;
828
876
  declare const executeInterceptors: <T, TArgs extends unknown[]>(value: T, signal?: AbortSignal, interceptors?: Interceptor<T, TArgs>[], ...args: TArgs) => Promise<T>;
829
877
 
830
878
  /**
831
- * Add AbortController to options if not present and propagate external abort signal if provided.
832
- *
833
- * @param options The fetch options object.
879
+ * Executes the built-in `fetch()` (or a custom `fetchFunc` if provided) with support for automatic retries.
834
880
  *
835
- * @returns The AbortController instance associated with the options.
836
- */
837
- declare const getAbortCtrl: (options: Partial<FetchOptions>) => AbortController;
838
-
839
- /**
840
- * Execute built-in `fetch()` and retry if request fails and `options.retry > 0`.
881
+ * If `options.retry` is greater than 0, the request will be retried if it fails or if the response is not OK,
882
+ * unless overridden by `options.retryIf`.
841
883
  *
842
- * @param url request URL
843
- * @param options (optional)
884
+ * @param url The request URL.
885
+ * @param options (optional) Fetch options, including retry settings.
844
886
  *
845
- * @returns response
887
+ * @returns A promise resolving to the Response.
846
888
  */
847
889
  declare const getResponse: (url: FetchArgs[0], options?: FetchArgs[1]) => Promise<Response>;
848
890
 
@@ -864,4 +906,4 @@ declare const mergeFetchOptions: (...allOptions: FetchOptions[]) => FetchOptions
864
906
  /** Merges partial fetch options ignoring empty or undefined. Otherwise, will return the first argument. */
865
907
  declare const mergePartialOptions: (...optionsAr: (Partial<FetchOptions> | undefined)[]) => Partial<FetchOptions> | undefined;
866
908
 
867
- export { ContentType, type ExcludeOptions, type ExcludePostOptions, type FetchArgs, type FetchArgsInterceptor, FetchAs, type FetchAsFromOptions, type FetchCustomOptions, type FetchDeferredArgs, type FetchErrMsgs, FetchError, type FetchInterceptorError, type FetchInterceptorRequest, type FetchInterceptorResponse, type FetchInterceptorResult, type FetchInterceptors, type FetchOptions, type FetchOptionsDefault, type FetchOptionsInterceptor, type FetchResult, type FetchRetryOptions, type Interceptor, MAX_TIMEOUT, type PostArgs, type PostBody, type PostDeferredCbArgs, type PostOptions, createClient, createPostClient, defaultFetch as default, executeInterceptors, fetch, fetchResponse, getAbortCtrl, getResponse, mergeFetchOptions, mergePartialOptions };
909
+ export { ContentType, type ExcludeOptions, type ExcludePostOptions, type FetchArgs, type FetchArgsInterceptor, FetchAs, type FetchAsFromOptions, type FetchCustomOptions, type FetchDeferredArgs, type FetchErrMsgs, FetchError, type FetchFunc, type FetchInterceptorError, type FetchInterceptorRequest, type FetchInterceptorResponse, type FetchInterceptorResult, type FetchInterceptors, type FetchOptions, type FetchOptionsDefault, type FetchOptionsInterceptor, type FetchResult, type FetchRetryOptions, type Interceptor, MAX_TIMEOUT, type PostArgs, type PostBody, type PostDeferredCbArgs, type PostOptions, createClient, createPostClient, defaultFetch as default, executeInterceptors, fetch, fetchResponse, getResponse, mergeFetchOptions, mergePartialOptions };
package/dist/index.js CHANGED
@@ -4,8 +4,8 @@ import { deferredCallback } from "@superutils/promise";
4
4
  // src/fetch.ts
5
5
  import {
6
6
  fallbackIfFails as fallbackIfFails3,
7
+ isError,
7
8
  isFn as isFn2,
8
- isPositiveNumber,
9
9
  isPromise,
10
10
  isUrlValid
11
11
  } from "@superutils/core";
@@ -29,31 +29,13 @@ var executeInterceptors = async (value, signal, interceptors, ...args) => {
29
29
  };
30
30
  var executeInterceptors_default = executeInterceptors;
31
31
 
32
- // src/getAbortCtrl.ts
33
- var getAbortCtrl = (options) => {
34
- options != null ? options : options = {};
35
- if (!(options.abortCtrl instanceof AbortController))
36
- options.abortCtrl = new AbortController();
37
- const { abortCtrl, signal } = options;
38
- if (signal instanceof AbortSignal && !signal.aborted) {
39
- const handleAbort = () => abortCtrl.abort();
40
- signal.addEventListener("abort", handleAbort, { once: true });
41
- abortCtrl.signal.addEventListener(
42
- "abort",
43
- () => signal.removeEventListener("abort", handleAbort),
44
- { once: true }
45
- );
46
- }
47
- return abortCtrl;
48
- };
49
-
50
32
  // src/getResponse.ts
51
33
  import { fallbackIfFails as fallbackIfFails2, isPositiveInteger } from "@superutils/core";
52
34
  import { retry } from "@superutils/promise";
53
- var getResponse = async (url, options = {}) => {
54
- const { abortCtrl, fetchFunc = globalThis.fetch } = options;
55
- if (!isPositiveInteger(options.retry))
56
- return fetchFunc(url, options);
35
+ var getResponse = (url, options = {}) => {
36
+ var _a;
37
+ const fetchFunc = (_a = options.fetchFunc) != null ? _a : globalThis.fetch;
38
+ if (!isPositiveInteger(options.retry)) return fetchFunc(url, options);
57
39
  let attemptCount = 0;
58
40
  const response = retry(
59
41
  () => {
@@ -63,14 +45,14 @@ var getResponse = async (url, options = {}) => {
63
45
  {
64
46
  ...options,
65
47
  retryIf: async (res, count, error) => {
66
- var _a, _b;
67
- if (abortCtrl == null ? void 0 : abortCtrl.signal.aborted) return false;
68
- const failed = !!error || !(res == null ? void 0 : res.ok);
69
- return !!((_b = await fallbackIfFails2(
70
- (_a = options == null ? void 0 : options.retryIf) != null ? _a : failed,
48
+ var _a2;
49
+ const { abortCtrl, retryIf, signal } = options;
50
+ if ((abortCtrl == null ? void 0 : abortCtrl.signal.aborted) || (signal == null ? void 0 : signal.aborted)) return false;
51
+ return !!((_a2 = await fallbackIfFails2(
52
+ retryIf,
71
53
  [res, count, error],
72
- failed
73
- )) != null ? _b : failed);
54
+ void 0
55
+ )) != null ? _a2 : !!error || !(res == null ? void 0 : res.ok));
74
56
  }
75
57
  }
76
58
  ).catch(
@@ -201,70 +183,69 @@ import {
201
183
  var MAX_TIMEOUT = 2147483647;
202
184
  var fetch = (url, options = {}) => {
203
185
  var _a, _b, _c;
204
- let errResponse;
205
- const _options = mergeFetchOptions_default(fetch.defaults, options);
206
- _options.abortCtrl = getAbortCtrl(_options);
207
- (_a = _options.as) != null ? _a : _options.as = "json" /* json */;
208
- (_b = _options.method) != null ? _b : _options.method = "get";
209
- (_c = _options.signal) != null ? _c : _options.signal = _options.abortCtrl.signal;
210
- _options.timeout = Math.min(
211
- isPositiveNumber(_options.timeout) ? _options.timeout : fetch.defaults.timeout,
212
- MAX_TIMEOUT
213
- );
214
- const { abortCtrl, as: parseAs, headers, timeout } = _options;
215
- let contentType = headers.get("content-type");
216
- if (!contentType) {
217
- headers.set("content-type", ContentType.APPLICATION_JSON);
218
- contentType = ContentType.APPLICATION_JSON;
219
- }
220
- const processErr = (err) => {
221
- var _a2, _b2, _c2, _d, _e;
222
- let msg = (_a2 = err == null ? void 0 : err.message) != null ? _a2 : err;
223
- if ((err == null ? void 0 : err.name) === "AbortError") msg = (_c2 = (_b2 = _options.errMsgs) == null ? void 0 : _b2.aborted) != null ? _c2 : msg;
224
- return executeInterceptors_default(
225
- new FetchError(msg, {
226
- cause: (_d = err == null ? void 0 : err.cause) != null ? _d : err,
227
- response: errResponse,
228
- options: _options,
229
- url
230
- }),
231
- void 0,
232
- // should execute regardless of abort status
233
- (_e = _options.interceptors) == null ? void 0 : _e.error,
186
+ let response;
187
+ const opts = mergeFetchOptions_default(fetch.defaults, options);
188
+ opts.abortCtrl = opts.abortCtrl instanceof AbortController ? opts.abortCtrl : new AbortController();
189
+ (_a = opts.as) != null ? _a : opts.as = "json" /* json */;
190
+ (_b = opts.method) != null ? _b : opts.method = "get";
191
+ (_c = opts.signal) != null ? _c : opts.signal = opts.abortCtrl.signal;
192
+ const { abortCtrl, as: parseAs, headers, onAbort, onTimeout } = opts;
193
+ opts.onAbort = async () => {
194
+ var _a2, _b2, _c2, _d, _e, _f;
195
+ const err = (_f = (_e = (_c2 = await fallbackIfFails3(onAbort, [], void 0)) != null ? _c2 : (_b2 = (_a2 = opts.abortCtrl) == null ? void 0 : _a2.signal) == null ? void 0 : _b2.reason) != null ? _e : (_d = opts.signal) == null ? void 0 : _d.reason) != null ? _f : opts.errMsgs.aborted;
196
+ if (isError(err) && err.name === "AbortError") {
197
+ err.message = ["This operation was aborted"].includes(err.message) ? opts.errMsgs.aborted : err.message;
198
+ }
199
+ return await interceptErr(
200
+ isError(err) ? err : new Error(err),
201
+ url,
202
+ opts,
203
+ response
204
+ );
205
+ };
206
+ opts.onTimeout = async () => {
207
+ const err = await fallbackIfFails3(onTimeout, [], void 0);
208
+ return await interceptErr(
209
+ err != null ? err : new Error(opts.errMsgs.timedout),
234
210
  url,
235
- _options
236
- ).then((err2) => Promise.reject(err2));
211
+ opts,
212
+ response
213
+ );
237
214
  };
238
- const start = async () => {
215
+ return PromisE_timeout(opts, async () => {
239
216
  var _a2, _b2, _c2, _d;
240
217
  try {
218
+ let contentType = headers.get("content-type");
219
+ if (!contentType) {
220
+ headers.set("content-type", ContentType.APPLICATION_JSON);
221
+ contentType = ContentType.APPLICATION_JSON;
222
+ }
241
223
  url = await executeInterceptors_default(
242
224
  url,
243
225
  abortCtrl.signal,
244
- (_a2 = _options.interceptors) == null ? void 0 : _a2.request,
245
- _options
226
+ (_a2 = opts.interceptors) == null ? void 0 : _a2.request,
227
+ opts
246
228
  );
247
- const { body, errMsgs, validateUrl = true } = _options;
248
- (_b2 = _options.signal) != null ? _b2 : _options.signal = abortCtrl.signal;
229
+ const { body, errMsgs, validateUrl = true } = opts;
230
+ (_b2 = opts.signal) != null ? _b2 : opts.signal = abortCtrl.signal;
249
231
  if (validateUrl && !isUrlValid(url, false))
250
- return processErr(new Error(errMsgs.invalidUrl));
232
+ throw new Error(errMsgs.invalidUrl);
251
233
  const shouldStringifyBody = [
252
234
  ContentType.APPLICATION_JSON,
253
235
  ContentType.APPLICATION_X_WWW_FORM_URLENCODED
254
236
  ].find((x) => contentType.includes(x)) && !["undefined", "string"].includes(typeof body);
255
237
  if (shouldStringifyBody)
256
- _options.body = JSON.stringify(
238
+ opts.body = JSON.stringify(
257
239
  isFn2(body) ? fallbackIfFails3(body, [], void 0) : body
258
240
  );
259
- let response = await getResponse_default(url, _options);
241
+ response = await getResponse_default(url, opts);
260
242
  response = await executeInterceptors_default(
261
243
  response,
262
244
  abortCtrl.signal,
263
- (_c2 = _options.interceptors) == null ? void 0 : _c2.response,
245
+ (_c2 = opts.interceptors) == null ? void 0 : _c2.response,
264
246
  url,
265
- _options
247
+ opts
266
248
  );
267
- errResponse = response;
268
249
  const { status = 0 } = response;
269
250
  const isSuccess = status >= 200 && status < 300;
270
251
  if (!isSuccess) {
@@ -293,28 +274,20 @@ var fetch = (url, options = {}) => {
293
274
  result = await executeInterceptors_default(
294
275
  result,
295
276
  abortCtrl.signal,
296
- (_d = _options.interceptors) == null ? void 0 : _d.result,
277
+ (_d = opts.interceptors) == null ? void 0 : _d.result,
297
278
  url,
298
- _options
279
+ opts
299
280
  );
300
281
  return result;
301
282
  } catch (_err) {
302
- return processErr(_err);
283
+ let err = _err;
284
+ err = await interceptErr(_err, url, opts, response);
285
+ return Promise.reject(err);
303
286
  }
304
- };
305
- return PromisE_timeout(
306
- {
307
- ...options,
308
- abortCtrl,
309
- onAbort: () => processErr(new Error(_options.errMsgs.aborted)),
310
- onTimeout: async () => processErr(new Error(_options.errMsgs.timedout)),
311
- signal: _options.signal,
312
- timeout
313
- },
314
- start
315
- );
287
+ });
316
288
  };
317
289
  fetch.defaults = {
290
+ abortOnEarlyFinalize: true,
318
291
  errMsgs: {
319
292
  aborted: "Request aborted",
320
293
  invalidUrl: "Invalid URL",
@@ -333,6 +306,23 @@ fetch.defaults = {
333
306
  timeout: 3e4,
334
307
  validateUrl: true
335
308
  };
309
+ var interceptErr = async (err, url, options, response) => {
310
+ var _a, _b, _c;
311
+ const fErr = await executeInterceptors_default(
312
+ new FetchError((_a = err == null ? void 0 : err.message) != null ? _a : err, {
313
+ cause: (_b = err == null ? void 0 : err.cause) != null ? _b : err,
314
+ response,
315
+ options,
316
+ url
317
+ }),
318
+ void 0,
319
+ // should execute regardless of abort status
320
+ (_c = options.interceptors) == null ? void 0 : _c.error,
321
+ url,
322
+ options
323
+ );
324
+ return fErr;
325
+ };
336
326
  var fetch_default = fetch;
337
327
 
338
328
  // src/createClient.ts
@@ -350,20 +340,19 @@ var createClient = (fixedOptions, commonOptions, commonDeferOptions) => {
350
340
  func.deferred = (deferOptions = {}, defaultUrl, defaultOptions) => {
351
341
  let _abortCtrl;
352
342
  const fetchCb = (...args) => {
353
- var _a, _b;
354
- const options = mergePartialOptions(
343
+ var _a, _b, _c;
344
+ const options = (_a = mergePartialOptions(
355
345
  commonOptions,
356
346
  defaultOptions,
357
347
  defaultUrl === void 0 ? args[1] : args[0],
358
348
  fixedOptions
359
- );
360
- ((_a = _abortCtrl == null ? void 0 : _abortCtrl.signal) == null ? void 0 : _a.aborted) === false && ((_b = _abortCtrl == null ? void 0 : _abortCtrl.abort) == null ? void 0 : _b.call(_abortCtrl));
361
- _abortCtrl = getAbortCtrl(options);
349
+ )) != null ? _a : {};
350
+ ((_b = _abortCtrl == null ? void 0 : _abortCtrl.signal) == null ? void 0 : _b.aborted) === false && ((_c = _abortCtrl == null ? void 0 : _abortCtrl.abort) == null ? void 0 : _c.call(_abortCtrl));
351
+ _abortCtrl = new AbortController();
362
352
  const promise = fetch_default(
363
353
  defaultUrl != null ? defaultUrl : args[0],
364
354
  options
365
355
  );
366
- promise.onEarlyFinalize.push(() => _abortCtrl == null ? void 0 : _abortCtrl.abort());
367
356
  return promise;
368
357
  };
369
358
  return deferredCallback(fetchCb, {
@@ -392,21 +381,20 @@ var createPostClient = (fixedOptions, commonOptions, commonDeferOptions) => {
392
381
  client.deferred = (deferOptions = {}, defaultUrl, defaultData, defaultOptions) => {
393
382
  let _abortCtrl;
394
383
  const postCb = (...args) => {
395
- var _a, _b, _c, _d;
384
+ var _a, _b, _c, _d, _e;
396
385
  if (defaultUrl !== void 0) args.splice(0, 0, defaultUrl);
397
386
  if (defaultData !== void 0) args.splice(1, 0, defaultData);
398
- const options = mergePartialOptions(
387
+ const options = (_a = mergePartialOptions(
399
388
  commonOptions,
400
389
  defaultOptions,
401
390
  args[2],
402
391
  fixedOptions
403
- );
404
- ((_a = _abortCtrl == null ? void 0 : _abortCtrl.signal) == null ? void 0 : _a.aborted) === false && ((_b = _abortCtrl == null ? void 0 : _abortCtrl.abort) == null ? void 0 : _b.call(_abortCtrl));
405
- _abortCtrl = getAbortCtrl(options);
406
- options.body = (_c = args[1]) != null ? _c : options.body;
407
- (_d = options.method) != null ? _d : options.method = "post";
392
+ )) != null ? _a : {};
393
+ ((_b = _abortCtrl == null ? void 0 : _abortCtrl.signal) == null ? void 0 : _b.aborted) === false && ((_c = _abortCtrl == null ? void 0 : _abortCtrl.abort) == null ? void 0 : _c.call(_abortCtrl));
394
+ _abortCtrl = new AbortController();
395
+ options.body = (_d = args[1]) != null ? _d : options.body;
396
+ (_e = options.method) != null ? _e : options.method = "post";
408
397
  const promise = fetch_default(args[0], options);
409
- promise.onEarlyFinalize.push(() => _abortCtrl == null ? void 0 : _abortCtrl.abort());
410
398
  return promise;
411
399
  };
412
400
  return deferredCallback2(postCb, {
@@ -478,7 +466,6 @@ export {
478
466
  executeInterceptors,
479
467
  fetch,
480
468
  fetchResponse,
481
- getAbortCtrl,
482
469
  getResponse,
483
470
  mergeFetchOptions,
484
471
  mergePartialOptions
package/package.json CHANGED
@@ -5,8 +5,8 @@
5
5
  },
6
6
  "description": "A lightweight `fetch` wrapper for browsers and Node.js, designed to simplify data fetching and reduce boilerplate.",
7
7
  "dependencies": {
8
- "@superutils/core": "^1.1.8",
9
- "@superutils/promise": "^1.2.0"
8
+ "@superutils/core": "^1.2.1",
9
+ "@superutils/promise": "^1.2.1"
10
10
  },
11
11
  "files": [
12
12
  "dist",
@@ -25,7 +25,7 @@
25
25
  "name": "@superutils/fetch",
26
26
  "peerDependencies": {
27
27
  "@superutils/core": "^1.2.0",
28
- "@superutils/promise": "^1.1.7"
28
+ "@superutils/promise": "^1.2.0"
29
29
  },
30
30
  "publishConfig": {
31
31
  "access": "public"
@@ -45,5 +45,6 @@
45
45
  "sideEffects": false,
46
46
  "type": "module",
47
47
  "types": "dist/index.d.ts",
48
- "version": "1.3.0"
48
+ "version": "1.4.1",
49
+ "gitHead": "a26f4b1bb701d99d4cb71443e18680ee3ea52974"
49
50
  }