{"version":3,"sources":["../src/index.ts","../src/response-error.ts","../src/validation-error.ts","../src/utils.ts","../src/fallback-options.ts","../src/stream.ts","../src/up.ts"],"sourcesContent":["export type { StandardSchemaV1 } from '@standard-schema/spec'\nexport { isResponseError, ResponseError } from './response-error'\nexport type {\n   DefaultOptions,\n   FetcherOptions,\n   GetDefaultParsedData,\n   GetDefaultRawBody,\n   RetryOptions,\n   UpFetch,\n} from './types'\nexport { up } from './up'\nexport { isJsonifiable } from './utils'\n\nimport {\n   isResponseValidationError,\n   ResponseValidationError,\n} from './validation-error'\n\n/**\n * @deprecated Use `ResponseValidationError` instead.\n */\nconst ValidationError = ResponseValidationError\n/**\n * @deprecated Use `isResponseValidationError` instead.\n */\nconst isValidationError = isResponseValidationError\n\nexport {\n   ValidationError,\n   isValidationError,\n   isResponseValidationError,\n   ResponseValidationError,\n}\n","export class ResponseError<TData = any> extends Error {\n   data: TData\n   status: number\n   kind: 'response'\n\n   constructor(props: { message: string; status: number; data: TData }) {\n      super(props.message)\n      this.kind = 'response'\n      this.data = props.data\n      this.status = props.status\n   }\n}\n\nexport const isResponseError = <TData = any>(\n   error: unknown,\n): error is ResponseError<TData> => error instanceof ResponseError\n","import type { StandardSchemaV1 } from '@standard-schema/spec'\n\nexport class ResponseValidationError<TData = any> extends Error {\n   issues: readonly StandardSchemaV1.Issue[]\n   kind: 'validation'\n   data: TData\n\n   constructor(result: StandardSchemaV1.FailureResult, data: TData) {\n      super(JSON.stringify(result.issues))\n      this.kind = 'validation'\n      this.issues = result.issues\n      this.data = data\n   }\n}\n\nexport const isResponseValidationError = (\n   error: unknown,\n): error is ResponseValidationError => error instanceof ResponseValidationError\n","import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport type {\n   DistributiveOmit,\n   HeadersObject,\n   JsonifiableArray,\n   JsonifiableObject,\n   KeyOf,\n   Params,\n   SerializeParams,\n} from './types'\nimport { ResponseValidationError } from './validation-error'\n\nexport const mergeHeaders = (\n   headerInits: (HeadersInit | HeadersObject | undefined)[],\n) => {\n   const res: Record<string, string> = {}\n   headerInits.forEach((init) => {\n      // casting `init` to `HeadersInit` because `Record<string, any>` is\n      // properly transformed to `Record<string,string>` by `new Headers(init)`\n      new Headers(init as HeadersInit | undefined).forEach((value, key) => {\n         value === 'null' || value === 'undefined'\n            ? delete res[key]\n            : (res[key] = value)\n      })\n   })\n   return res\n}\n\nexport const withTimeout = (\n   signal: AbortSignal | undefined,\n   timeout: number | undefined,\n): AbortSignal | undefined =>\n   // if AbortSignal.any is not supported\n   // AbortSignal.timeout is not supported either.\n   // Feature detection is fine on AbortSignal.any only\n   'any' in AbortSignal\n      ? AbortSignal.any(\n           [signal, timeout && AbortSignal.timeout(timeout)].filter(\n              Boolean,\n           ) as AbortSignal[],\n        )\n      : signal\n\nexport const omit = <O extends object, K extends KeyOf<O> | (string & {})>(\n   obj?: O,\n   keys: K[] | readonly K[] = [],\n): DistributiveOmit<O, K> => {\n   const copy = { ...obj } as DistributiveOmit<O, K>\n   for (const key in copy) {\n      keys.includes(key as any) && delete copy[key]\n   }\n   return copy\n}\n\nexport const isJsonifiable = (\n   value: any,\n): value is JsonifiableObject | JsonifiableArray =>\n   isPlainObject(value) ||\n   Array.isArray(value) ||\n   typeof value?.toJSON === 'function'\n\nconst isPlainObject = (value: any): value is Record<string, any> =>\n   value && typeof value === 'object' && value.constructor?.name === 'Object'\n\nexport const resolveUrl = (\n   base: string | undefined = '',\n   input: URL | string,\n   defaultOptsParams: Params | undefined,\n   fetcherOptsParams: Params | undefined,\n   serializeParams: SerializeParams,\n): string => {\n   input = (input as URL).href ?? input\n   const qs = serializeParams({\n      // Removing the 'url.searchParams.keys()' from the defaultParams\n      // but not from the 'fetcherParams'. The user is responsible for not\n      // specifying the params in both the \"input\" and the fetcher \"params\" option.\n      ...omit(defaultOptsParams, [\n         ...new URL(input, 'http://a').searchParams.keys(),\n      ]),\n      ...fetcherOptsParams,\n   })\n\n   let url: string = /^https?:\\/\\//.test(input)\n      ? input\n      : !base || !input\n        ? base + input\n        : base.replace(/\\/$/, '') + '/' + input.replace(/^\\//, '')\n\n   if (qs) {\n      url += (url.includes('?') ? '&' : '?') + qs.replace(/^\\?/, '')\n   }\n   return url\n}\n\nexport const abortableDelay = (delay: number, signal?: AbortSignal) =>\n   new Promise<void>((resolve, reject) => {\n      signal?.addEventListener('abort', handleAbort, { once: true })\n\n      const token = setTimeout(() => {\n         signal?.removeEventListener('abort', handleAbort)\n         resolve()\n      }, delay)\n\n      function handleAbort() {\n         clearTimeout(token)\n         reject(signal!.reason)\n      }\n   })\n\nexport async function validate<TSchema extends StandardSchemaV1>(\n   schema: TSchema,\n   data: StandardSchemaV1.InferInput<TSchema>,\n): Promise<StandardSchemaV1.InferOutput<TSchema>> {\n   const result = await schema['~standard'].validate(data)\n   if (result.issues) throw new ResponseValidationError(result, data)\n   return result.value\n}\n","import { ResponseError } from './response-error'\nimport type { FallbackOptions } from './types'\nimport { isJsonifiable } from './utils'\n\nexport const fallbackOptions: FallbackOptions = {\n   parseResponse: (res) =>\n      res\n         .clone()\n         .json()\n         .catch(() => res.text())\n         .then((data) => data || null),\n\n   parseRejected: async (response, request) =>\n      new ResponseError({\n         message: `[${response.status}] ${response.statusText}`,\n         status: response.status,\n         data: await fallbackOptions.parseResponse(response, request),\n      }),\n\n   // TODO: find a lighter way to do this with about the same amount of code\n   serializeParams: (params) =>\n      // JSON.parse(JSON.stringify(params)) recursively transforms Dates to ISO strings and strips undefined\n      new URLSearchParams(\n         JSON.parse(JSON.stringify(params)) as Record<string, string>,\n      ).toString(),\n\n   serializeBody: (body: any) =>\n      isJsonifiable(body) ? JSON.stringify(body) : body,\n\n   reject: (response) => !response.ok,\n\n   retry: {\n      when: (ctx) => ctx.response?.ok === false,\n      attempts: 0,\n      delay: 0,\n   },\n}\n","import type {\n   MaybePromise,\n   RequestStreamingEvent,\n   ResponseStreamingEvent,\n} from './types'\n\n/**\n * Safari does not support for await...of iteration on response/request bodies,\n * so we use the ReadableStream reader API directly\n */\n\nconst isWebkit =\n   typeof window !== 'undefined' &&\n   /AppleWebKit/i.test(navigator.userAgent) &&\n   !/Chrome/i.test(navigator.userAgent)\n\ntype StreamingEvent<R extends Request | Response> = R extends Request\n   ? RequestStreamingEvent\n   : R extends Response\n     ? ResponseStreamingEvent\n     : never\n\nexport async function toStreamable<R extends Request | Response>(\n   reqOrRes: R,\n   onChunk?: (event: StreamingEvent<R>, reqOrRes: R) => MaybePromise<void>,\n): Promise<R> {\n   const isResponse = 'ok' in reqOrRes\n   const isNotSupported = isWebkit && !isResponse\n   // clone reqOrRes here to support IOS & Safari 14, otherwise support 15+\n   if (isNotSupported || !onChunk || !reqOrRes.clone().body) return reqOrRes\n   const contentLength = reqOrRes.headers.get('content-length')\n   let totalBytes = contentLength ? +contentLength : undefined\n   // For the Request, when no \"Content-Length\" header is present, we read the total bytes from the request\n   if (!isResponse && !contentLength) {\n      totalBytes = (await reqOrRes.clone().arrayBuffer()).byteLength\n   }\n\n   let transferredBytes = 0\n   await onChunk(\n      {\n         totalBytes,\n         transferredBytes,\n         chunk: new Uint8Array(),\n      } as StreamingEvent<R>,\n      reqOrRes,\n   )\n\n   const stream = new ReadableStream({\n      async start(controller) {\n         const reader = reqOrRes.body!.getReader()\n         while (true) {\n            const { value, done } = await reader.read()\n            if (done) break\n            transferredBytes += value.byteLength\n            await onChunk(\n               {\n                  totalBytes,\n                  transferredBytes,\n                  chunk: value,\n               } as StreamingEvent<R>,\n               reqOrRes,\n            )\n            controller.enqueue(value)\n         }\n         controller.close()\n      },\n   })\n\n   return isResponse\n      ? (new Response(stream, reqOrRes) as R)\n      : // @ts-expect-error outdated ts types\n        (new Request(reqOrRes, { body: stream, duplex: 'half' }) as R)\n}\n","import { fallbackOptions } from './fallback-options'\nimport { toStreamable } from './stream'\nimport type {\n   DefaultOptions,\n   DefaultRawBody,\n   FetcherOptions,\n   MaybePromise,\n   MinFetchFn,\n   UpFetch,\n} from './types'\nimport {\n   abortableDelay,\n   isJsonifiable,\n   mergeHeaders,\n   omit,\n   resolveUrl,\n   validate,\n   withTimeout,\n} from './utils'\n\nconst emptyOptions = {} as any\n\nexport const up =\n   <\n      const TFetchFn extends MinFetchFn,\n      const TDefaultOptions extends DefaultOptions<\n         TFetchFn,\n         any,\n         any\n      > = DefaultOptions<TFetchFn, any, DefaultRawBody>,\n   >(\n      fetchFn: TFetchFn,\n      getDefaultOptions: (\n         input: Parameters<TFetchFn>[0],\n         fetcherOpts: FetcherOptions<TFetchFn, any, any, any>,\n         ctx?: Parameters<TFetchFn>[2],\n      ) => MaybePromise<TDefaultOptions> = () => emptyOptions,\n   ): UpFetch<TFetchFn, TDefaultOptions> =>\n   async (input, fetcherOpts = emptyOptions, ctx) => {\n      const defaultOpts = await getDefaultOptions(input, fetcherOpts, ctx)\n\n      const options = {\n         ...fallbackOptions,\n         ...defaultOpts,\n         ...fetcherOpts,\n         ...(emptyOptions as { body: BodyInit | null | undefined }),\n         retry: {\n            ...fallbackOptions.retry,\n            ...defaultOpts.retry,\n            ...fetcherOpts.retry,\n         },\n      }\n\n      options.body =\n         fetcherOpts.body === null || fetcherOpts.body === undefined\n            ? (fetcherOpts.body as null | undefined)\n            : options.serializeBody(fetcherOpts.body)\n\n      options.headers = mergeHeaders([\n         isJsonifiable(fetcherOpts.body) && typeof options.body === 'string'\n            ? { 'content-type': 'application/json' }\n            : {},\n         defaultOpts.headers,\n         fetcherOpts.headers,\n      ])\n\n      let attempt = 0\n      let request: Request\n      let response: Response | undefined\n      let error: unknown\n\n      do {\n         // per-try timeout\n         options.signal = withTimeout(fetcherOpts.signal, options.timeout)\n\n         request = await toStreamable(\n            new Request(\n               input.url\n                  ? input // Request\n                  : resolveUrl(\n                       options.baseUrl,\n                       input as unknown as string | URL,\n                       defaultOpts.params,\n                       fetcherOpts.params,\n                       options.serializeParams,\n                    ),\n               options as any,\n            ),\n            fetcherOpts.onRequestStreaming,\n         )\n\n         try {\n            // https://github.com/L-Blondy/up-fetch/issues/67\n            await defaultOpts.onRequest?.(request)\n            await fetcherOpts.onRequest?.(request)\n\n            response = await toStreamable(\n               await fetchFn(\n                  request,\n                  // do not override the request body & patch headers again\n                  { ...omit(options, ['body']), headers: request.headers },\n                  ctx,\n               ),\n               fetcherOpts.onResponseStreaming,\n            )\n            error = undefined\n         } catch (e: any) {\n            error = e\n            // continue to retry\n         }\n\n         try {\n            if (\n               !(await options.retry.when({ request, response, error })) ||\n               ++attempt >\n                  (typeof options.retry.attempts === 'function'\n                     ? await options.retry.attempts({ request })\n                     : options.retry.attempts)\n            )\n               break\n\n            const retryCtx = { attempt, request, response, error }\n            await abortableDelay(\n               typeof options.retry.delay === 'function'\n                  ? await options.retry.delay(retryCtx)\n                  : options.retry.delay,\n               options.signal,\n            )\n            await defaultOpts.onRetry?.(retryCtx)\n            await fetcherOpts.onRetry?.(retryCtx)\n         } catch (e: any) {\n            error = e\n            break // no retry\n         }\n         // biome-ignore lint/correctness/noConstantCondition: false\n      } while (true)\n\n      try {\n         if (error) throw error\n         await defaultOpts.onResponse?.(response!, request)\n         await fetcherOpts.onResponse?.(response!, request)\n\n         if (await options.reject(response!)) {\n            throw await options.parseRejected(response!, request)\n         }\n         const parsed = await options.parseResponse(response!, request)\n         const data = options.schema\n            ? await validate(options.schema, parsed)\n            : parsed\n         await defaultOpts.onSuccess?.(data, request)\n         await fetcherOpts.onSuccess?.(data, request)\n         return data\n      } catch (error: any) {\n         await defaultOpts.onError?.(error, request)\n         await fetcherOpts.onError?.(error, request)\n         throw error\n      }\n   }\n"],"mappings":"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","names":["error"]}