@zayne-labs/callapi 1.3.7 → 1.4.0
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 +2 -2
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +8 -7
- package/dist/cjs/options/index.cjs +1 -1
- package/dist/cjs/options/index.cjs.map +1 -1
- package/dist/cjs/options/index.d.cts +10 -9
- package/dist/cjs/{plugins-jILLQxo1.d.cts → types-CNYLI9wS.d.cts} +124 -106
- package/dist/cjs/utils/index.cjs.map +1 -1
- package/dist/cjs/utils/index.d.cts +3 -2
- package/dist/esm/chunk-KABMV5OF.js +1 -0
- package/dist/esm/chunk-KABMV5OF.js.map +1 -0
- package/dist/esm/chunk-UMFL27YA.js +1 -0
- package/dist/esm/chunk-UMFL27YA.js.map +1 -0
- package/dist/esm/index.d.ts +8 -7
- package/dist/esm/index.js +1 -1
- package/dist/esm/options/index.d.ts +10 -9
- package/dist/esm/options/index.js +1 -1
- package/dist/esm/options/index.js.map +1 -1
- package/dist/esm/{plugins-jILLQxo1.d.ts → types-CNYLI9wS.d.ts} +124 -106
- package/dist/esm/utils/index.d.ts +3 -2
- package/dist/esm/utils/index.js +1 -1
- package/package.json +2 -1
- package/dist/esm/chunk-36I75IJA.js +0 -1
- package/dist/esm/chunk-36I75IJA.js.map +0 -1
- package/dist/esm/chunk-YWY7SE3F.js +0 -1
- package/dist/esm/chunk-YWY7SE3F.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugins.ts","../../src/dedupe.ts","../../src/retry.ts","../../src/url.ts","../../src/utils/polyfills.ts","../../src/createFetchClient.ts"],"names":["callApi"],"mappings":"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","file":"chunk-UMFL27YA.js","sourcesContent":["import type {\n\tCallApiRequestOptions,\n\tCallApiRequestOptionsForHooks,\n\tCombinedCallApiExtraOptions,\n\tDefaultMoreOptions,\n\tExtraOptions,\n\tInterceptors,\n\tInterceptorsOrInterceptorArray,\n\tWithMoreOptions,\n} from \"./types\";\nimport { isFunction, isPlainObject, isString } from \"./utils/type-guards\";\nimport type { AnyFunction, Awaitable } from \"./utils/type-helpers\";\n\ntype UnionToIntersection<TUnion> = (TUnion extends unknown ? (param: TUnion) => void : never) extends (\n\tparam: infer TParam\n) => void\n\t? TParam\n\t: never;\n\nexport type InferPluginOptions<TPluginArray extends CallApiPlugin[]> =\n\tTPluginArray extends Array<infer TPlugin extends CallApiPlugin>\n\t\t? TPlugin[\"createExtraOptions\"] extends (...params: never[]) => infer TResult\n\t\t\t? UnionToIntersection<TResult>\n\t\t\t: NonNullable<unknown>\n\t\t: NonNullable<unknown>;\n\nexport type PluginInitContext<TMoreOptions = DefaultMoreOptions> = WithMoreOptions<TMoreOptions> & {\n\tinitURL: string;\n\toptions: CombinedCallApiExtraOptions;\n\trequest: CallApiRequestOptionsForHooks;\n};\n\nexport type PluginInitResult = Partial<\n\tOmit<PluginInitContext, \"request\"> & { request: CallApiRequestOptions }\n>;\n\nexport type CallApiPlugin = {\n\t/**\n\t * Defines additional options that can be passed to callApi\n\t */\n\tcreateExtraOptions?: (...params: never[]) => unknown;\n\n\t/**\n\t * A description for the plugin\n\t */\n\tdescription?: string;\n\n\t/**\n\t * Hooks / Interceptors for the plugin\n\t */\n\thooks?: InterceptorsOrInterceptorArray;\n\n\t/**\n\t * A unique id for the plugin\n\t */\n\tid: string;\n\n\t/**\n\t * A function that will be called when the plugin is initialized. This will be called before the any of the other internal functions.\n\t */\n\tinit?: (context: PluginInitContext) => Awaitable<PluginInitResult> | Awaitable<void>;\n\n\t/**\n\t * A name for the plugin\n\t */\n\tname: string;\n\n\t/**\n\t * A version for the plugin\n\t */\n\tversion?: string;\n};\n\n// eslint-disable-next-line perfectionist/sort-union-types -- Let the first one be first\nexport const definePlugin = <TPlugin extends CallApiPlugin | AnyFunction<CallApiPlugin> = CallApiPlugin>(\n\tplugin: TPlugin\n) => {\n\treturn plugin;\n};\n\nconst createMergedHook = (\n\thooks: Array<AnyFunction<Awaitable<unknown>> | undefined>,\n\tmergedHooksExecutionMode: CombinedCallApiExtraOptions[\"mergedHooksExecutionMode\"]\n) => {\n\treturn async (ctx: Record<string, unknown>) => {\n\t\tif (mergedHooksExecutionMode === \"sequential\") {\n\t\t\tfor (const hook of hooks) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop -- This is necessary in this case\n\t\t\t\tawait hook?.(ctx);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (mergedHooksExecutionMode === \"parallel\") {\n\t\t\tconst hookArray = [...hooks];\n\n\t\t\tawait Promise.all(hookArray.map((uniqueHook) => uniqueHook?.(ctx)));\n\t\t}\n\t};\n};\n\n// prettier-ignore\ntype HookRegistries = {\n\t[Key in keyof Interceptors]: Set<Interceptors[Key]>;\n};\n\nexport const hooksEnum = {\n\tonError: new Set(),\n\tonRequest: new Set(),\n\tonRequestError: new Set(),\n\tonResponse: new Set(),\n\tonResponseError: new Set(),\n\tonRetry: new Set(),\n\tonSuccess: new Set(),\n} satisfies HookRegistries;\n\nexport const initializePlugins = async (context: PluginInitContext) => {\n\tconst { initURL, options, request } = context;\n\n\tconst hookRegistries = structuredClone(hooksEnum);\n\n\tconst addMainHooks = () => {\n\t\tfor (const key of Object.keys(hooksEnum)) {\n\t\t\tconst mainHook = options[key as keyof Interceptors] as never;\n\n\t\t\thookRegistries[key as keyof Interceptors].add(mainHook);\n\t\t}\n\t};\n\n\tconst addPluginHooks = (pluginHooks: InterceptorsOrInterceptorArray) => {\n\t\tfor (const key of Object.keys(hooksEnum)) {\n\t\t\tconst pluginHook = pluginHooks[key as keyof Interceptors] as never;\n\n\t\t\thookRegistries[key as keyof Interceptors].add(pluginHook);\n\t\t}\n\t};\n\n\tif (options.mergedHooksExecutionOrder === \"mainHooksBeforePlugins\") {\n\t\taddMainHooks();\n\t}\n\n\tconst getPluginArray = (plugins: ExtraOptions[\"plugins\"]) => {\n\t\tif (!plugins) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn isFunction(plugins) ? plugins({ initURL, options, request }) : plugins;\n\t};\n\n\tconst resolvedPlugins = [\n\t\t...getPluginArray(options.plugins),\n\t\t...getPluginArray(options.extend?.plugins),\n\t] as CallApiPlugin[];\n\n\tlet resolvedUrl = initURL;\n\tlet resolvedOptions = options;\n\tlet resolvedRequestOptions = request;\n\n\tconst executePluginInit = async (pluginInit: CallApiPlugin[\"init\"]) => {\n\t\tif (!pluginInit) return;\n\n\t\tconst initResult = await pluginInit({ initURL, options, request });\n\n\t\tif (!isPlainObject(initResult)) return;\n\n\t\tif (isString(initResult.initURL)) {\n\t\t\tresolvedUrl = initResult.initURL;\n\t\t}\n\n\t\tif (isPlainObject(initResult.request)) {\n\t\t\tresolvedRequestOptions = initResult.request;\n\t\t}\n\n\t\tif (isPlainObject(initResult.options)) {\n\t\t\tresolvedOptions = initResult.options;\n\t\t}\n\t};\n\n\tfor (const plugin of resolvedPlugins) {\n\t\t// eslint-disable-next-line no-await-in-loop -- Await is necessary in this case.\n\t\tawait executePluginInit(plugin.init);\n\n\t\tif (!plugin.hooks) continue;\n\n\t\taddPluginHooks(plugin.hooks);\n\t}\n\n\tif (\n\t\t!options.mergedHooksExecutionOrder ||\n\t\toptions.mergedHooksExecutionOrder === \"mainHooksAfterPlugins\"\n\t) {\n\t\taddMainHooks();\n\t}\n\n\tconst resolvedHooks = {} as Required<Interceptors>;\n\n\tfor (const [key, hookRegistry] of Object.entries(hookRegistries)) {\n\t\tconst flattenedHookArray = [...hookRegistry].flat();\n\n\t\tconst mergedHook = createMergedHook(flattenedHookArray, options.mergedHooksExecutionMode);\n\n\t\tresolvedHooks[key as keyof Interceptors] = mergedHook;\n\t}\n\n\treturn {\n\t\tresolvedHooks,\n\t\tresolvedOptions,\n\t\tresolvedRequestOptions,\n\t\turl: resolvedUrl,\n\t};\n};\n","import type { CallApiExtraOptions, CallApiRequestOptions } from \"./types\";\nimport { getFetchImpl, waitUntil } from \"./utils/common\";\n\ntype RequestInfo = {\n\tcontroller: AbortController;\n\tresponsePromise: Promise<Response>;\n};\n\nexport type RequestInfoCache = Map<string | null, RequestInfo>;\n\ntype DedupeContext = {\n\t$RequestInfoCache: RequestInfoCache;\n\tnewFetchController: AbortController;\n\toptions: CallApiExtraOptions;\n\trequest: CallApiRequestOptions;\n};\n\nexport const createDedupeStrategy = async (context: DedupeContext) => {\n\tconst { $RequestInfoCache, newFetchController, options, request } = context;\n\n\tconst generateDedupeKey = () => {\n\t\tconst shouldHaveDedupeKey =\n\t\t\toptions.dedupeStrategy === \"cancel\" || options.dedupeStrategy === \"defer\";\n\n\t\tif (!shouldHaveDedupeKey) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn `${options.fullURL}-${JSON.stringify({ options, request })}`;\n\t};\n\n\tconst dedupeKey = options.dedupeKey ?? generateDedupeKey();\n\n\t// == This is to ensure cache operations only occur when key is available\n\tconst $RequestInfoCacheOrNull = dedupeKey !== null ? $RequestInfoCache : null;\n\n\t/******\n\t * == Add a small delay to the execution to ensure proper request deduplication when multiple requests with the same key start simultaneously.\n\t * == This gives time for the cache to be updated with the previous request info before the next request checks it.\n\t ******/\n\tif (dedupeKey !== null) {\n\t\tawait waitUntil(0.1);\n\t}\n\n\tconst prevRequestInfo = $RequestInfoCacheOrNull?.get(dedupeKey);\n\n\tconst handleRequestCancelDedupeStrategy = () => {\n\t\tconst shouldCancelRequest = prevRequestInfo && options.dedupeStrategy === \"cancel\";\n\n\t\tif (shouldCancelRequest) {\n\t\t\tconst message = options.dedupeKey\n\t\t\t\t? `Duplicate request detected - Aborting previous request with key '${options.dedupeKey}' as a new request was initiated`\n\t\t\t\t: `Duplicate request detected - Aborting previous request to '${options.fullURL}' as a new request with identical options was initiated`;\n\n\t\t\tconst reason = new DOMException(message, \"AbortError\");\n\n\t\t\tprevRequestInfo.controller.abort(reason);\n\t\t}\n\t};\n\n\tconst handleRequestDeferDedupeStrategy = () => {\n\t\tconst fetchApi = getFetchImpl(options.customFetchImpl);\n\n\t\tconst shouldUsePromiseFromCache = prevRequestInfo && options.dedupeStrategy === \"defer\";\n\n\t\tconst responsePromise = shouldUsePromiseFromCache\n\t\t\t? prevRequestInfo.responsePromise\n\t\t\t: fetchApi(options.fullURL as NonNullable<typeof options.fullURL>, request as RequestInit);\n\n\t\t$RequestInfoCacheOrNull?.set(dedupeKey, { controller: newFetchController, responsePromise });\n\n\t\treturn responsePromise;\n\t};\n\n\tconst removeDedupeKeyFromCache = () => $RequestInfoCacheOrNull?.delete(dedupeKey);\n\n\treturn {\n\t\thandleRequestCancelDedupeStrategy,\n\t\thandleRequestDeferDedupeStrategy,\n\t\tremoveDedupeKeyFromCache,\n\t};\n};\n","/* eslint-disable ts-eslint/consistent-type-definitions -- I need to use interfaces for the sake of user overrides */\n\nimport type { ErrorContext } from \"./types\";\nimport type { AnyNumber, AnyString } from \"./utils/type-helpers\";\n\ntype RetryCondition<TErrorData> = (context: ErrorContext<TErrorData>) => boolean | Promise<boolean>;\n\nexport interface RetryOptions<TErrorData> {\n\t/**\n\t * Keeps track of the number of times the request has already been retried\n\t * @deprecated This property is used internally to track retries. Please abstain from modifying it.\n\t */\n\treadonly \"~retryCount\"?: number;\n\n\t/**\n\t * Number of allowed retry attempts on HTTP errors\n\t * @default 0\n\t */\n\tretryAttempts?: number;\n\n\t/**\n\t * Callback whose return value determines if a request should be retried or not\n\t */\n\tretryCondition?: RetryCondition<TErrorData>;\n\n\t/**\n\t * Delay between retries in milliseconds\n\t * @default 1000\n\t */\n\tretryDelay?: number;\n\n\t/**\n\t * Maximum delay in milliseconds. Only applies to exponential strategy\n\t * @default 10000\n\t */\n\tretryMaxDelay?: number;\n\n\t/**\n\t * HTTP methods that are allowed to retry\n\t * @default [\"GET\", \"POST\"]\n\t */\n\tretryMethods?: Array<\"GET\" | \"POST\" | AnyString>;\n\n\t/**\n\t * HTTP status codes that trigger a retry\n\t * @default [409, 425, 429, 500, 502, 503, 504]\n\t */\n\tretryStatusCodes?: Array<409 | 425 | 429 | 500 | 502 | 503 | 504 | AnyNumber>;\n\n\t/**\n\t * Strategy to use when retrying\n\t * @default \"linear\"\n\t */\n\tretryStrategy?: \"exponential\" | \"linear\";\n}\n\nconst getLinearDelay = <TErrorData>(options: RetryOptions<TErrorData>) => options.retryDelay ?? 1000;\n\nconst getExponentialDelay = <TErrorData>(\n\tcurrentAttemptCount: number,\n\toptions: RetryOptions<TErrorData>\n) => {\n\tconst maxDelay = options.retryMaxDelay ?? 10000;\n\n\tconst exponentialDelay = (options.retryDelay ?? 1000) * 2 ** currentAttemptCount;\n\n\treturn Math.min(exponentialDelay, maxDelay);\n};\n\nexport const createRetryStrategy = <TErrorData>(\n\toptions: RetryOptions<TErrorData>,\n\tctx: ErrorContext<TErrorData>\n) => {\n\tconst currentRetryCount = options[\"~retryCount\"] ?? 0;\n\n\tconst getDelay = () => {\n\t\tif (options.retryStrategy === \"exponential\") {\n\t\t\treturn getExponentialDelay(currentRetryCount, options);\n\t\t}\n\n\t\treturn getLinearDelay(options);\n\t};\n\n\tconst shouldAttemptRetry = async () => {\n\t\tconst customRetryCondition = (await options.retryCondition?.(ctx)) ?? true;\n\n\t\tconst maxRetryAttempts = options.retryAttempts ?? 0;\n\n\t\tconst baseRetryCondition = maxRetryAttempts > currentRetryCount && customRetryCondition;\n\n\t\tif (ctx.error.name !== \"HTTPError\") {\n\t\t\treturn baseRetryCondition;\n\t\t}\n\n\t\tconst includesMethod =\n\t\t\t// eslint-disable-next-line no-implicit-coercion -- Boolean doesn't narrow\n\t\t\t!!ctx.request.method && options.retryMethods?.includes(ctx.request.method);\n\n\t\tconst includesCodes =\n\t\t\t// eslint-disable-next-line no-implicit-coercion -- Boolean doesn't narrow\n\t\t\t!!ctx.response?.status && options.retryStatusCodes?.includes(ctx.response.status);\n\n\t\treturn includesCodes && includesMethod && baseRetryCondition;\n\t};\n\n\treturn {\n\t\tgetDelay,\n\t\tshouldAttemptRetry,\n\t};\n};\n","import type { CallApiConfig, CallApiExtraOptions } from \"./types\";\nimport { toQueryString } from \"./utils\";\nimport { isArray } from \"./utils/type-guards\";\n\nconst slash = \"/\";\nconst column = \":\";\nconst mergeUrlWithParams = (url: string, params: CallApiExtraOptions[\"params\"]) => {\n\tif (!params) {\n\t\treturn url;\n\t}\n\n\tlet newUrl = url;\n\n\tif (isArray(params)) {\n\t\tconst matchedParamArray = newUrl.split(slash).filter((param) => param.startsWith(column));\n\n\t\tfor (const [index, matchedParam] of matchedParamArray.entries()) {\n\t\t\tconst realParam = params[index] as string;\n\t\t\tnewUrl = newUrl.replace(matchedParam, realParam);\n\t\t}\n\n\t\treturn newUrl;\n\t}\n\n\tfor (const [key, value] of Object.entries(params)) {\n\t\tnewUrl = newUrl.replace(`${column}${key}`, String(value));\n\t}\n\n\treturn newUrl;\n};\n\nconst questionMark = \"?\";\nconst ampersand = \"&\";\nconst mergeUrlWithQuery = (url: string, query: CallApiConfig[\"query\"]): string => {\n\tif (!query) {\n\t\treturn url;\n\t}\n\n\tconst queryString = toQueryString(query);\n\n\tif (queryString?.length === 0) {\n\t\treturn url;\n\t}\n\n\tif (url.endsWith(questionMark)) {\n\t\treturn `${url}${queryString}`;\n\t}\n\n\tif (url.includes(questionMark)) {\n\t\treturn `${url}${ampersand}${queryString}`;\n\t}\n\n\treturn `${url}${questionMark}${queryString}`;\n};\n\nexport const mergeUrlWithParamsAndQuery = (\n\turl: string,\n\tparams: CallApiExtraOptions[\"params\"],\n\tquery: CallApiExtraOptions[\"query\"]\n) => {\n\tconst urlWithMergedParams = mergeUrlWithParams(url, params);\n\n\treturn mergeUrlWithQuery(urlWithMergedParams, query);\n};\n","// prettier-ignore\nexport const createCombinedSignal = (...signals: Array<AbortSignal | null | undefined>) => AbortSignal.any(signals.filter(Boolean));\n\nexport const createTimeoutSignal = (milliseconds: number) => AbortSignal.timeout(milliseconds);\n","import { type RequestInfoCache, createDedupeStrategy } from \"./dedupe\";\nimport { HTTPError, resolveErrorResult } from \"./error\";\nimport { type CallApiPlugin, hooksEnum, initializePlugins } from \"./plugins\";\nimport { createRetryStrategy } from \"./retry\";\nimport type {\n\tBaseCallApiConfig,\n\tCallApiParameters,\n\tCallApiRequestOptions,\n\tCallApiRequestOptionsForHooks,\n\tCombinedCallApiExtraOptions,\n\tDefaultDataType,\n\tDefaultMoreOptions,\n\tGetCallApiResult,\n\tInterceptors,\n\tResultModeUnion,\n} from \"./types\";\nimport { mergeUrlWithParamsAndQuery } from \"./url\";\nimport {\n\tcombineHooks,\n\texecuteHooks,\n\tgetResponseData,\n\tmergeAndResolveHeaders,\n\tresolveSuccessResult,\n\tsplitBaseConfig,\n\tsplitConfig,\n\twaitUntil,\n} from \"./utils/common\";\nimport { defaultRetryMethods, defaultRetryStatusCodes } from \"./utils/constants\";\nimport { createCombinedSignal, createTimeoutSignal } from \"./utils/polyfills\";\nimport { isFunction, isHTTPErrorInstance, isPlainObject } from \"./utils/type-guards\";\nimport { type InferSchemaResult, type Schemas, createExtensibleSchemasAndValidators } from \"./validation\";\n\nexport const createFetchClient = <\n\tTBaseData = DefaultDataType,\n\tTBaseErrorData = DefaultDataType,\n\tTBaseResultMode extends ResultModeUnion = ResultModeUnion,\n\tTBasePluginArray extends CallApiPlugin[] = never[],\n\tTBaseSchemas extends Schemas = DefaultMoreOptions,\n>(\n\tbaseConfig?: BaseCallApiConfig<\n\t\tTBaseData,\n\t\tTBaseErrorData,\n\t\tTBaseResultMode,\n\t\tTBasePluginArray,\n\t\tTBaseSchemas\n\t>\n) => {\n\tconst [baseFetchConfig, baseExtraOptions] = splitBaseConfig(baseConfig ?? {});\n\n\tconst $RequestInfoCache: RequestInfoCache = new Map();\n\n\tconst callApi = async <\n\t\tTData = TBaseData,\n\t\tTErrorData = TBaseErrorData,\n\t\tTResultMode extends ResultModeUnion = TBaseResultMode,\n\t\tTPluginArray extends CallApiPlugin[] = TBasePluginArray,\n\t\tTSchemas extends Schemas = TBaseSchemas,\n\t\tTActualData = InferSchemaResult<TSchemas[\"data\"], TData>,\n\t\tTActualErrorData = InferSchemaResult<TSchemas[\"errorData\"], TErrorData>,\n\t>(\n\t\t...parameters: CallApiParameters<TData, TErrorData, TResultMode, TPluginArray, TSchemas>\n\t): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>> => {\n\t\tconst [initURL, config = {} as never] = parameters;\n\n\t\tconst [fetchConfig, extraOptions] = splitConfig(config);\n\n\t\tconst initCombinedHooks = {} as Required<Interceptors>;\n\n\t\tfor (const key of Object.keys(hooksEnum)) {\n\t\t\tconst combinedHook = combineHooks(\n\t\t\t\tbaseExtraOptions[key as keyof Interceptors],\n\t\t\t\textraOptions[key as keyof Interceptors]\n\t\t\t);\n\n\t\t\tinitCombinedHooks[key as keyof Interceptors] = combinedHook as never;\n\t\t}\n\n\t\t// == Default Extra Options\n\t\tconst defaultExtraOptions = {\n\t\t\tbaseURL: \"\",\n\t\t\tbodySerializer: JSON.stringify,\n\t\t\tdedupeStrategy: \"cancel\",\n\t\t\tdefaultErrorMessage: \"Failed to fetch data from server!\",\n\t\t\tmergedHooksExecutionMode: \"parallel\",\n\t\t\tmergedHooksExecutionOrder: \"mainHooksAfterPlugins\",\n\t\t\tresponseType: \"json\",\n\t\t\tresultMode: \"all\",\n\t\t\tretryAttempts: 0,\n\t\t\tretryDelay: 1000,\n\t\t\tretryMaxDelay: 10000,\n\t\t\tretryMethods: defaultRetryMethods,\n\t\t\tretryStatusCodes: defaultRetryStatusCodes,\n\t\t\tretryStrategy: \"linear\",\n\n\t\t\t...baseExtraOptions,\n\t\t\t...extraOptions,\n\n\t\t\t...initCombinedHooks,\n\t\t} satisfies CombinedCallApiExtraOptions;\n\n\t\tconst body = fetchConfig.body ?? baseFetchConfig.body;\n\n\t\t// == Default Request Options\n\t\tconst defaultRequestOptions = {\n\t\t\tbody: isPlainObject(body) ? defaultExtraOptions.bodySerializer(body) : body,\n\t\t\tmethod: \"GET\",\n\n\t\t\t...baseFetchConfig,\n\t\t\t...fetchConfig,\n\n\t\t\theaders: mergeAndResolveHeaders({\n\t\t\t\tauth: defaultExtraOptions.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: fetchConfig.headers,\n\t\t\t}),\n\n\t\t\tsignal: fetchConfig.signal ?? baseFetchConfig.signal,\n\t\t} satisfies CallApiRequestOptions;\n\n\t\tconst { resolvedHooks, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({\n\t\t\tinitURL,\n\t\t\toptions: defaultExtraOptions,\n\t\t\trequest: defaultRequestOptions,\n\t\t});\n\n\t\tconst fullURL = `${resolvedOptions.baseURL}${mergeUrlWithParamsAndQuery(url, resolvedOptions.params, resolvedOptions.query)}`;\n\n\t\tconst options = {\n\t\t\t...resolvedOptions,\n\t\t\t...resolvedHooks,\n\t\t\tfullURL,\n\t\t\tinitURL,\n\t\t} satisfies CombinedCallApiExtraOptions as typeof defaultExtraOptions & typeof resolvedHooks;\n\n\t\tconst newFetchController = new AbortController();\n\n\t\tconst timeoutSignal = options.timeout != null ? createTimeoutSignal(options.timeout) : null;\n\n\t\tconst combinedSignal = createCombinedSignal(\n\t\t\tresolvedRequestOptions.signal,\n\t\t\ttimeoutSignal,\n\t\t\tnewFetchController.signal\n\t\t);\n\n\t\tconst request = {\n\t\t\t...resolvedRequestOptions,\n\t\t\tsignal: combinedSignal,\n\t\t} satisfies CallApiRequestOptionsForHooks;\n\n\t\tconst {\n\t\t\thandleRequestCancelDedupeStrategy,\n\t\t\thandleRequestDeferDedupeStrategy,\n\t\t\tremoveDedupeKeyFromCache,\n\t\t} = await createDedupeStrategy({ $RequestInfoCache, newFetchController, options, request });\n\n\t\thandleRequestCancelDedupeStrategy();\n\n\t\ttry {\n\t\t\tawait executeHooks(options.onRequest({ options, request }));\n\n\t\t\t// == Apply determined headers again after onRequest incase they were modified\n\t\t\trequest.headers = mergeAndResolveHeaders({\n\t\t\t\tauth: options.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\n\t\t\tconst response = await handleRequestDeferDedupeStrategy();\n\n\t\t\t// == Also clone response when dedupeStrategy is set to \"defer\", to avoid error thrown from reading response.(whatever) more than once\n\t\t\tconst shouldCloneResponse = options.dedupeStrategy === \"defer\" || options.cloneResponse;\n\n\t\t\tconst { schemas, validators } = createExtensibleSchemasAndValidators(options);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorData = await getResponseData<TErrorData>(\n\t\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\t\toptions.responseType,\n\t\t\t\t\toptions.responseParser,\n\t\t\t\t\tschemas?.errorData,\n\t\t\t\t\tvalidators?.errorData\n\t\t\t\t);\n\n\t\t\t\t// == Push all error handling responsibilities to the catch block if not retrying\n\t\t\t\tthrow new HTTPError({\n\t\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\t\terrorData,\n\t\t\t\t\tresponse,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst successData = await getResponseData<TData>(\n\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\toptions.responseType,\n\t\t\t\toptions.responseParser,\n\t\t\t\tschemas?.data,\n\t\t\t\tvalidators?.data\n\t\t\t);\n\n\t\t\tconst successContext = {\n\t\t\t\tdata: successData as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t\tresponse: options.cloneResponse ? response.clone() : response,\n\t\t\t};\n\n\t\t\tawait executeHooks(\n\t\t\t\toptions.onSuccess(successContext),\n\n\t\t\t\toptions.onResponse({ ...successContext, error: null })\n\t\t\t);\n\n\t\t\treturn await resolveSuccessResult({\n\t\t\t\tdata: successContext.data,\n\t\t\t\tresponse: successContext.response,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\t// == Exhaustive Error handling\n\t\t} catch (error) {\n\t\t\tconst { errorVariantDetails, getErrorResult } = resolveErrorResult({\n\t\t\t\tcloneResponse: options.cloneResponse,\n\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\terror,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\tconst errorContext = {\n\t\t\t\terror: errorVariantDetails.error as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t};\n\n\t\t\tconst errorContextWithResponse = {\n\t\t\t\t...errorContext,\n\t\t\t\tresponse: errorVariantDetails.response as NonNullable<typeof errorVariantDetails.response>,\n\t\t\t};\n\n\t\t\tconst { getDelay, shouldAttemptRetry } = createRetryStrategy(options, errorContextWithResponse);\n\n\t\t\tconst shouldRetry = !combinedSignal.aborted && (await shouldAttemptRetry());\n\n\t\t\tif (shouldRetry) {\n\t\t\t\tawait executeHooks(options.onRetry(errorContextWithResponse));\n\n\t\t\t\tconst delay = getDelay();\n\n\t\t\t\tawait waitUntil(delay);\n\n\t\t\t\tconst updatedOptions = {\n\t\t\t\t\t...config,\n\t\t\t\t\t\"~retryCount\": (options[\"~retryCount\"] ?? 0) + 1,\n\t\t\t\t} satisfies typeof config;\n\n\t\t\t\treturn await callApi(initURL, updatedOptions);\n\t\t\t}\n\n\t\t\tconst shouldThrowOnError = isFunction(options.throwOnError)\n\t\t\t\t? options.throwOnError(errorContextWithResponse)\n\t\t\t\t: options.throwOnError;\n\n\t\t\t// eslint-disable-next-line unicorn/consistent-function-scoping -- False alarm: this function is depends on this scope\n\t\t\tconst handleThrowOnError = () => {\n\t\t\t\tif (!shouldThrowOnError) return;\n\n\t\t\t\t// eslint-disable-next-line ts-eslint/only-throw-error -- It's fine to throw this\n\t\t\t\tthrow errorVariantDetails.error;\n\t\t\t};\n\n\t\t\tif (isHTTPErrorInstance<TErrorData>(error)) {\n\t\t\t\tawait executeHooks(\n\t\t\t\t\toptions.onResponseError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onResponse({ ...errorContextWithResponse, data: null })\n\t\t\t\t);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"AbortError\") {\n\t\t\t\tconst { message, name } = error;\n\n\t\t\t\tconsole.error(`${name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"TimeoutError\") {\n\t\t\t\tconst message = `Request timed out after ${options.timeout}ms`;\n\n\t\t\t\tconsole.error(`${error.name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult({ message });\n\t\t\t}\n\n\t\t\tawait executeHooks(\n\t\t\t\t// == At this point only the request errors exist, so the request error interceptor is called\n\t\t\t\toptions.onRequestError(errorContext),\n\n\t\t\t\t// == Also call the onError interceptor\n\t\t\t\toptions.onError(errorContextWithResponse)\n\t\t\t);\n\n\t\t\thandleThrowOnError();\n\n\t\t\treturn getErrorResult();\n\n\t\t\t// == Removing the now unneeded AbortController from store\n\t\t} finally {\n\t\t\tremoveDedupeKeyFromCache();\n\t\t}\n\t};\n\n\tcallApi.create = createFetchClient;\n\n\treturn callApi;\n};\n\nexport const callApi = createFetchClient();\n"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { R as ResultModeUnion, C as CallApiPlugin, a as CallApiConfig, G as GetCallApiResult, B as BaseCallApiConfig } from './
|
|
2
|
-
export { b as BaseCallApiExtraOptions, c as CallApiExtraOptions, g as CallApiParameters, h as CallApiRequestOptions, i as CallApiRequestOptionsForHooks, j as CallApiResultErrorVariant, k as CallApiResultSuccessVariant, l as CombinedCallApiExtraOptions, E as ErrorContext,
|
|
1
|
+
import { R as ResultModeUnion, C as CallApiPlugin, S as Schemas, I as InferSchemaResult, a as CallApiConfig, G as GetCallApiResult, B as BaseCallApiConfig } from './types-CNYLI9wS.js';
|
|
2
|
+
export { b as BaseCallApiExtraOptions, c as CallApiExtraOptions, g as CallApiParameters, h as CallApiRequestOptions, i as CallApiRequestOptionsForHooks, j as CallApiResultErrorVariant, k as CallApiResultSuccessVariant, l as CombinedCallApiExtraOptions, E as ErrorContext, m as Interceptors, n as InterceptorsOrInterceptorArray, P as PluginInitContext, f as PossibleHTTPError, e as PossibleJavaScriptError, o as PossibleJavascriptErrorNames, p as Register, q as RequestContext, r as RequestErrorContext, s as ResponseContext, t as ResponseErrorContext, u as SuccessContext, d as definePlugin } from './types-CNYLI9wS.js';
|
|
3
3
|
export { H as HTTPError } from './error-lBRMiMeF.js';
|
|
4
|
+
import '@standard-schema/spec';
|
|
4
5
|
|
|
5
|
-
declare const createFetchClient: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
6
|
-
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray
|
|
6
|
+
declare const createFetchClient: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = {}>(baseConfig?: BaseCallApiConfig<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>) => {
|
|
7
|
+
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray, TSchemas extends Schemas = TBaseSchemas, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas> | undefined): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
7
8
|
create: /*elided*/ any;
|
|
8
9
|
};
|
|
9
10
|
declare const callApi: {
|
|
10
|
-
<TData = unknown, TErrorData = unknown, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
11
|
-
create: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
12
|
-
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray
|
|
11
|
+
<TData = unknown, TErrorData = unknown, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = {}, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas> | undefined): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
12
|
+
create: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = {}>(baseConfig?: BaseCallApiConfig<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>) => {
|
|
13
|
+
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray, TSchemas extends Schemas = TBaseSchemas, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas> | undefined): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
13
14
|
create: /*elided*/ any;
|
|
14
15
|
};
|
|
15
16
|
};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{callApi,createFetchClient,definePlugin}from"./chunk-
|
|
1
|
+
export{callApi,createFetchClient,definePlugin}from"./chunk-UMFL27YA.js";export{HTTPError}from"./chunk-KABMV5OF.js";//# sourceMappingURL=index.js.map
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { D as DefaultDataType, R as ResultModeUnion, C as CallApiPlugin, a as CallApiConfig, G as GetCallApiResult, B as BaseCallApiConfig } from '../
|
|
1
|
+
import { D as DefaultDataType, R as ResultModeUnion, C as CallApiPlugin, S as Schemas, a as CallApiConfig, I as InferSchemaResult, G as GetCallApiResult, B as BaseCallApiConfig } from '../types-CNYLI9wS.js';
|
|
2
|
+
import '@standard-schema/spec';
|
|
2
3
|
|
|
3
|
-
type CallApiConfigWithRequiredURL<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
4
|
+
type CallApiConfigWithRequiredURL<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = Schemas> = CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas> & {
|
|
4
5
|
initURL: string;
|
|
5
6
|
};
|
|
6
7
|
|
|
7
|
-
declare const createFetchClientWithOptions: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
8
|
-
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray
|
|
9
|
-
create: <TBaseData_1 = unknown, TBaseErrorData_1 = unknown, TBaseResultMode_1 extends ResultModeUnion = ResultModeUnion, TBasePluginArray_1 extends CallApiPlugin[] =
|
|
10
|
-
<TData = TBaseData_1, TErrorData_1 = TBaseErrorData_1, TResultMode_1 extends ResultModeUnion = TBaseResultMode_1, TPluginArray_1 extends CallApiPlugin[] = TBasePluginArray_1
|
|
8
|
+
declare const createFetchClientWithOptions: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = {}>(baseConfig?: BaseCallApiConfig<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>) => {
|
|
9
|
+
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray, TSchemas extends Schemas = TBaseSchemas, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(config: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode, TPluginArray, TSchemas>): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
10
|
+
create: <TBaseData_1 = unknown, TBaseErrorData_1 = unknown, TBaseResultMode_1 extends ResultModeUnion = ResultModeUnion, TBasePluginArray_1 extends CallApiPlugin[] = never[], TBaseSchemas_1 extends Schemas = {}>(baseConfig?: BaseCallApiConfig<TBaseData_1, TBaseErrorData_1, TBaseResultMode_1, TBasePluginArray_1, TBaseSchemas_1>) => {
|
|
11
|
+
<TData = TBaseData_1, TErrorData_1 = TBaseErrorData_1, TResultMode_1 extends ResultModeUnion = TBaseResultMode_1, TPluginArray_1 extends CallApiPlugin[] = TBasePluginArray_1, TSchemas_1 extends Schemas = TBaseSchemas_1, TActualData_1 = InferSchemaResult<TSchemas_1["data"], TData>, TActualErrorData_1 = InferSchemaResult<TSchemas_1["errorData"], TErrorData_1>>(initURL: string, config?: CallApiConfig<TData, TErrorData_1, TResultMode_1, TPluginArray_1, TSchemas_1> | undefined): Promise<GetCallApiResult<TActualData_1, TActualErrorData_1, TResultMode_1>>;
|
|
11
12
|
create: /*elided*/ any;
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
15
|
declare const callApiWithOptions: {
|
|
15
|
-
<TData = unknown, TErrorData = unknown, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
16
|
-
create: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
17
|
-
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray
|
|
16
|
+
<TData = unknown, TErrorData = unknown, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = {}, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(config: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode, TPluginArray, TSchemas>): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
17
|
+
create: <TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = {}>(baseConfig?: BaseCallApiConfig<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>) => {
|
|
18
|
+
<TData = TBaseData, TErrorData = TBaseErrorData, TResultMode extends ResultModeUnion = TBaseResultMode, TPluginArray extends CallApiPlugin[] = TBasePluginArray, TSchemas extends Schemas = TBaseSchemas, TActualData = InferSchemaResult<TSchemas["data"], TData>, TActualErrorData = InferSchemaResult<TSchemas["errorData"], TErrorData>>(initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas> | undefined): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>>;
|
|
18
19
|
create: /*elided*/ any;
|
|
19
20
|
};
|
|
20
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{hooksEnum as e,initializePlugins as r,mergeUrlWithParamsAndQuery as o,createTimeoutSignal as t,createCombinedSignal as s,createDedupeStrategy as a,createRetryStrategy as n,createFetchClient as i}from"../chunk-
|
|
1
|
+
import{hooksEnum as e,initializePlugins as r,mergeUrlWithParamsAndQuery as o,createTimeoutSignal as t,createCombinedSignal as s,createDedupeStrategy as a,createRetryStrategy as n,createFetchClient as i}from"../chunk-UMFL27YA.js";import{splitBaseConfig as l,splitConfig as u,combineHooks as d,mergeAndResolveHeaders as c,isPlainObject as p,defaultRetryStatusCodes as y,defaultRetryMethods as h,executeHooks as f,createExtensibleSchemasAndValidators as m,getResponseData as g,HTTPError as w,resolveSuccessResult as R,resolveErrorResult as E,waitUntil as M,isFunction as b,isHTTPErrorInstance as q}from"../chunk-KABMV5OF.js";var D=D=>{const[O,S]=l(D??{}),k=new Map,C=async i=>{const{initURL:l,...D}=i,[v,A]=u(D),L={};for(const r of Object.keys(e)){const e=d(S[r],A[r]);L[r]=e}const U={baseURL:"",bodySerializer:JSON.stringify,dedupeStrategy:"cancel",defaultErrorMessage:"Failed to fetch data from server!",mergedHooksExecutionMode:"parallel",mergedHooksExecutionOrder:"mainHooksAfterPlugins",responseType:"json",resultMode:"all",retryAttempts:0,retryDelay:1e3,retryMaxDelay:1e4,retryMethods:h,retryStatusCodes:y,retryStrategy:"linear",...S,...A,...L},x=v.body??O.body,H={body:p(x)?U.bodySerializer(x):x,method:"GET",...O,...v,headers:c({auth:U.auth,baseHeaders:O.headers,body:x,headers:v.headers}),signal:v.signal??O.signal},{resolvedHooks:$,resolvedOptions:F,resolvedRequestOptions:T,url:j}=await r({initURL:l,options:U,request:H}),P=`${F.baseURL}${o(j,F.params,F.query)}`,z={...F,...$,fullURL:P,initURL:l},K=new AbortController,V=null!=z.timeout?t(z.timeout):null,B=s(T.signal,V,K.signal),G={...T,signal:B},{handleRequestCancelDedupeStrategy:I,handleRequestDeferDedupeStrategy:J,removeDedupeKeyFromCache:N}=await a({$RequestInfoCache:k,newFetchController:K,options:z,request:G});I();try{await f(z.onRequest({options:z,request:G})),G.headers=c({auth:z.auth,baseHeaders:O.headers,body:x,headers:G.headers});const e=await J(),r="defer"===z.dedupeStrategy||z.cloneResponse,{schemas:o,validators:t}=m(z);if(!e.ok){const s=await g(r?e.clone():e,z.responseType,z.responseParser,o?.errorData,t?.errorData);throw new w({defaultErrorMessage:z.defaultErrorMessage,errorData:s,response:e})}const s={data:await g(r?e.clone():e,z.responseType,z.responseParser,o?.data,t?.data),options:z,request:G,response:z.cloneResponse?e.clone():e};return await f(z.onSuccess(s),z.onResponse({...s,error:null})),await R({data:s.data,response:s.response,resultMode:z.resultMode})}catch(e){const{errorVariantDetails:r,getErrorResult:o}=E({cloneResponse:z.cloneResponse,defaultErrorMessage:z.defaultErrorMessage,error:e,resultMode:z.resultMode}),t={error:r.error,options:z,request:G},s={...t,response:r.response},{getDelay:a,shouldAttemptRetry:l}=n(z,s);if(!B.aborted&&await l()){await f(z.onRetry(s));const e=a();await M(e);const r={...i,"~retryCount":(z["~retryCount"]??0)+1};return await C(r)}const u=b(z.throwOnError)?z.throwOnError(s):z.throwOnError,d=()=>{if(u)throw r.error};if(q(e))return await f(z.onResponseError(s),z.onError(s),z.onResponse({...s,data:null})),d(),o();if(e instanceof DOMException&&"AbortError"===e.name){const{message:r,name:t}=e;return console.error(`${t}:`,r),d(),o()}if(e instanceof DOMException&&"TimeoutError"===e.name){const r=`Request timed out after ${z.timeout}ms`;return console.error(`${e.name}:`,r),d(),o({message:r})}return await f(z.onRequestError(t),z.onError(s)),d(),o()}finally{N()}};return C.create=i,C},O=D(),S=e=>e;export{O as callApiWithOptions,D as createFetchClientWithOptions,S as defineOptions};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/options/createFetchClientWithOptions.ts","../../../src/options/defineOptions.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { createFetchClient } from \"@/createFetchClient\";\nimport { type RequestInfoCache, createDedupeStrategy } from \"@/dedupe\";\nimport { HTTPError, resolveErrorResult } from \"@/error\";\nimport { type CallApiPlugin, hooksEnum, initializePlugins } from \"@/plugins\";\nimport { createRetryStrategy } from \"@/retry\";\nimport type {\n\tBaseCallApiConfig,\n\tCallApiConfig,\n\tCallApiRequestOptions,\n\tCallApiRequestOptionsForHooks,\n\tCombinedCallApiExtraOptions,\n\tDefaultDataType,\n\tGetCallApiResult,\n\tInterceptors,\n\tResultModeUnion,\n} from \"@/types\";\nimport { mergeUrlWithParamsAndQuery } from \"@/url\";\nimport {\n\tcombineHooks,\n\texecuteHooks,\n\tgetResponseData,\n\tmergeAndResolveHeaders,\n\tresolveSuccessResult,\n\tsplitBaseConfig,\n\tsplitConfig,\n\twaitUntil,\n} from \"@/utils/common\";\nimport { defaultRetryMethods, defaultRetryStatusCodes } from \"@/utils/constants\";\nimport { createCombinedSignal, createTimeoutSignal } from \"@/utils/polyfills\";\nimport { isFunction, isHTTPErrorInstance, isPlainObject } from \"@/utils/type-guards\";\nimport type { CallApiConfigWithRequiredURL } from \"./types\";\n\nexport const createFetchClientWithOptions = <\n\tTBaseData = DefaultDataType,\n\tTBaseErrorData = DefaultDataType,\n\tTBaseResultMode extends ResultModeUnion = ResultModeUnion,\n\tTBasePluginArray extends CallApiPlugin[] = CallApiPlugin[],\n>(\n\tbaseConfig?: BaseCallApiConfig<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray>\n) => {\n\tconst [baseFetchConfig, baseExtraOptions] = splitBaseConfig(baseConfig ?? {});\n\n\tconst $RequestInfoCache = new Map() satisfies RequestInfoCache;\n\n\tconst callApi = async <\n\t\tTData = TBaseData,\n\t\tTErrorData = TBaseErrorData,\n\t\tTResultMode extends ResultModeUnion = TBaseResultMode,\n\t\tTPluginArray extends CallApiPlugin[] = TBasePluginArray,\n\t>(\n\t\tconfig: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode, TPluginArray>\n\t): Promise<GetCallApiResult<TData, TErrorData, TResultMode>> => {\n\t\tconst { initURL, ...restOfConfig } = config;\n\n\t\tconst [fetchConfig, extraOptions] = splitConfig(restOfConfig);\n\n\t\tconst initCombinedHooks = {} as Required<Interceptors>;\n\n\t\tfor (const key of Object.keys(hooksEnum)) {\n\t\t\tconst combinedHook = combineHooks(\n\t\t\t\tbaseExtraOptions[key as keyof Interceptors],\n\t\t\t\textraOptions[key as keyof Interceptors]\n\t\t\t);\n\n\t\t\tinitCombinedHooks[key as keyof Interceptors] = combinedHook as never;\n\t\t}\n\n\t\t// == Default Extra Options\n\t\tconst defaultExtraOptions = {\n\t\t\tbaseURL: \"\",\n\t\t\tbodySerializer: JSON.stringify,\n\t\t\tdedupeStrategy: \"cancel\",\n\t\t\tdefaultErrorMessage: \"Failed to fetch data from server!\",\n\t\t\tmergedHooksExecutionMode: \"parallel\",\n\t\t\tmergedHooksExecutionOrder: \"mainHooksAfterPlugins\",\n\t\t\tresponseType: \"json\",\n\t\t\tresultMode: \"all\",\n\t\t\tretryAttempts: 0,\n\t\t\tretryDelay: 1000,\n\t\t\tretryMaxDelay: 10000,\n\t\t\tretryMethods: defaultRetryMethods,\n\t\t\tretryStatusCodes: defaultRetryStatusCodes,\n\t\t\tretryStrategy: \"linear\",\n\n\t\t\t...baseExtraOptions,\n\t\t\t...extraOptions,\n\n\t\t\t...initCombinedHooks,\n\t\t} satisfies CombinedCallApiExtraOptions;\n\n\t\tconst body = fetchConfig.body ?? baseFetchConfig.body;\n\n\t\t// == Default Request Options\n\t\tconst defaultRequestOptions = {\n\t\t\tbody: isPlainObject(body) ? defaultExtraOptions.bodySerializer(body) : body,\n\t\t\tmethod: \"GET\",\n\n\t\t\t...baseFetchConfig,\n\t\t\t...fetchConfig,\n\n\t\t\theaders: mergeAndResolveHeaders({\n\t\t\t\tauth: defaultExtraOptions.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: fetchConfig.headers,\n\t\t\t}),\n\n\t\t\tsignal: fetchConfig.signal ?? baseFetchConfig.signal,\n\t\t} satisfies CallApiRequestOptions;\n\n\t\tconst { resolvedHooks, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({\n\t\t\tinitURL,\n\t\t\toptions: defaultExtraOptions,\n\t\t\trequest: defaultRequestOptions,\n\t\t});\n\n\t\tconst fullURL = `${resolvedOptions.baseURL}${mergeUrlWithParamsAndQuery(url, resolvedOptions.params, resolvedOptions.query)}`;\n\n\t\tconst options = {\n\t\t\t...resolvedOptions,\n\t\t\t...resolvedHooks,\n\t\t\tfullURL,\n\t\t\tinitURL,\n\t\t} satisfies CombinedCallApiExtraOptions as typeof defaultExtraOptions & typeof resolvedHooks;\n\n\t\tconst newFetchController = new AbortController();\n\n\t\tconst timeoutSignal = options.timeout != null ? createTimeoutSignal(options.timeout) : null;\n\n\t\tconst combinedSignal = createCombinedSignal(\n\t\t\tresolvedRequestOptions.signal,\n\t\t\ttimeoutSignal,\n\t\t\tnewFetchController.signal\n\t\t);\n\n\t\tconst request = {\n\t\t\t...resolvedRequestOptions,\n\t\t\tsignal: combinedSignal,\n\t\t} satisfies CallApiRequestOptionsForHooks;\n\n\t\tconst {\n\t\t\thandleRequestCancelDedupeStrategy,\n\t\t\thandleRequestDeferDedupeStrategy,\n\t\t\tremoveDedupeKeyFromCache,\n\t\t} = await createDedupeStrategy({ $RequestInfoCache, newFetchController, options, request });\n\n\t\thandleRequestCancelDedupeStrategy();\n\n\t\ttry {\n\t\t\tawait executeHooks(options.onRequest({ options, request }));\n\n\t\t\t// == Apply determined headers again after onRequest incase they were modified\n\t\t\trequest.headers = mergeAndResolveHeaders({\n\t\t\t\tauth: options.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\n\t\t\tconst response = await handleRequestDeferDedupeStrategy();\n\n\t\t\t// == Also clone response when dedupeStrategy is set to \"defer\", to avoid error thrown from reading response.(whatever) more than once\n\t\t\tconst shouldCloneResponse = options.dedupeStrategy === \"defer\" || options.cloneResponse;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorData = await getResponseData<TErrorData>(\n\t\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\t\toptions.responseType,\n\t\t\t\t\toptions.responseParser,\n\t\t\t\t\toptions.responseErrorValidator\n\t\t\t\t);\n\n\t\t\t\t// == Push all error handling responsibilities to the catch block if not retrying\n\t\t\t\tthrow new HTTPError({\n\t\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\t\terrorData,\n\t\t\t\t\tresponse,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst successData = await getResponseData<TData>(\n\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\toptions.responseType,\n\t\t\t\toptions.responseParser,\n\t\t\t\toptions.responseValidator\n\t\t\t);\n\n\t\t\tconst successContext = {\n\t\t\t\tdata: successData as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t\tresponse: options.cloneResponse ? response.clone() : response,\n\t\t\t};\n\n\t\t\tawait executeHooks(\n\t\t\t\toptions.onSuccess(successContext),\n\n\t\t\t\toptions.onResponse({ ...successContext, error: null })\n\t\t\t);\n\n\t\t\treturn await resolveSuccessResult({\n\t\t\t\tdata: successContext.data,\n\t\t\t\tresponse: successContext.response,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\t// == Exhaustive Error handling\n\t\t} catch (error) {\n\t\t\tconst { errorVariantDetails, getErrorResult } = resolveErrorResult({\n\t\t\t\tcloneResponse: options.cloneResponse,\n\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\terror,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\tconst errorContext = {\n\t\t\t\terror: errorVariantDetails.error as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t};\n\n\t\t\tconst errorContextWithResponse = {\n\t\t\t\t...errorContext,\n\t\t\t\tresponse: errorVariantDetails.response as NonNullable<typeof errorVariantDetails.response>,\n\t\t\t};\n\n\t\t\tconst { getDelay, shouldAttemptRetry } = createRetryStrategy(options, errorContextWithResponse);\n\n\t\t\tconst shouldRetry = !combinedSignal.aborted && (await shouldAttemptRetry());\n\n\t\t\tif (shouldRetry) {\n\t\t\t\tawait executeHooks(options.onRetry(errorContextWithResponse));\n\n\t\t\t\tconst delay = getDelay();\n\n\t\t\t\tawait waitUntil(delay);\n\n\t\t\t\t// prettier-ignore\n\t\t\t\tconst updatedOptions = {...config, \"~retryCount\": (options[\"~retryCount\"] ?? 0) + 1} satisfies CallApiConfig<TData, TErrorData>;\n\n\t\t\t\treturn await callApi(updatedOptions);\n\t\t\t}\n\n\t\t\tconst shouldThrowOnError = isFunction(options.throwOnError)\n\t\t\t\t? options.throwOnError(errorContextWithResponse)\n\t\t\t\t: options.throwOnError;\n\n\t\t\t// eslint-disable-next-line unicorn/consistent-function-scoping -- False alarm: this function is depends on this scope\n\t\t\tconst handleThrowOnError = () => {\n\t\t\t\tif (!shouldThrowOnError) return;\n\n\t\t\t\t// eslint-disable-next-line ts-eslint/only-throw-error -- It's fine to throw this\n\t\t\t\tthrow errorVariantDetails.error;\n\t\t\t};\n\n\t\t\tif (isHTTPErrorInstance<TErrorData>(error)) {\n\t\t\t\tawait executeHooks(\n\t\t\t\t\toptions.onResponseError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onResponse({ ...errorContextWithResponse, data: null })\n\t\t\t\t);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"AbortError\") {\n\t\t\t\tconst { message, name } = error;\n\n\t\t\t\tconsole.error(`${name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"TimeoutError\") {\n\t\t\t\tconst message = `Request timed out after ${options.timeout}ms`;\n\n\t\t\t\tconsole.error(`${error.name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult({ message });\n\t\t\t}\n\n\t\t\tawait executeHooks(\n\t\t\t\t// == At this point only the request errors exist, so the request error interceptor is called\n\t\t\t\toptions.onRequestError(errorContext),\n\n\t\t\t\t// == Also call the onError interceptor\n\t\t\t\toptions.onError(errorContextWithResponse)\n\t\t\t);\n\n\t\t\thandleThrowOnError();\n\n\t\t\treturn getErrorResult();\n\n\t\t\t// == Removing the now unneeded AbortController from store\n\t\t} finally {\n\t\t\tremoveDedupeKeyFromCache();\n\t\t}\n\t};\n\n\tcallApi.create = createFetchClient;\n\n\treturn callApi;\n};\nexport const callApiWithOptions = createFetchClientWithOptions();\n","import type { ResultModeUnion } from \"@/types\";\nimport type { CallApiConfigWithRequiredURL } from \"./types\";\n\nconst defineOptions = <\n\tTData = unknown,\n\tTErrorData = unknown,\n\tTResultMode extends ResultModeUnion = ResultModeUnion,\n>(\n\tconfig: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode>\n) => {\n\treturn config;\n};\n\nexport { defineOptions };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/options/createFetchClientWithOptions.ts","../../../src/options/defineOptions.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { createFetchClient } from \"@/createFetchClient\";\nimport { type RequestInfoCache, createDedupeStrategy } from \"@/dedupe\";\nimport { HTTPError, resolveErrorResult } from \"@/error\";\nimport { type CallApiPlugin, hooksEnum, initializePlugins } from \"@/plugins\";\nimport { createRetryStrategy } from \"@/retry\";\nimport type {\n\tBaseCallApiConfig,\n\tCallApiRequestOptions,\n\tCallApiRequestOptionsForHooks,\n\tCombinedCallApiExtraOptions,\n\tDefaultDataType,\n\tDefaultMoreOptions,\n\tGetCallApiResult,\n\tInterceptors,\n\tResultModeUnion,\n} from \"@/types\";\nimport { mergeUrlWithParamsAndQuery } from \"@/url\";\nimport {\n\tcombineHooks,\n\texecuteHooks,\n\tgetResponseData,\n\tmergeAndResolveHeaders,\n\tresolveSuccessResult,\n\tsplitBaseConfig,\n\tsplitConfig,\n\twaitUntil,\n} from \"@/utils/common\";\nimport { defaultRetryMethods, defaultRetryStatusCodes } from \"@/utils/constants\";\nimport { createCombinedSignal, createTimeoutSignal } from \"@/utils/polyfills\";\nimport { isFunction, isHTTPErrorInstance, isPlainObject } from \"@/utils/type-guards\";\nimport { type InferSchemaResult, type Schemas, createExtensibleSchemasAndValidators } from \"@/validation\";\nimport type { CallApiConfigWithRequiredURL } from \"./types\";\n\nexport const createFetchClientWithOptions = <\n\tTBaseData = DefaultDataType,\n\tTBaseErrorData = DefaultDataType,\n\tTBaseResultMode extends ResultModeUnion = ResultModeUnion,\n\tTBasePluginArray extends CallApiPlugin[] = never[],\n\tTBaseSchemas extends Schemas = DefaultMoreOptions,\n>(\n\tbaseConfig?: BaseCallApiConfig<\n\t\tTBaseData,\n\t\tTBaseErrorData,\n\t\tTBaseResultMode,\n\t\tTBasePluginArray,\n\t\tTBaseSchemas\n\t>\n) => {\n\tconst [baseFetchConfig, baseExtraOptions] = splitBaseConfig(baseConfig ?? {});\n\n\tconst $RequestInfoCache: RequestInfoCache = new Map();\n\n\tconst callApi = async <\n\t\tTData = TBaseData,\n\t\tTErrorData = TBaseErrorData,\n\t\tTResultMode extends ResultModeUnion = TBaseResultMode,\n\t\tTPluginArray extends CallApiPlugin[] = TBasePluginArray,\n\t\tTSchemas extends Schemas = TBaseSchemas,\n\t\tTActualData = InferSchemaResult<TSchemas[\"data\"], TData>,\n\t\tTActualErrorData = InferSchemaResult<TSchemas[\"errorData\"], TErrorData>,\n\t>(\n\t\tconfig: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode, TPluginArray, TSchemas>\n\t): Promise<GetCallApiResult<TActualData, TActualErrorData, TResultMode>> => {\n\t\tconst { initURL, ...restOfConfig } = config;\n\n\t\tconst [fetchConfig, extraOptions] = splitConfig(restOfConfig);\n\n\t\tconst initCombinedHooks = {} as Required<Interceptors>;\n\n\t\tfor (const key of Object.keys(hooksEnum)) {\n\t\t\tconst combinedHook = combineHooks(\n\t\t\t\tbaseExtraOptions[key as keyof Interceptors],\n\t\t\t\textraOptions[key as keyof Interceptors]\n\t\t\t);\n\n\t\t\tinitCombinedHooks[key as keyof Interceptors] = combinedHook as never;\n\t\t}\n\n\t\t// == Default Extra Options\n\t\tconst defaultExtraOptions = {\n\t\t\tbaseURL: \"\",\n\t\t\tbodySerializer: JSON.stringify,\n\t\t\tdedupeStrategy: \"cancel\",\n\t\t\tdefaultErrorMessage: \"Failed to fetch data from server!\",\n\t\t\tmergedHooksExecutionMode: \"parallel\",\n\t\t\tmergedHooksExecutionOrder: \"mainHooksAfterPlugins\",\n\t\t\tresponseType: \"json\",\n\t\t\tresultMode: \"all\",\n\t\t\tretryAttempts: 0,\n\t\t\tretryDelay: 1000,\n\t\t\tretryMaxDelay: 10000,\n\t\t\tretryMethods: defaultRetryMethods,\n\t\t\tretryStatusCodes: defaultRetryStatusCodes,\n\t\t\tretryStrategy: \"linear\",\n\n\t\t\t...baseExtraOptions,\n\t\t\t...extraOptions,\n\n\t\t\t...initCombinedHooks,\n\t\t} satisfies CombinedCallApiExtraOptions;\n\n\t\tconst body = fetchConfig.body ?? baseFetchConfig.body;\n\n\t\t// == Default Request Options\n\t\tconst defaultRequestOptions = {\n\t\t\tbody: isPlainObject(body) ? defaultExtraOptions.bodySerializer(body) : body,\n\t\t\tmethod: \"GET\",\n\n\t\t\t...baseFetchConfig,\n\t\t\t...fetchConfig,\n\n\t\t\theaders: mergeAndResolveHeaders({\n\t\t\t\tauth: defaultExtraOptions.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: fetchConfig.headers,\n\t\t\t}),\n\n\t\t\tsignal: fetchConfig.signal ?? baseFetchConfig.signal,\n\t\t} satisfies CallApiRequestOptions;\n\n\t\tconst { resolvedHooks, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({\n\t\t\tinitURL,\n\t\t\toptions: defaultExtraOptions,\n\t\t\trequest: defaultRequestOptions,\n\t\t});\n\n\t\tconst fullURL = `${resolvedOptions.baseURL}${mergeUrlWithParamsAndQuery(url, resolvedOptions.params, resolvedOptions.query)}`;\n\n\t\tconst options = {\n\t\t\t...resolvedOptions,\n\t\t\t...resolvedHooks,\n\t\t\tfullURL,\n\t\t\tinitURL,\n\t\t} satisfies CombinedCallApiExtraOptions as typeof defaultExtraOptions & typeof resolvedHooks;\n\n\t\tconst newFetchController = new AbortController();\n\n\t\tconst timeoutSignal = options.timeout != null ? createTimeoutSignal(options.timeout) : null;\n\n\t\tconst combinedSignal = createCombinedSignal(\n\t\t\tresolvedRequestOptions.signal,\n\t\t\ttimeoutSignal,\n\t\t\tnewFetchController.signal\n\t\t);\n\n\t\tconst request = {\n\t\t\t...resolvedRequestOptions,\n\t\t\tsignal: combinedSignal,\n\t\t} satisfies CallApiRequestOptionsForHooks;\n\n\t\tconst {\n\t\t\thandleRequestCancelDedupeStrategy,\n\t\t\thandleRequestDeferDedupeStrategy,\n\t\t\tremoveDedupeKeyFromCache,\n\t\t} = await createDedupeStrategy({ $RequestInfoCache, newFetchController, options, request });\n\n\t\thandleRequestCancelDedupeStrategy();\n\n\t\ttry {\n\t\t\tawait executeHooks(options.onRequest({ options, request }));\n\n\t\t\t// == Apply determined headers again after onRequest incase they were modified\n\t\t\trequest.headers = mergeAndResolveHeaders({\n\t\t\t\tauth: options.auth,\n\t\t\t\tbaseHeaders: baseFetchConfig.headers,\n\t\t\t\tbody,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\n\t\t\tconst response = await handleRequestDeferDedupeStrategy();\n\n\t\t\t// == Also clone response when dedupeStrategy is set to \"defer\", to avoid error thrown from reading response.(whatever) more than once\n\t\t\tconst shouldCloneResponse = options.dedupeStrategy === \"defer\" || options.cloneResponse;\n\n\t\t\tconst { schemas, validators } = createExtensibleSchemasAndValidators(options);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorData = await getResponseData<TErrorData>(\n\t\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\t\toptions.responseType,\n\t\t\t\t\toptions.responseParser,\n\t\t\t\t\tschemas?.errorData,\n\t\t\t\t\tvalidators?.errorData\n\t\t\t\t);\n\n\t\t\t\t// == Push all error handling responsibilities to the catch block if not retrying\n\t\t\t\tthrow new HTTPError({\n\t\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\t\terrorData,\n\t\t\t\t\tresponse,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst successData = await getResponseData<TData>(\n\t\t\t\tshouldCloneResponse ? response.clone() : response,\n\t\t\t\toptions.responseType,\n\t\t\t\toptions.responseParser,\n\t\t\t\tschemas?.data,\n\t\t\t\tvalidators?.data\n\t\t\t);\n\n\t\t\tconst successContext = {\n\t\t\t\tdata: successData as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t\tresponse: options.cloneResponse ? response.clone() : response,\n\t\t\t};\n\n\t\t\tawait executeHooks(\n\t\t\t\toptions.onSuccess(successContext),\n\n\t\t\t\toptions.onResponse({ ...successContext, error: null })\n\t\t\t);\n\n\t\t\treturn await resolveSuccessResult({\n\t\t\t\tdata: successContext.data,\n\t\t\t\tresponse: successContext.response,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\t// == Exhaustive Error handling\n\t\t} catch (error) {\n\t\t\tconst { errorVariantDetails, getErrorResult } = resolveErrorResult({\n\t\t\t\tcloneResponse: options.cloneResponse,\n\t\t\t\tdefaultErrorMessage: options.defaultErrorMessage,\n\t\t\t\terror,\n\t\t\t\tresultMode: options.resultMode,\n\t\t\t});\n\n\t\t\tconst errorContext = {\n\t\t\t\terror: errorVariantDetails.error as never,\n\t\t\t\toptions,\n\t\t\t\trequest,\n\t\t\t};\n\n\t\t\tconst errorContextWithResponse = {\n\t\t\t\t...errorContext,\n\t\t\t\tresponse: errorVariantDetails.response as NonNullable<typeof errorVariantDetails.response>,\n\t\t\t};\n\n\t\t\tconst { getDelay, shouldAttemptRetry } = createRetryStrategy(options, errorContextWithResponse);\n\n\t\t\tconst shouldRetry = !combinedSignal.aborted && (await shouldAttemptRetry());\n\n\t\t\tif (shouldRetry) {\n\t\t\t\tawait executeHooks(options.onRetry(errorContextWithResponse));\n\n\t\t\t\tconst delay = getDelay();\n\n\t\t\t\tawait waitUntil(delay);\n\n\t\t\t\tconst updatedOptions = {\n\t\t\t\t\t...config,\n\t\t\t\t\t\"~retryCount\": (options[\"~retryCount\"] ?? 0) + 1,\n\t\t\t\t} satisfies typeof config;\n\n\t\t\t\treturn await callApi(updatedOptions);\n\t\t\t}\n\n\t\t\tconst shouldThrowOnError = isFunction(options.throwOnError)\n\t\t\t\t? options.throwOnError(errorContextWithResponse)\n\t\t\t\t: options.throwOnError;\n\n\t\t\t// eslint-disable-next-line unicorn/consistent-function-scoping -- False alarm: this function is depends on this scope\n\t\t\tconst handleThrowOnError = () => {\n\t\t\t\tif (!shouldThrowOnError) return;\n\n\t\t\t\t// eslint-disable-next-line ts-eslint/only-throw-error -- It's fine to throw this\n\t\t\t\tthrow errorVariantDetails.error;\n\t\t\t};\n\n\t\t\tif (isHTTPErrorInstance<TErrorData>(error)) {\n\t\t\t\tawait executeHooks(\n\t\t\t\t\toptions.onResponseError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onError(errorContextWithResponse),\n\n\t\t\t\t\toptions.onResponse({ ...errorContextWithResponse, data: null })\n\t\t\t\t);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"AbortError\") {\n\t\t\t\tconst { message, name } = error;\n\n\t\t\t\tconsole.error(`${name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult();\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"TimeoutError\") {\n\t\t\t\tconst message = `Request timed out after ${options.timeout}ms`;\n\n\t\t\t\tconsole.error(`${error.name}:`, message);\n\n\t\t\t\thandleThrowOnError();\n\n\t\t\t\treturn getErrorResult({ message });\n\t\t\t}\n\n\t\t\tawait executeHooks(\n\t\t\t\t// == At this point only the request errors exist, so the request error interceptor is called\n\t\t\t\toptions.onRequestError(errorContext),\n\n\t\t\t\t// == Also call the onError interceptor\n\t\t\t\toptions.onError(errorContextWithResponse)\n\t\t\t);\n\n\t\t\thandleThrowOnError();\n\n\t\t\treturn getErrorResult();\n\n\t\t\t// == Removing the now unneeded AbortController from store\n\t\t} finally {\n\t\t\tremoveDedupeKeyFromCache();\n\t\t}\n\t};\n\n\tcallApi.create = createFetchClient;\n\n\treturn callApi;\n};\n\nexport const callApiWithOptions = createFetchClientWithOptions();\n","import type { ResultModeUnion } from \"@/types\";\nimport type { CallApiConfigWithRequiredURL } from \"./types\";\n\nconst defineOptions = <\n\tTData = unknown,\n\tTErrorData = unknown,\n\tTResultMode extends ResultModeUnion = ResultModeUnion,\n>(\n\tconfig: CallApiConfigWithRequiredURL<TData, TErrorData, TResultMode>\n) => {\n\treturn config;\n};\n\nexport { defineOptions };\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
|
|
1
3
|
type ValueOrFunctionResult<TValue> = TValue | (() => TValue);
|
|
2
4
|
/**
|
|
3
5
|
* Bearer Or Token authentication
|
|
@@ -62,6 +64,72 @@ type CommonRequestHeaders = "Access-Control-Allow-Credentials" | "Access-Control
|
|
|
62
64
|
type CommonAuthorizationHeaders = `${"Basic" | "Bearer" | "Token"} ${string}`;
|
|
63
65
|
type CommonContentTypes = "application/epub+zip" | "application/gzip" | "application/json" | "application/ld+json" | "application/octet-stream" | "application/ogg" | "application/pdf" | "application/rtf" | "application/vnd.ms-fontobject" | "application/wasm" | "application/xhtml+xml" | "application/xml" | "application/zip" | "audio/aac" | "audio/mpeg" | "audio/ogg" | "audio/opus" | "audio/webm" | "audio/x-midi" | "font/otf" | "font/ttf" | "font/woff" | "font/woff2" | "image/avif" | "image/bmp" | "image/gif" | "image/jpeg" | "image/png" | "image/svg+xml" | "image/tiff" | "image/webp" | "image/x-icon" | "model/gltf-binary" | "model/gltf+json" | "text/calendar" | "text/css" | "text/csv" | "text/html" | "text/javascript" | "text/plain" | "video/3gpp" | "video/3gpp2" | "video/av1" | "video/mp2t" | "video/mp4" | "video/mpeg" | "video/ogg" | "video/webm" | "video/x-msvideo" | AnyString;
|
|
64
66
|
|
|
67
|
+
type RetryCondition<TErrorData> = (context: ErrorContext<TErrorData>) => boolean | Promise<boolean>;
|
|
68
|
+
interface RetryOptions<TErrorData> {
|
|
69
|
+
/**
|
|
70
|
+
* Keeps track of the number of times the request has already been retried
|
|
71
|
+
* @deprecated This property is used internally to track retries. Please abstain from modifying it.
|
|
72
|
+
*/
|
|
73
|
+
readonly "~retryCount"?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Number of allowed retry attempts on HTTP errors
|
|
76
|
+
* @default 0
|
|
77
|
+
*/
|
|
78
|
+
retryAttempts?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Callback whose return value determines if a request should be retried or not
|
|
81
|
+
*/
|
|
82
|
+
retryCondition?: RetryCondition<TErrorData>;
|
|
83
|
+
/**
|
|
84
|
+
* Delay between retries in milliseconds
|
|
85
|
+
* @default 1000
|
|
86
|
+
*/
|
|
87
|
+
retryDelay?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Maximum delay in milliseconds. Only applies to exponential strategy
|
|
90
|
+
* @default 10000
|
|
91
|
+
*/
|
|
92
|
+
retryMaxDelay?: number;
|
|
93
|
+
/**
|
|
94
|
+
* HTTP methods that are allowed to retry
|
|
95
|
+
* @default ["GET", "POST"]
|
|
96
|
+
*/
|
|
97
|
+
retryMethods?: Array<"GET" | "POST" | AnyString>;
|
|
98
|
+
/**
|
|
99
|
+
* HTTP status codes that trigger a retry
|
|
100
|
+
* @default [409, 425, 429, 500, 502, 503, 504]
|
|
101
|
+
*/
|
|
102
|
+
retryStatusCodes?: Array<409 | 425 | 429 | 500 | 502 | 503 | 504 | AnyNumber>;
|
|
103
|
+
/**
|
|
104
|
+
* Strategy to use when retrying
|
|
105
|
+
* @default "linear"
|
|
106
|
+
*/
|
|
107
|
+
retryStrategy?: "exponential" | "linear";
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
interface Schemas {
|
|
111
|
+
/**
|
|
112
|
+
* The schema to use for validating the response data.
|
|
113
|
+
*/
|
|
114
|
+
data?: StandardSchemaV1;
|
|
115
|
+
/**
|
|
116
|
+
* The schema to use for validating the response error data.
|
|
117
|
+
*/
|
|
118
|
+
errorData?: StandardSchemaV1;
|
|
119
|
+
}
|
|
120
|
+
interface Validators<TData = unknown, TErrorData = unknown> {
|
|
121
|
+
/**
|
|
122
|
+
* Custom function to validate the response data.
|
|
123
|
+
*/
|
|
124
|
+
data?: (data: unknown) => TData;
|
|
125
|
+
/**
|
|
126
|
+
* Custom function to validate the response error data, stemming from the api.
|
|
127
|
+
* This only runs if the api actually sends back error status codes, else it will be ignored, in which case you should only use the `responseValidator` option.
|
|
128
|
+
*/
|
|
129
|
+
errorData?: (data: unknown) => TErrorData;
|
|
130
|
+
}
|
|
131
|
+
type InferSchemaResult<TSchema extends StandardSchemaV1 | undefined, TData> = TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TSchema> : TData;
|
|
132
|
+
|
|
65
133
|
type ToQueryStringFn = {
|
|
66
134
|
(params: CallApiConfig["query"]): string | null;
|
|
67
135
|
(params: Required<CallApiConfig>["query"]): string;
|
|
@@ -76,6 +144,48 @@ declare const getResponseType: <TResponse>(response: Response, parser?: Required
|
|
|
76
144
|
text: () => Promise<TResponse>;
|
|
77
145
|
};
|
|
78
146
|
|
|
147
|
+
type UnionToIntersection<TUnion> = (TUnion extends unknown ? (param: TUnion) => void : never) extends (param: infer TParam) => void ? TParam : never;
|
|
148
|
+
type InferPluginOptions<TPluginArray extends CallApiPlugin[]> = TPluginArray extends Array<infer TPlugin extends CallApiPlugin> ? TPlugin["createExtraOptions"] extends (...params: never[]) => infer TResult ? UnionToIntersection<TResult> : NonNullable<unknown> : NonNullable<unknown>;
|
|
149
|
+
type PluginInitContext<TMoreOptions = DefaultMoreOptions> = WithMoreOptions<TMoreOptions> & {
|
|
150
|
+
initURL: string;
|
|
151
|
+
options: CombinedCallApiExtraOptions;
|
|
152
|
+
request: CallApiRequestOptionsForHooks;
|
|
153
|
+
};
|
|
154
|
+
type PluginInitResult = Partial<Omit<PluginInitContext, "request"> & {
|
|
155
|
+
request: CallApiRequestOptions;
|
|
156
|
+
}>;
|
|
157
|
+
type CallApiPlugin = {
|
|
158
|
+
/**
|
|
159
|
+
* Defines additional options that can be passed to callApi
|
|
160
|
+
*/
|
|
161
|
+
createExtraOptions?: (...params: never[]) => unknown;
|
|
162
|
+
/**
|
|
163
|
+
* A description for the plugin
|
|
164
|
+
*/
|
|
165
|
+
description?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Hooks / Interceptors for the plugin
|
|
168
|
+
*/
|
|
169
|
+
hooks?: InterceptorsOrInterceptorArray;
|
|
170
|
+
/**
|
|
171
|
+
* A unique id for the plugin
|
|
172
|
+
*/
|
|
173
|
+
id: string;
|
|
174
|
+
/**
|
|
175
|
+
* A function that will be called when the plugin is initialized. This will be called before the any of the other internal functions.
|
|
176
|
+
*/
|
|
177
|
+
init?: (context: PluginInitContext) => Awaitable<PluginInitResult> | Awaitable<void>;
|
|
178
|
+
/**
|
|
179
|
+
* A name for the plugin
|
|
180
|
+
*/
|
|
181
|
+
name: string;
|
|
182
|
+
/**
|
|
183
|
+
* A version for the plugin
|
|
184
|
+
*/
|
|
185
|
+
version?: string;
|
|
186
|
+
};
|
|
187
|
+
declare const definePlugin: <TPlugin extends CallApiPlugin | AnyFunction<CallApiPlugin> = CallApiPlugin>(plugin: TPlugin) => TPlugin;
|
|
188
|
+
|
|
79
189
|
declare const fetchSpecificKeys: ("headers" | "body" | "cache" | "credentials" | "integrity" | "keepalive" | "method" | "mode" | "priority" | "redirect" | "referrer" | "referrerPolicy" | "signal" | "window")[];
|
|
80
190
|
declare const defaultRetryMethods: ("GET" | "POST")[];
|
|
81
191
|
declare const defaultRetryStatusCodes: Required<BaseCallApiConfig>["retryStatusCodes"];
|
|
@@ -94,7 +204,7 @@ interface CallApiRequestOptions extends Pick<RequestInit, FetchSpecificKeysUnion
|
|
|
94
204
|
* HTTP method for the request.
|
|
95
205
|
* @default "GET"
|
|
96
206
|
*/
|
|
97
|
-
method?: "DELETE" | "GET" | "PATCH" | "POST" | "PUT" | AnyString;
|
|
207
|
+
method?: "CONNECT" | "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT" | "TRACE" | AnyString;
|
|
98
208
|
}
|
|
99
209
|
interface CallApiRequestOptionsForHooks extends Omit<CallApiRequestOptions, "headers"> {
|
|
100
210
|
headers?: Record<string, string | undefined>;
|
|
@@ -144,7 +254,7 @@ type FetchImpl = UnmaskType<(input: string | Request | URL, init?: RequestInit)
|
|
|
144
254
|
type Meta = Register extends {
|
|
145
255
|
meta?: infer TMeta extends Record<string, unknown>;
|
|
146
256
|
} ? TMeta : never;
|
|
147
|
-
type ExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
257
|
+
type ExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = DefaultMoreOptions> = {
|
|
148
258
|
/**
|
|
149
259
|
* Authorization header value.
|
|
150
260
|
*/
|
|
@@ -241,11 +351,6 @@ type ExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResult
|
|
|
241
351
|
* Query parameters to append to the URL.
|
|
242
352
|
*/
|
|
243
353
|
query?: Record<string, boolean | number | string>;
|
|
244
|
-
/**
|
|
245
|
-
* Custom function to validate the response error data, stemming from the api.
|
|
246
|
-
* This only runs if the api actually sends back error status codes, else it will be ignored, in which case you should only use the `responseValidator` option.
|
|
247
|
-
*/
|
|
248
|
-
responseErrorValidator?: (data: unknown) => TErrorData;
|
|
249
354
|
/**
|
|
250
355
|
* Custom function to parse the response string into a object.
|
|
251
356
|
*/
|
|
@@ -255,16 +360,13 @@ type ExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResult
|
|
|
255
360
|
* @default "json"
|
|
256
361
|
*/
|
|
257
362
|
responseType?: keyof ReturnType<typeof getResponseType>;
|
|
258
|
-
/**
|
|
259
|
-
* Custom function to validate the response data.
|
|
260
|
-
*/
|
|
261
|
-
responseValidator?: (data: unknown) => TData;
|
|
262
363
|
/**
|
|
263
364
|
* Mode of the result, can influence how results are handled or returned.
|
|
264
365
|
* Can be set to "all" | "onlySuccess" | "onlyError" | "onlyResponse".
|
|
265
366
|
* @default "all"
|
|
266
367
|
*/
|
|
267
368
|
resultMode?: TErrorData extends false ? "onlySuccessWithException" : TResultMode | undefined;
|
|
369
|
+
schemas?: TSchemas;
|
|
268
370
|
/**
|
|
269
371
|
* If true or the function returns true, throws errors instead of returning them
|
|
270
372
|
* The function is passed the error object and can be used to conditionally throw the error
|
|
@@ -275,20 +377,21 @@ type ExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResult
|
|
|
275
377
|
* Request timeout in milliseconds
|
|
276
378
|
*/
|
|
277
379
|
timeout?: number;
|
|
380
|
+
validators?: Validators<TData, TErrorData>;
|
|
278
381
|
} & InterceptorsOrInterceptorArray<TData, TErrorData> & Partial<InferPluginOptions<TPluginArray>> & RetryOptions<TErrorData>;
|
|
279
|
-
declare const optionsEnumToExtendFromBase: "plugins"[];
|
|
280
|
-
type CallApiExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
382
|
+
declare const optionsEnumToExtendFromBase: ("plugins" | "schemas" | "validators")[];
|
|
383
|
+
type CallApiExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = DefaultMoreOptions> = ExtraOptions<TData, TErrorData, TResultMode, TPluginArray, TSchemas> & {
|
|
281
384
|
/**
|
|
282
385
|
* Options that should extend the base options.
|
|
283
386
|
*/
|
|
284
|
-
extend?: Pick<ExtraOptions<TData, TErrorData, TResultMode, TPluginArray>, (typeof optionsEnumToExtendFromBase)[number]>;
|
|
387
|
+
extend?: Pick<ExtraOptions<TData, TErrorData, TResultMode, TPluginArray, TSchemas>, (typeof optionsEnumToExtendFromBase)[number]>;
|
|
285
388
|
};
|
|
286
389
|
declare const optionsEnumToOmitFromBase: ("dedupeKey" | "extend")[];
|
|
287
|
-
type BaseCallApiExtraOptions<TBaseData = DefaultDataType, TBaseErrorData = DefaultDataType, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
288
|
-
type CombinedCallApiExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
289
|
-
type CallApiConfig<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
290
|
-
type BaseCallApiConfig<TBaseData = DefaultDataType, TBaseErrorData = DefaultDataType, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] =
|
|
291
|
-
type CallApiParameters<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] =
|
|
390
|
+
type BaseCallApiExtraOptions<TBaseData = DefaultDataType, TBaseErrorData = DefaultDataType, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = DefaultMoreOptions> = Omit<CallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>, (typeof optionsEnumToOmitFromBase)[number]>;
|
|
391
|
+
type CombinedCallApiExtraOptions<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = DefaultMoreOptions> = BaseCallApiExtraOptions<TData, TErrorData, TResultMode, TPluginArray, TSchemas> & CallApiExtraOptions<TData, TErrorData, TResultMode, TPluginArray, TSchemas>;
|
|
392
|
+
type CallApiConfig<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = DefaultMoreOptions> = CallApiRequestOptions & CallApiExtraOptions<TData, TErrorData, TResultMode, TPluginArray, TSchemas>;
|
|
393
|
+
type BaseCallApiConfig<TBaseData = DefaultDataType, TBaseErrorData = DefaultDataType, TBaseResultMode extends ResultModeUnion = ResultModeUnion, TBasePluginArray extends CallApiPlugin[] = never[], TBaseSchemas extends Schemas = DefaultMoreOptions> = CallApiRequestOptions & BaseCallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TBasePluginArray, TBaseSchemas>;
|
|
394
|
+
type CallApiParameters<TData = DefaultDataType, TErrorData = DefaultDataType, TResultMode extends ResultModeUnion = ResultModeUnion, TPluginArray extends CallApiPlugin[] = never[], TSchemas extends Schemas = DefaultMoreOptions> = [initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TPluginArray, TSchemas>];
|
|
292
395
|
type RequestContext = UnmaskType<{
|
|
293
396
|
options: CombinedCallApiExtraOptions;
|
|
294
397
|
request: CallApiRequestOptionsForHooks;
|
|
@@ -312,7 +415,7 @@ type SuccessContext<TData> = UnmaskType<{
|
|
|
312
415
|
request: CallApiRequestOptionsForHooks;
|
|
313
416
|
response: Response;
|
|
314
417
|
}>;
|
|
315
|
-
type PossibleJavascriptErrorNames = "AbortError" | "Error" | "SyntaxError" | "TimeoutError" | "TypeError" | (`${string}Error` &
|
|
418
|
+
type PossibleJavascriptErrorNames = "AbortError" | "Error" | "SyntaxError" | "TimeoutError" | "TypeError" | (`${string}Error` & DefaultMoreOptions);
|
|
316
419
|
type PossibleJavaScriptError = UnmaskType<{
|
|
317
420
|
errorData: DOMException | Error | SyntaxError | TypeError;
|
|
318
421
|
message: string;
|
|
@@ -371,89 +474,4 @@ type ResultModeUnion = {
|
|
|
371
474
|
}[keyof ResultModeMap] | undefined;
|
|
372
475
|
type GetCallApiResult<TData, TErrorData, TResultMode> = TErrorData extends false ? ResultModeMap<TData, TErrorData>["onlySuccessWithException"] : undefined extends TResultMode ? ResultModeMap<TData, TErrorData>["all"] : TResultMode extends NonNullable<ResultModeUnion> ? ResultModeMap<TData, TErrorData>[TResultMode] : never;
|
|
373
476
|
|
|
374
|
-
type
|
|
375
|
-
interface RetryOptions<TErrorData> {
|
|
376
|
-
/**
|
|
377
|
-
* Keeps track of the number of times the request has already been retried
|
|
378
|
-
* @deprecated This property is used internally to track retries. Please abstain from modifying it.
|
|
379
|
-
*/
|
|
380
|
-
readonly "~retryCount"?: number;
|
|
381
|
-
/**
|
|
382
|
-
* Number of allowed retry attempts on HTTP errors
|
|
383
|
-
* @default 0
|
|
384
|
-
*/
|
|
385
|
-
retryAttempts?: number;
|
|
386
|
-
/**
|
|
387
|
-
* Callback whose return value determines if a request should be retried or not
|
|
388
|
-
*/
|
|
389
|
-
retryCondition?: RetryCondition<TErrorData>;
|
|
390
|
-
/**
|
|
391
|
-
* Delay between retries in milliseconds
|
|
392
|
-
* @default 1000
|
|
393
|
-
*/
|
|
394
|
-
retryDelay?: number;
|
|
395
|
-
/**
|
|
396
|
-
* Maximum delay in milliseconds. Only applies to exponential strategy
|
|
397
|
-
* @default 10000
|
|
398
|
-
*/
|
|
399
|
-
retryMaxDelay?: number;
|
|
400
|
-
/**
|
|
401
|
-
* HTTP methods that are allowed to retry
|
|
402
|
-
* @default ["GET", "POST"]
|
|
403
|
-
*/
|
|
404
|
-
retryMethods?: Array<"GET" | "POST" | AnyString>;
|
|
405
|
-
/**
|
|
406
|
-
* HTTP status codes that trigger a retry
|
|
407
|
-
* @default [409, 425, 429, 500, 502, 503, 504]
|
|
408
|
-
*/
|
|
409
|
-
retryStatusCodes?: Array<409 | 425 | 429 | 500 | 502 | 503 | 504 | AnyNumber>;
|
|
410
|
-
/**
|
|
411
|
-
* Strategy to use when retrying
|
|
412
|
-
* @default "linear"
|
|
413
|
-
*/
|
|
414
|
-
retryStrategy?: "exponential" | "linear";
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
type UnionToIntersection<TUnion> = (TUnion extends unknown ? (param: TUnion) => void : never) extends (param: infer TParam) => void ? TParam : never;
|
|
418
|
-
type InferPluginOptions<TPluginArray extends CallApiPlugin[]> = TPluginArray extends Array<infer TPlugin extends CallApiPlugin> ? TPlugin["createExtraOptions"] extends (...params: never[]) => infer TResult ? UnionToIntersection<TResult> : NonNullable<unknown> : NonNullable<unknown>;
|
|
419
|
-
type PluginInitContext<TMoreOptions = DefaultMoreOptions> = WithMoreOptions<TMoreOptions> & {
|
|
420
|
-
initURL: string;
|
|
421
|
-
options: CombinedCallApiExtraOptions;
|
|
422
|
-
request: CallApiRequestOptionsForHooks;
|
|
423
|
-
};
|
|
424
|
-
type PluginInitResult = Partial<Omit<PluginInitContext, "request"> & {
|
|
425
|
-
request: CallApiRequestOptions;
|
|
426
|
-
}>;
|
|
427
|
-
type CallApiPlugin = {
|
|
428
|
-
/**
|
|
429
|
-
* Defines additional options that can be passed to callApi
|
|
430
|
-
*/
|
|
431
|
-
createExtraOptions?: (...params: never[]) => unknown;
|
|
432
|
-
/**
|
|
433
|
-
* A description for the plugin
|
|
434
|
-
*/
|
|
435
|
-
description?: string;
|
|
436
|
-
/**
|
|
437
|
-
* Hooks / Interceptors for the plugin
|
|
438
|
-
*/
|
|
439
|
-
hooks?: InterceptorsOrInterceptorArray;
|
|
440
|
-
/**
|
|
441
|
-
* A unique id for the plugin
|
|
442
|
-
*/
|
|
443
|
-
id: string;
|
|
444
|
-
/**
|
|
445
|
-
* A function that will be called when the plugin is initialized. This will be called before the any of the other internal functions.
|
|
446
|
-
*/
|
|
447
|
-
init?: (context: PluginInitContext) => Awaitable<PluginInitResult> | Awaitable<void>;
|
|
448
|
-
/**
|
|
449
|
-
* A name for the plugin
|
|
450
|
-
*/
|
|
451
|
-
name: string;
|
|
452
|
-
/**
|
|
453
|
-
* A version for the plugin
|
|
454
|
-
*/
|
|
455
|
-
version?: string;
|
|
456
|
-
};
|
|
457
|
-
declare const definePlugin: <TPlugin extends CallApiPlugin | AnyFunction<CallApiPlugin> = CallApiPlugin>(plugin: TPlugin) => TPlugin;
|
|
458
|
-
|
|
459
|
-
export { type BaseCallApiConfig as B, type CallApiPlugin as C, type DefaultDataType as D, type ErrorContext as E, type GetCallApiResult as G, type Interceptors as I, type PluginInitContext as P, type ResultModeUnion as R, type SuccessContext as S, type CallApiConfig as a, type BaseCallApiExtraOptions as b, type CallApiExtraOptions as c, definePlugin as d, type PossibleJavaScriptError as e, type PossibleHTTPError as f, type CallApiParameters as g, type CallApiRequestOptions as h, type CallApiRequestOptionsForHooks as i, type CallApiResultErrorVariant as j, type CallApiResultSuccessVariant as k, type CombinedCallApiExtraOptions as l, type InterceptorsOrInterceptorArray as m, type PossibleJavascriptErrorNames as n, type Register as o, type RequestContext as p, type RequestErrorContext as q, type ResponseContext as r, type ResponseErrorContext as s, toQueryString as t, defaultRetryMethods as u, defaultRetryStatusCodes as v };
|
|
477
|
+
export { type BaseCallApiConfig as B, type CallApiPlugin as C, type DefaultDataType as D, type ErrorContext as E, type GetCallApiResult as G, type InferSchemaResult as I, type PluginInitContext as P, type ResultModeUnion as R, type Schemas as S, type CallApiConfig as a, type BaseCallApiExtraOptions as b, type CallApiExtraOptions as c, definePlugin as d, type PossibleJavaScriptError as e, type PossibleHTTPError as f, type CallApiParameters as g, type CallApiRequestOptions as h, type CallApiRequestOptionsForHooks as i, type CallApiResultErrorVariant as j, type CallApiResultSuccessVariant as k, type CombinedCallApiExtraOptions as l, type Interceptors as m, type InterceptorsOrInterceptorArray as n, type PossibleJavascriptErrorNames as o, type Register as p, type RequestContext as q, type RequestErrorContext as r, type ResponseContext as s, type ResponseErrorContext as t, type SuccessContext as u, toQueryString as v, defaultRetryMethods as w, defaultRetryStatusCodes as x };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { f as PossibleHTTPError, e as PossibleJavaScriptError } from '../
|
|
2
|
-
export {
|
|
1
|
+
import { f as PossibleHTTPError, e as PossibleJavaScriptError } from '../types-CNYLI9wS.js';
|
|
2
|
+
export { w as defaultRetryMethods, x as defaultRetryStatusCodes, v as toQueryString } from '../types-CNYLI9wS.js';
|
|
3
3
|
import { H as HTTPError } from '../error-lBRMiMeF.js';
|
|
4
|
+
import '@standard-schema/spec';
|
|
4
5
|
|
|
5
6
|
type ErrorObjectUnion<TErrorData = unknown> = PossibleHTTPError<TErrorData> | PossibleJavaScriptError;
|
|
6
7
|
declare const isHTTPError: <TErrorData>(error: ErrorObjectUnion<TErrorData> | null) => error is PossibleHTTPError<TErrorData>;
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{defaultRetryMethods,defaultRetryStatusCodes,isHTTPError,isHTTPErrorInstance,toQueryString}from"../chunk-
|
|
1
|
+
export{defaultRetryMethods,defaultRetryStatusCodes,isHTTPError,isHTTPErrorInstance,toQueryString}from"../chunk-KABMV5OF.js";//# sourceMappingURL=index.js.map
|