tanstack-fetch 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/auth.ts","../src/plugins/status.ts","../src/plugins/config-interceptors.ts","../src/constants.ts","../src/plugins/retry-idempotent.ts","../src/plugins/sse-resume.ts","../src/plugins/ssr-forward.ts","../src/plugins/trace.ts","../src/plugins/index.ts","../src/fetch-error.ts","../src/interceptors/run-interceptors.ts","../src/utils/parse-body.ts","../src/utils/result.ts","../src/request-execute.ts","../src/utils/build-url.ts","../src/utils/headers.ts","../src/utils/signals.ts","../src/request.ts","../src/sse-parse.ts","../src/sse-context.ts","../src/sse-iterator.ts","../src/sse.ts","../src/sse-listen.ts","../src/create-fetch.ts","../src/react/fetch-provider.hook.ts","../src/react/fetch-provider.tsx","../src/react/use-sse.hook.ts"],"names":["resolveIncoming","createContext","useRef","useContext","createElement","useState","useEffect"],"mappings":"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","file":"react.cjs","sourcesContent":["import type { AuthConfig, HttpInterceptor } from '../types'\n\nconst createAuthInterceptor = (auth: AuthConfig): HttpInterceptor => ({\n name: 'auth',\n order: 15,\n onRequest: async (context) => {\n const token = await auth.getToken()\n if (!token) {\n return { action: 'continue', context }\n }\n const header = auth.header ?? 'authorization'\n const scheme = auth.scheme === undefined ? 'Bearer' : auth.scheme\n const value = scheme ? `${scheme} ${token}` : token\n context.request.headers.set(header, value)\n return { action: 'continue', context }\n },\n})\n\nexport { createAuthInterceptor }\n","import type { HttpInterceptor, StatusHandler, StatusHandlers } from '../types'\n\nconst resolveStatusHandler = (\n status: number,\n handlers: StatusHandlers,\n): StatusHandler | undefined => {\n const exact = handlers[status]\n if (exact) {\n return exact\n }\n if (status >= 500 && status < 600 && handlers['5xx']) {\n return handlers['5xx']\n }\n if (status >= 400 && status < 500 && handlers['4xx']) {\n return handlers['4xx']\n }\n return handlers.default\n}\n\nconst createStatusInterceptor = (handlers: StatusHandlers): HttpInterceptor => ({\n name: 'on-status',\n order: 95,\n onResponseError: async (context) => {\n const status = context.error?.status ?? context.response?.status\n if (status === undefined || !context.error) {\n return { action: 'continue', context }\n }\n const handler = resolveStatusHandler(status, handlers)\n if (!handler) {\n return { action: 'continue', context }\n }\n const decision = await handler({ status, error: context.error, context })\n if (decision?.action === 'retry') {\n return { action: 'retry', delayMs: decision.delayMs }\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createStatusInterceptor, resolveStatusHandler }\n","import type {\n AuthConfig,\n CreateFetchOptions,\n HttpInterceptor,\n StatusHandler,\n StatusHandlers,\n} from '../types'\nimport { createAuthInterceptor } from './auth'\nimport { createStatusInterceptor } from './status'\n\nconst mergeStatusHandlers = (options: CreateFetchOptions): StatusHandlers | undefined => {\n const handlers: StatusHandlers = { ...(options.onStatus ?? {}) }\n\n if (options.onUnauthorized && handlers[401] === undefined) {\n handlers[401] = options.onUnauthorized\n }\n if (options.onForbidden && handlers[403] === undefined) {\n handlers[403] = options.onForbidden\n }\n if (options.onNotFound && handlers[404] === undefined) {\n handlers[404] = options.onNotFound\n }\n if (options.onServerError && handlers['5xx'] === undefined && handlers[500] === undefined) {\n handlers['5xx'] = options.onServerError\n }\n\n const hasHandler = Object.entries(handlers).some(([, handler]) => Boolean(handler))\n return hasHandler ? handlers : undefined\n}\n\nconst resolveAuthConfig = (options: CreateFetchOptions): AuthConfig | undefined => {\n if (options.auth) {\n return options.auth\n }\n if (options.getToken) {\n return { getToken: options.getToken }\n }\n return undefined\n}\n\nconst createConfigInterceptors = (options: CreateFetchOptions): HttpInterceptor[] => {\n const interceptors: HttpInterceptor[] = []\n const auth = resolveAuthConfig(options)\n if (auth) {\n interceptors.push(createAuthInterceptor(auth))\n }\n const statusHandlers = mergeStatusHandlers(options)\n if (statusHandlers) {\n interceptors.push(createStatusInterceptor(statusHandlers))\n }\n return interceptors\n}\n\nexport { createConfigInterceptors, mergeStatusHandlers, resolveAuthConfig }\nexport type { StatusHandler }\n","const DEFAULT_TIMEOUT_MS = 30_000\nconst DEFAULT_MAX_RETRIES = 2\nconst DEFAULT_INTERCEPTOR_ORDER = 100\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS'])\nconst RETRY_STATUSES = new Set([502, 503, 504])\n\nexport {\n DEFAULT_TIMEOUT_MS,\n DEFAULT_MAX_RETRIES,\n DEFAULT_INTERCEPTOR_ORDER,\n IDEMPOTENT_METHODS,\n RETRY_STATUSES,\n}\n","import { IDEMPOTENT_METHODS, RETRY_STATUSES } from '../constants'\nimport type { HttpInterceptor } from '../types'\n\nconst createRetryIdempotentInterceptor = (): HttpInterceptor => ({\n name: 'retry-idempotent',\n order: 80,\n onResponseError: (context) => {\n const canRetry =\n IDEMPOTENT_METHODS.has(context.request.method) &&\n context.meta.attempt < context.meta.maxRetries &&\n Boolean(context.error && RETRY_STATUSES.has(context.error.status))\n if (!canRetry) {\n return { action: 'continue', context }\n }\n return { action: 'retry', delayMs: 200 * (context.meta.attempt + 1) }\n },\n})\n\nexport { createRetryIdempotentInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createSseResumeInterceptor = (): HttpInterceptor => ({\n name: 'sse-resume',\n order: 20,\n onSseEvent: (context) => {\n if (context.event.event === 'ping' || context.event.event === 'heartbeat') {\n return { action: 'drop' }\n }\n return { action: 'continue', context }\n },\n onSseReconnect: (context) => {\n if (context.meta.lastEventId) {\n context.request.headers.set('last-event-id', context.meta.lastEventId)\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createSseResumeInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createSsrForwardInterceptor = (): HttpInterceptor => ({\n name: 'ssr-forward',\n order: 10,\n onRequest: (context) => {\n if (context.meta.source === 'browser') {\n return { action: 'skip' }\n }\n if (context.incoming?.cookie) {\n context.request.headers.set('cookie', context.incoming.cookie)\n }\n if (context.incoming?.authorization) {\n context.request.headers.set('authorization', context.incoming.authorization)\n }\n if (context.incoming?.requestId) {\n context.request.headers.set('x-request-id', context.incoming.requestId)\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createSsrForwardInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createTraceInterceptor = (): HttpInterceptor => ({\n name: 'trace',\n order: 0,\n onRequest: (context) => {\n const requestId = context.incoming?.requestId ?? globalThis.crypto.randomUUID()\n context.request.headers.set('x-request-id', requestId)\n context.meta.requestId = requestId\n return { action: 'continue', context }\n },\n})\n\nexport { createTraceInterceptor }\n","import type { AuthConfig, HttpInterceptor, StatusHandlers } from '../types'\nimport { createAuthInterceptor } from './auth'\nimport { createRetryIdempotentInterceptor } from './retry-idempotent'\nimport { createSseResumeInterceptor } from './sse-resume'\nimport { createSsrForwardInterceptor } from './ssr-forward'\nimport { createStatusInterceptor } from './status'\nimport { createTraceInterceptor } from './trace'\nimport type { PluginName } from '../types'\n\nconst pluginFactories: Record<PluginName, () => HttpInterceptor> = {\n trace: createTraceInterceptor,\n 'ssr-forward': createSsrForwardInterceptor,\n 'retry-idempotent': createRetryIdempotentInterceptor,\n 'sse-resume': createSseResumeInterceptor,\n}\n\nexport {\n pluginFactories,\n createAuthInterceptor,\n createStatusInterceptor,\n createRetryIdempotentInterceptor,\n createSseResumeInterceptor,\n createSsrForwardInterceptor,\n createTraceInterceptor,\n}\nexport type { AuthConfig, StatusHandlers }\n","import type { FetchErrorInfo, FetchResult } from './types'\n\ntype FetchError = Error & {\n readonly name: 'FetchError'\n readonly status: number\n readonly code: string\n readonly body: unknown\n readonly headers: Headers\n readonly result: FetchResult<never, FetchErrorInfo>\n}\n\nconst createFetchError = (result: FetchResult<never, FetchErrorInfo>): FetchError => {\n const info: FetchErrorInfo = result.ok\n ? {\n status: result.status,\n code: 'UNKNOWN',\n message: 'Request failed',\n body: result.data,\n }\n : result.error\n\n const error = new Error(info.message) as FetchError\n Object.defineProperties(error, {\n name: { value: 'FetchError' },\n status: { value: info.status },\n code: { value: info.code },\n body: { value: info.body },\n headers: { value: result.headers },\n result: {\n value: result.ok\n ? { ok: false, status: info.status, error: info, headers: result.headers }\n : result,\n },\n })\n return error\n}\n\nconst isFetchError = (error: unknown): error is FetchError =>\n Boolean(\n error &&\n typeof error === 'object' &&\n (error as Error).name === 'FetchError' &&\n 'status' in error &&\n 'code' in error,\n )\n\nconst isAbortError = (error: unknown): boolean =>\n (error instanceof DOMException && error.name === 'AbortError') ||\n (error instanceof Error && error.name === 'AbortError')\n\nexport { createFetchError, isFetchError, isAbortError }\nexport type { FetchError }\n","import { DEFAULT_INTERCEPTOR_ORDER } from '../constants'\nimport type { HttpInterceptor, FetchResult, InterceptorHandler, RequestContext } from '../types'\n\ntype HookOutcome<T> =\n | { type: 'continue'; context: T }\n | { type: 'drop' }\n | { type: 'retry'; delayMs?: number }\n | { type: 'short-circuit'; result: FetchResult<unknown, unknown> }\n\nconst matchesInterceptor = (interceptor: HttpInterceptor, context: RequestContext) => {\n const match = interceptor.match\n if (!match) {\n return true\n }\n if (match.operation && match.operation !== context.meta.operation) {\n return false\n }\n if (match.method && match.method !== context.request.method) {\n return false\n }\n if (match.pathPrefix && !context.request.url.pathname.startsWith(match.pathPrefix)) {\n return false\n }\n if (match.status !== undefined && context.response?.status !== match.status) {\n return false\n }\n return true\n}\n\nconst resolveInterceptors = (\n clientInterceptors: HttpInterceptor[],\n extras?: { use?: HttpInterceptor[]; eject?: string[] },\n) => {\n const ejected = new Set(extras?.eject ?? [])\n const merged = [...clientInterceptors, ...(extras?.use ?? [])].filter(\n (item) => !ejected.has(item.name),\n )\n return merged.sort(\n (left, right) =>\n (left.order ?? DEFAULT_INTERCEPTOR_ORDER) - (right.order ?? DEFAULT_INTERCEPTOR_ORDER),\n )\n}\n\nconst runHook = async <T extends RequestContext>(\n interceptors: HttpInterceptor[],\n getHandler: (item: HttpInterceptor) => InterceptorHandler<T> | undefined,\n context: T,\n): Promise<HookOutcome<T>> => {\n let current = context\n for (const interceptor of interceptors) {\n if (!matchesInterceptor(interceptor, current)) {\n continue\n }\n const handler = getHandler(interceptor)\n if (!handler) {\n continue\n }\n const decision = (await handler(current)) ?? { action: 'continue', context: current }\n if (decision.action === 'skip') {\n continue\n }\n if (decision.action === 'drop') {\n return { type: 'drop' }\n }\n if (decision.action === 'retry') {\n return { type: 'retry', delayMs: decision.delayMs }\n }\n if (decision.action === 'short-circuit') {\n return { type: 'short-circuit', result: decision.result }\n }\n current = (decision.context ?? current) as T\n }\n return { type: 'continue', context: current }\n}\n\nexport { resolveInterceptors, runHook }\nexport type { HookOutcome }\n","const isJsonContentType = (contentType: string | null) =>\n Boolean(contentType && contentType.includes('json'))\n\nconst parseBody = async (response: Response, parseAs?: 'json' | 'text' | 'blob') => {\n if (response.status === 204) {\n return null\n }\n\n if (parseAs === 'blob') {\n return response.blob()\n }\n\n if (parseAs === 'text') {\n return response.text()\n }\n\n const contentType = response.headers.get('content-type')\n if (parseAs === 'json' || isJsonContentType(contentType)) {\n const text = await response.text()\n if (!text) {\n return null\n }\n return JSON.parse(text) as unknown\n }\n\n return response.text()\n}\n\nconst encodeBody = (body: unknown, headers: Headers) => {\n if (body === undefined || body === null) {\n return undefined\n }\n if (\n typeof body === 'string' ||\n body instanceof FormData ||\n body instanceof Blob ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer\n ) {\n return body\n }\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json')\n }\n return JSON.stringify(body)\n}\n\nexport { parseBody, encodeBody, isJsonContentType }\n","import { createFetchError } from '../fetch-error'\nimport type { FetchErrorInfo, FetchResult } from '../types'\n\nconst toFetchErrorInfo = (status: number, body: unknown): FetchErrorInfo => {\n const record = body && typeof body === 'object' ? (body as Record<string, unknown>) : undefined\n const code = typeof record?.code === 'string' ? record.code : 'HTTP_ERROR'\n const message =\n typeof record?.message === 'string' ? record.message : `Request failed with status ${status}`\n\n return { status, code, message, body }\n}\n\nconst toOkResult = <T>(status: number, data: T, headers: Headers): FetchResult<T, never> => ({\n ok: true,\n status,\n data,\n headers,\n})\n\nconst toErrResult = <E>(status: number, error: E, headers: Headers): FetchResult<never, E> => ({\n ok: false,\n status,\n error,\n headers,\n})\n\nconst unwrap = <T>(result: FetchResult<T, FetchErrorInfo>): T => {\n if (result.ok) {\n return result.data\n }\n throw createFetchError(result)\n}\n\nconst unwrapAsync = async <T>(promise: Promise<FetchResult<T, FetchErrorInfo>>): Promise<T> =>\n unwrap(await promise)\n\n/** @deprecated Use toFetchErrorInfo */\nconst toHttpError = toFetchErrorInfo\n\nexport { toFetchErrorInfo, toHttpError, toOkResult, toErrResult, unwrap, unwrapAsync }\n","import type { CreateFetchOptions, HttpInterceptor, RequestContext } from './types'\nimport { encodeBody, parseBody } from './utils/parse-body'\nimport { toErrResult, toFetchErrorInfo, toOkResult } from './utils/result'\nimport { runHook } from './interceptors/run-interceptors'\nimport { createFetchError, isAbortError } from './fetch-error'\nimport type { FetchResult, RequestOptions } from './types'\n\ntype AttemptOutcome<T, E> =\n { kind: 'result'; result: FetchResult<T, E> } | { kind: 'retry'; delayMs?: number }\n\ntype ExecuteArgs = {\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n fetchImpl: typeof fetch\n context: RequestContext\n}\n\nconst executeFetch = async <T, E>(input: ExecuteArgs): Promise<AttemptOutcome<T, E>> => {\n const { context, interceptors, fetchImpl, client, requestOptions } = input\n try {\n const response = await fetchImpl(context.request.url, {\n method: context.request.method,\n headers: context.request.headers,\n body: encodeBody(context.request.body, context.request.headers),\n signal: context.request.signal,\n credentials: client.credentials,\n })\n return handleResponse<T, E>({ interceptors, context, response, requestOptions })\n } catch (error) {\n if (isAbortError(error)) {\n throw error\n }\n context.error = toFetchErrorInfo(0, {\n code: 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : 'Network error',\n })\n const failed = await runHook(interceptors, (item) => item.onRequestError, context)\n if (failed.type === 'retry') {\n return { kind: 'retry', delayMs: failed.delayMs }\n }\n if (failed.type === 'short-circuit') {\n return { kind: 'result', result: failed.result as FetchResult<T, E> }\n }\n throw createFetchError(\n toErrResult(0, context.error, new Headers()) as FetchResult<never, typeof context.error>,\n )\n }\n}\n\nconst handleResponse = async <T, E>(input: {\n interceptors: HttpInterceptor[]\n context: RequestContext\n response: Response\n requestOptions?: RequestOptions\n}): Promise<AttemptOutcome<T, E>> => {\n const { interceptors, response, requestOptions } = input\n const context = {\n ...input.context,\n response,\n data: await parseBody(response, requestOptions?.parseAs),\n }\n const hook = response.ok\n ? (item: HttpInterceptor) => item.onResponse\n : (item: HttpInterceptor) => item.onResponseError\n if (!response.ok) {\n context.error = toFetchErrorInfo(response.status, context.data)\n }\n const after = await runHook(interceptors, hook, context)\n if (after.type === 'retry') {\n return { kind: 'retry', delayMs: after.delayMs }\n }\n if (after.type === 'short-circuit') {\n return { kind: 'result', result: after.result as FetchResult<T, E> }\n }\n const nextContext = after.type === 'continue' ? after.context : context\n const result = response.ok\n ? toOkResult(response.status, nextContext.data as T, response.headers)\n : toErrResult(\n response.status,\n (nextContext.error ?? toFetchErrorInfo(response.status, nextContext.data)) as E,\n response.headers,\n )\n return { kind: 'result', result }\n}\n\nexport { executeFetch }\nexport type { AttemptOutcome }\n","import type { PathParams, QueryParams } from '../types'\n\nconst fillPath = (path: string, params?: PathParams) => {\n return path.replace(/:([A-Za-z0-9_]+)/g, (_match, key: string) => {\n const value = params?.[key]\n if (value === undefined) {\n throw new Error(`tanstack-fetch: missing path param \"${key}\"`)\n }\n return encodeURIComponent(String(value))\n })\n}\n\nconst appendQuery = (url: URL, query?: QueryParams) => {\n if (!query) {\n return\n }\n\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return\n }\n url.searchParams.set(key, String(value))\n })\n}\n\nconst assertAbsoluteUrl = (baseUrl: string | undefined, source: string | undefined) => {\n if (source === 'browser' || !baseUrl) {\n return\n }\n\n if (!/^https?:\\/\\//i.test(baseUrl)) {\n throw new Error('tanstack-fetch: set an absolute baseUrl for SSR and Edge runtimes')\n }\n}\n\nconst buildUrl = (\n baseUrl: string | undefined,\n path: string,\n params?: PathParams,\n query?: QueryParams,\n) => {\n const filledPath = fillPath(path.replace(/\\{([A-Za-z0-9_]+)\\}/g, ':$1'), params)\n const absolutePath = /^https?:\\/\\//i.test(filledPath)\n ? filledPath\n : `${(baseUrl ?? '').replace(/\\/$/, '')}/${filledPath.replace(/^\\//, '')}`\n const url = new URL(absolutePath)\n appendQuery(url, query)\n return url\n}\n\nexport { buildUrl, assertAbsoluteUrl }\n","import type { MaybePromise } from '../types'\n\nconst toHeaders = (init?: HeadersInit) => new Headers(init)\n\nconst mergeHeaders = (...inits: Array<HeadersInit | undefined>) => {\n const headers = new Headers()\n inits.forEach((init) => {\n if (!init) {\n return\n }\n new Headers(init).forEach((value, key) => {\n headers.set(key, value)\n })\n })\n return headers\n}\n\nconst resolveHeaders = async (value?: HeadersInit | (() => MaybePromise<HeadersInit>)) => {\n if (!value) {\n return new Headers()\n }\n const resolved = typeof value === 'function' ? await value() : value\n return toHeaders(resolved)\n}\n\nexport { toHeaders, mergeHeaders, resolveHeaders }\n","const wait = (delayMs: number) => new Promise<void>((resolve) => setTimeout(resolve, delayMs))\n\nconst combineSignals = (signals: Array<AbortSignal | undefined>) => {\n const active = signals.filter((signal): signal is AbortSignal => Boolean(signal))\n if (active.length === 0) {\n return undefined\n }\n if (active.length === 1) {\n return active[0]\n }\n if (typeof AbortSignal.any === 'function') {\n return AbortSignal.any(active)\n }\n const controller = new AbortController()\n active.forEach((signal) => {\n if (signal.aborted) {\n controller.abort(signal.reason)\n return\n }\n signal.addEventListener('abort', () => controller.abort(signal.reason), { once: true })\n })\n return controller.signal\n}\n\nconst createTimeoutSignal = (timeoutMs: number | undefined) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return undefined\n }\n const controller = new AbortController()\n const timer = setTimeout(\n () => controller.abort(new Error('tanstack-fetch: request timed out')),\n timeoutMs,\n )\n controller.signal.addEventListener('abort', () => clearTimeout(timer), { once: true })\n return controller.signal\n}\n\nexport { wait, combineSignals, createTimeoutSignal }\n","import type { CreateFetchOptions, HttpInterceptor, HttpMethod, RequestOptions } from './types'\nimport { DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT_MS } from './constants'\nimport { resolveInterceptors, runHook } from './interceptors/run-interceptors'\nimport { executeFetch } from './request-execute'\nimport { assertAbsoluteUrl, buildUrl } from './utils/build-url'\nimport { mergeHeaders, resolveHeaders } from './utils/headers'\nimport { combineSignals, createTimeoutSignal, wait } from './utils/signals'\nimport type { FetchErrorInfo, FetchResult, IncomingHeaders, RequestContext } from './types'\n\ntype SendRequestArgs = {\n method: HttpMethod\n path: string\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n}\n\nconst resolveIncoming = async (\n client: CreateFetchOptions,\n): Promise<IncomingHeaders | undefined> => {\n if (!client.incoming) {\n return undefined\n }\n return typeof client.incoming === 'function' ? client.incoming() : client.incoming\n}\n\nconst createContext = async (args: SendRequestArgs, attempt: number): Promise<RequestContext> => {\n const { method, path, requestOptions, client } = args\n const source = client.source ?? 'browser'\n assertAbsoluteUrl(client.baseUrl, source)\n const url = buildUrl(client.baseUrl, path, requestOptions?.params, requestOptions?.query)\n const headers = mergeHeaders(await resolveHeaders(client.headers), requestOptions?.headers)\n const timeoutMs = requestOptions?.timeoutMs ?? client.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const signal = combineSignals([requestOptions?.signal, createTimeoutSignal(timeoutMs)])\n\n return {\n request: { method, url, headers, body: requestOptions?.body, signal },\n incoming: await resolveIncoming(client),\n meta: {\n attempt,\n maxRetries: client.maxRetries ?? DEFAULT_MAX_RETRIES,\n source,\n operation: requestOptions?.operation,\n },\n }\n}\n\nconst sendRequest = async <T, E = FetchErrorInfo>(\n args: SendRequestArgs,\n): Promise<FetchResult<T, E>> => {\n const interceptors = resolveInterceptors(args.interceptors, args.requestOptions?.interceptors)\n const fetchImpl = args.client.fetch ?? globalThis.fetch\n if (!fetchImpl) {\n throw new Error('tanstack-fetch: fetch is not available')\n }\n\n let attempt = 0\n const maxRetries = args.client.maxRetries ?? DEFAULT_MAX_RETRIES\n while (attempt <= maxRetries) {\n const outcome = await runAttempt<T, E>({ args, interceptors, fetchImpl, attempt })\n if (outcome.kind === 'result') {\n return outcome.result\n }\n attempt += 1\n if (outcome.delayMs) {\n await wait(outcome.delayMs)\n }\n }\n\n throw new Error('tanstack-fetch: exceeded retry budget')\n}\n\nconst runAttempt = async <T, E>(input: {\n args: SendRequestArgs\n interceptors: HttpInterceptor[]\n fetchImpl: typeof fetch\n attempt: number\n}) => {\n let context = await createContext(input.args, input.attempt)\n const before = await runHook(input.interceptors, (item) => item.onRequest, context)\n if (before.type === 'short-circuit') {\n return { kind: 'result' as const, result: before.result as FetchResult<T, E> }\n }\n if (before.type === 'retry') {\n return { kind: 'retry' as const, delayMs: before.delayMs }\n }\n if (before.type === 'continue') {\n context = before.context\n }\n return executeFetch<T, E>({\n requestOptions: input.args.requestOptions,\n client: input.args.client,\n interceptors: input.interceptors,\n fetchImpl: input.fetchImpl,\n context,\n })\n}\n\nexport { sendRequest }\nexport type { SendRequestArgs }\n","import type { SseEvent } from './types'\n\nconst parseSseBlock = (block: string): SseEvent<unknown> | undefined => {\n const dataLines: string[] = []\n let eventName: string | undefined\n let id: string | undefined\n let retry: number | undefined\n\n block.split('\\n').forEach((line) => {\n if (line.startsWith(':')) {\n return\n }\n if (line.startsWith('data:')) {\n dataLines.push(line.slice(5).replace(/^ /, ''))\n return\n }\n if (line.startsWith('event:')) {\n eventName = line.slice(6).replace(/^ /, '')\n return\n }\n if (line.startsWith('id:')) {\n id = line.slice(3).replace(/^ /, '')\n return\n }\n if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.slice(6).trim(), 10)\n if (!Number.isNaN(parsed)) {\n retry = parsed\n }\n }\n })\n\n if (dataLines.length === 0 && !eventName) {\n return undefined\n }\n\n const raw = dataLines.join('\\n')\n let data: unknown = raw\n if (raw) {\n try {\n data = JSON.parse(raw)\n } catch {\n data = raw\n }\n }\n\n return { event: eventName, data, id, retry }\n}\n\nconst consumeSseBuffer = (buffer: string) => {\n const normalized = buffer.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n')\n const chunks = normalized.split('\\n\\n')\n const rest = chunks.pop() ?? ''\n const events = chunks\n .map((block) => parseSseBlock(block.trim()))\n .filter((event): event is SseEvent<unknown> => Boolean(event))\n return { events, rest }\n}\n\nexport { parseSseBlock, consumeSseBuffer }\n","import type {\n CreateFetchOptions,\n HttpInterceptor,\n HttpMethod,\n IncomingHeaders,\n RequestContext,\n RequestOptions,\n} from './types'\nimport { DEFAULT_MAX_RETRIES } from './constants'\nimport { assertAbsoluteUrl, buildUrl } from './utils/build-url'\nimport { mergeHeaders, resolveHeaders } from './utils/headers'\n\ntype SendSseArgs = {\n path: string\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n}\n\nconst resolveIncoming = async (\n client: CreateFetchOptions,\n): Promise<IncomingHeaders | undefined> => {\n if (!client.incoming) {\n return undefined\n }\n return typeof client.incoming === 'function' ? client.incoming() : client.incoming\n}\n\nconst createSseContext = async (\n args: SendSseArgs,\n attempt: number,\n lastEventId?: string,\n): Promise<RequestContext> => {\n const source = args.client.source ?? 'browser'\n assertAbsoluteUrl(args.client.baseUrl, source)\n const url = buildUrl(\n args.client.baseUrl,\n args.path,\n args.requestOptions?.params,\n args.requestOptions?.query,\n )\n const headers = mergeHeaders(\n await resolveHeaders(args.client.headers),\n args.requestOptions?.headers,\n )\n headers.set('accept', 'text/event-stream')\n if (lastEventId) {\n headers.set('last-event-id', lastEventId)\n }\n return {\n request: {\n method: 'GET' as HttpMethod,\n url,\n headers,\n body: args.requestOptions?.body,\n signal: args.requestOptions?.signal,\n },\n incoming: await resolveIncoming(args.client),\n meta: {\n attempt,\n maxRetries: args.client.maxRetries ?? DEFAULT_MAX_RETRIES,\n source,\n operation: args.requestOptions?.operation,\n lastEventId,\n },\n }\n}\n\nexport { createSseContext }\nexport type { SendSseArgs }\n","import type { SseEvent } from './types'\nimport { resolveInterceptors, runHook } from './interceptors/run-interceptors'\nimport { consumeSseBuffer } from './sse-parse'\nimport { wait } from './utils/signals'\nimport { toFetchErrorInfo } from './utils/result'\nimport { createSseContext, type SendSseArgs } from './sse-context'\n\nconst createSseIterator = <T>(args: SendSseArgs): AsyncIterator<SseEvent<T>> => {\n const interceptors = resolveInterceptors(args.interceptors, args.requestOptions?.interceptors)\n const fetchImpl = args.client.fetch ?? globalThis.fetch\n const queue: SseEvent<T>[] = []\n let reader: ReadableStreamDefaultReader<string> | undefined\n let buffer = ''\n let lastEventId = args.requestOptions?.headers\n ? (new Headers(args.requestOptions.headers).get('last-event-id') ?? undefined)\n : undefined\n let attempt = 0\n let closed = false\n\n const pull = async (): Promise<IteratorResult<SseEvent<T>>> => {\n if (queue.length > 0) {\n return { value: queue.shift() as SseEvent<T>, done: false }\n }\n if (closed) {\n return { value: undefined, done: true }\n }\n if (!reader) {\n const started = await openStream()\n if (!started) {\n closed = true\n return { value: undefined, done: true }\n }\n }\n return readNext()\n }\n\n const openStream = async (): Promise<boolean> => {\n if (!fetchImpl) {\n throw new Error('tanstack-fetch: fetch is not available')\n }\n let context = await createSseContext(args, attempt, lastEventId)\n const before = await runHook(interceptors, (item) => item.onRequest, context)\n if (before.type === 'short-circuit' || before.type === 'retry') {\n return false\n }\n if (before.type === 'continue') {\n context = before.context\n }\n const response = await fetchImpl(context.request.url, {\n method: 'GET',\n headers: context.request.headers,\n signal: context.request.signal,\n credentials: args.client.credentials,\n })\n context.response = response\n if (!response.ok || !response.body) {\n context.error = toFetchErrorInfo(response.status, await response.text())\n const failed = await runHook(interceptors, (item) => item.onSseError, context)\n if (failed.type === 'retry' && attempt < context.meta.maxRetries) {\n attempt += 1\n await wait(failed.delayMs ?? 500)\n const reconnect = await runHook(interceptors, (item) => item.onSseReconnect, context)\n if (reconnect.type === 'continue') {\n lastEventId = reconnect.context.meta.lastEventId ?? lastEventId\n }\n return openStream()\n }\n throw Object.assign(new Error(context.error.message), { error: context.error })\n }\n await runHook(interceptors, (item) => item.onSseOpen, context)\n reader = response.body.pipeThrough(new TextDecoderStream()).getReader()\n return true\n }\n\n const readNext = async (): Promise<IteratorResult<SseEvent<T>>> => {\n const currentReader = reader\n if (!currentReader) {\n closed = true\n return { value: undefined, done: true }\n }\n const chunk = await currentReader.read()\n if (chunk.done) {\n reader = undefined\n closed = true\n return pull()\n }\n const parsed = consumeSseBuffer(buffer + chunk.value)\n buffer = parsed.rest\n for (const event of parsed.events) {\n lastEventId = event.id ?? lastEventId\n const context = await createSseContext(args, attempt, lastEventId)\n const after = await runHook(interceptors, (item) => item.onSseEvent, { ...context, event })\n if (after.type === 'drop') {\n continue\n }\n if (after.type === 'continue' && after.context.event) {\n queue.push(after.context.event as SseEvent<T>)\n }\n }\n return pull()\n }\n\n return { next: pull }\n}\n\nexport { createSseIterator }\n","import type { SseEvent } from './types'\nimport { createSseIterator } from './sse-iterator'\nimport type { SendSseArgs } from './sse-context'\n\nconst sendSse = <T>(args: SendSseArgs): AsyncIterable<SseEvent<T>> => ({\n [Symbol.asyncIterator]: () => createSseIterator<T>(args),\n})\n\nexport { sendSse }\nexport type { SendSseArgs }\n","import { isAbortError } from './fetch-error'\nimport { sendSse } from './sse'\nimport { combineSignals } from './utils/signals'\nimport type { SendSseArgs } from './sse-context'\nimport type { RequestOptions, SseEvent, SseHandlers, SseSubscription } from './types'\n\ntype SseCallOptions<T> = RequestOptions &\n SseHandlers<T> & {\n lastEventId?: string\n }\n\nconst HANDLER_KEYS = ['onMessage', 'onEvent', 'onOpen', 'onError', 'onClose', 'lastEventId'] as const\n\nconst splitSseOptions = <T>(options?: SseCallOptions<T>) => {\n const handlers: SseHandlers<T> = {}\n const requestOptions: RequestOptions = { ...(options ?? {}) }\n const lastEventId = options?.lastEventId\n\n for (const key of HANDLER_KEYS) {\n if (key === 'lastEventId') {\n delete (requestOptions as Record<string, unknown>).lastEventId\n continue\n }\n if (options && key in options) {\n ;(handlers as Record<string, unknown>)[key] = options[key]\n delete (requestOptions as Record<string, unknown>)[key]\n }\n }\n\n if (lastEventId) {\n const headers = new Headers(requestOptions.headers)\n headers.set('last-event-id', lastEventId)\n requestOptions.headers = headers\n }\n\n return { handlers, requestOptions, lastEventId }\n}\n\nconst hasSseHandlers = <T>(options?: SseCallOptions<T>) =>\n Boolean(\n options &&\n (options.onMessage || options.onEvent || options.onOpen || options.onError || options.onClose),\n )\n\nconst listenSse = <T>(args: SendSseArgs, handlers: SseHandlers<T>): SseSubscription => {\n const controller = new AbortController()\n const signal = combineSignals([args.requestOptions?.signal, controller.signal])\n\n const run = async () => {\n try {\n handlers.onOpen?.()\n for await (const event of sendSse<T>({\n ...args,\n requestOptions: { ...args.requestOptions, signal },\n })) {\n handlers.onEvent?.(event)\n handlers.onMessage?.(event.data, event)\n }\n handlers.onClose?.()\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) {\n handlers.onClose?.()\n return\n }\n handlers.onError?.(error)\n }\n }\n\n void run()\n\n return {\n close: () => controller.abort(),\n }\n}\n\nconst createSseApi = (base: Omit<SendSseArgs, 'path' | 'requestOptions'>) => {\n const sse = (<T>(path: string, options?: SseCallOptions<T>) => {\n const { handlers, requestOptions } = splitSseOptions(options)\n const args: SendSseArgs = {\n path,\n requestOptions,\n client: base.client,\n interceptors: base.interceptors,\n }\n\n if (hasSseHandlers(options)) {\n return listenSse<T>(args, handlers)\n }\n\n return sendSse<T>(args)\n }) as {\n <T>(\n path: string,\n options: SseCallOptions<T> &\n ({ onMessage: SseHandlers<T>['onMessage'] } | { onEvent: SseHandlers<T>['onEvent'] }),\n ): SseSubscription\n <T>(path: string, options?: SseCallOptions<T>): AsyncIterable<SseEvent<T>>\n }\n\n return sse\n}\n\nexport { listenSse, splitSseOptions, hasSseHandlers, createSseApi }\nexport type { SseCallOptions }\n","import { createConfigInterceptors } from './plugins/config-interceptors'\nimport { pluginFactories } from './plugins'\nimport { createFetchError } from './fetch-error'\nimport { sendRequest } from './request'\nimport { createSseApi } from './sse-listen'\nimport type {\n CreateFetchOptions,\n FetchClient,\n FetchErrorInfo,\n FetchResult,\n HttpInterceptor,\n HttpMethod,\n RequestOptions,\n} from './types'\n\nconst createFetch = (options: CreateFetchOptions = {}): FetchClient => {\n const clientOptions: CreateFetchOptions = {\n throwOnError: true,\n ...options,\n }\n\n const interceptors: HttpInterceptor[] = [\n ...createConfigInterceptors(clientOptions),\n ...(clientOptions.plugins ?? []).map((name) => pluginFactories[name]()),\n ...(clientOptions.interceptors ?? []),\n ]\n\n const use: FetchClient['use'] = (name, interceptor, config) => {\n const next: HttpInterceptor = {\n ...interceptor,\n name,\n order: config?.order ?? interceptor.order,\n }\n const existing = interceptors.findIndex((item) => item.name === name)\n if (existing >= 0) {\n interceptors.splice(existing, 1, next)\n return\n }\n interceptors.push(next)\n }\n\n const eject: FetchClient['eject'] = (name) => {\n const index = interceptors.findIndex((item) => item.name === name)\n if (index >= 0) {\n interceptors.splice(index, 1)\n }\n }\n\n const request = (async <T, E = FetchErrorInfo>(\n method: HttpMethod,\n path: string,\n requestOptions?: RequestOptions,\n ): Promise<T | FetchResult<T, E>> => {\n const result = await sendRequest<T, E>({\n method,\n path,\n requestOptions,\n client: clientOptions,\n interceptors,\n })\n const shouldThrow = requestOptions?.throwOnError ?? clientOptions.throwOnError ?? true\n if (!result.ok && shouldThrow) {\n throw createFetchError(result as FetchResult<never, FetchErrorInfo>)\n }\n if (shouldThrow && result.ok) {\n return result.data\n }\n return result\n }) as FetchClient['request']\n\n const bindMethod = (httpMethod: HttpMethod): FetchClient['get'] => {\n const bound = (path: string, requestOptions?: RequestOptions) =>\n request(httpMethod, path, requestOptions as never)\n return bound as FetchClient['get']\n }\n\n const sse = createSseApi({ client: clientOptions, interceptors })\n\n return {\n use,\n eject,\n request,\n get: bindMethod('GET'),\n post: bindMethod('POST'),\n put: bindMethod('PUT'),\n patch: bindMethod('PATCH'),\n delete: bindMethod('DELETE'),\n sse,\n }\n}\n\n/** @deprecated Use createFetch */\nconst createClient = createFetch\n\nexport { createFetch, createClient }\n","import { useRef } from 'react'\nimport { createFetch } from '../create-fetch'\nimport type { CreateFetchOptions, FetchClient } from '../types'\nimport type { FetchProviderProps } from './fetch-provider.type'\nimport { createContext, useContext, type Context } from 'react'\n\nconst FetchContext: Context<FetchClient | null> = createContext<FetchClient | null>(null)\n\nconst buildClient = (props: FetchProviderProps): FetchClient => {\n if (props.client) {\n return props.client\n }\n const { children: _children, client: _client, ...options } = props\n return createFetch(options as CreateFetchOptions)\n}\n\nconst useFetchProviderState = (props: FetchProviderProps) => {\n const createdRef = useRef<FetchClient | null>(null)\n\n if (props.client) {\n return { value: props.client, children: props.children }\n }\n\n if (!createdRef.current) {\n createdRef.current = buildClient(props)\n }\n\n return { value: createdRef.current, children: props.children }\n}\n\nconst useFetch = (): FetchClient => {\n const client = useContext(FetchContext)\n if (!client) {\n throw new Error('tanstack-fetch: useFetch() must be used inside <FetchProvider>')\n }\n return client\n}\n\nexport { FetchContext, useFetchProviderState, useFetch }\n","import { createElement } from 'react'\nimport type { FetchProviderProps } from './fetch-provider.type'\nimport { FetchContext, useFetchProviderState } from './fetch-provider.hook'\n\nconst FetchProvider = (props: FetchProviderProps) => {\n const { value, children } = useFetchProviderState(props)\n return createElement(FetchContext.Provider, { value }, children)\n}\n\nexport default FetchProvider\nexport type { FetchProviderProps }\n","import { useEffect, useRef, useState } from 'react'\nimport { isFetchError } from '../fetch-error'\nimport { useFetch } from './fetch-provider.hook'\nimport type { FetchError } from '../fetch-error'\nimport type { SseEvent } from '../types'\n\ntype UseSseOptions<T> = {\n /** When false, the stream is not opened. Default true. */\n enabled?: boolean\n lastEventId?: string\n params?: Record<string, string | number>\n query?: Record<string, string | number | boolean | undefined | null>\n onMessage?: (data: T, event: SseEvent<T>) => void\n onEvent?: (event: SseEvent<T>) => void\n onError?: (error: unknown) => void\n}\n\ntype UseSseResult<T> = {\n data: T | undefined\n event: SseEvent<T> | undefined\n error: FetchError | Error | undefined\n isConnected: boolean\n close: () => void\n}\n\nconst useSse = <T>(path: string, options: UseSseOptions<T> = {}): UseSseResult<T> => {\n const api = useFetch()\n const [data, setData] = useState<T | undefined>(undefined)\n const [event, setEvent] = useState<SseEvent<T> | undefined>(undefined)\n const [error, setError] = useState<FetchError | Error | undefined>(undefined)\n const [isConnected, setIsConnected] = useState(false)\n const closeRef = useRef<(() => void) | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const paramsKey = JSON.stringify(options.params ?? null)\n const queryKey = JSON.stringify(options.query ?? null)\n\n useEffect(() => {\n if (options.enabled === false) {\n return\n }\n\n setError(undefined)\n const subscription = api.sse<T>(path, {\n params: optionsRef.current.params,\n query: optionsRef.current.query,\n lastEventId: optionsRef.current.lastEventId,\n onOpen: () => setIsConnected(true),\n onMessage: (message, nextEvent) => {\n setData(message)\n setEvent(nextEvent)\n optionsRef.current.onMessage?.(message, nextEvent)\n },\n onEvent: (nextEvent) => {\n optionsRef.current.onEvent?.(nextEvent)\n },\n onError: (nextError) => {\n setIsConnected(false)\n const normalized =\n nextError instanceof Error ? nextError : new Error('SSE connection failed')\n setError(isFetchError(nextError) ? nextError : normalized)\n optionsRef.current.onError?.(nextError)\n },\n onClose: () => setIsConnected(false),\n })\n\n closeRef.current = subscription.close\n\n return () => {\n subscription.close()\n closeRef.current = null\n setIsConnected(false)\n }\n }, [api, path, options.enabled, options.lastEventId, paramsKey, queryKey])\n\n return {\n data,\n event,\n error,\n isConnected,\n close: () => closeRef.current?.(),\n }\n}\n\nexport { useSse }\nexport type { UseSseOptions, UseSseResult }\n"]}
@@ -0,0 +1,34 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { C as CreateFetchOptions, F as FetchClient, k as SseEvent, d as FetchError } from './fetch-error-B10Od9AT.cjs';
4
+
5
+ type FetchProviderProps = CreateFetchOptions & {
6
+ children: ReactNode;
7
+ /** Pass an existing client instead of creating one from the other props. */
8
+ client?: FetchClient;
9
+ };
10
+
11
+ declare const FetchProvider: (props: FetchProviderProps) => react.FunctionComponentElement<react.ProviderProps<FetchClient | null>>;
12
+
13
+ declare const useFetch: () => FetchClient;
14
+
15
+ type UseSseOptions<T> = {
16
+ /** When false, the stream is not opened. Default true. */
17
+ enabled?: boolean;
18
+ lastEventId?: string;
19
+ params?: Record<string, string | number>;
20
+ query?: Record<string, string | number | boolean | undefined | null>;
21
+ onMessage?: (data: T, event: SseEvent<T>) => void;
22
+ onEvent?: (event: SseEvent<T>) => void;
23
+ onError?: (error: unknown) => void;
24
+ };
25
+ type UseSseResult<T> = {
26
+ data: T | undefined;
27
+ event: SseEvent<T> | undefined;
28
+ error: FetchError | Error | undefined;
29
+ isConnected: boolean;
30
+ close: () => void;
31
+ };
32
+ declare const useSse: <T>(path: string, options?: UseSseOptions<T>) => UseSseResult<T>;
33
+
34
+ export { FetchProvider, type FetchProviderProps, type UseSseOptions, type UseSseResult, useFetch, useSse };
@@ -0,0 +1,34 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { C as CreateFetchOptions, F as FetchClient, k as SseEvent, d as FetchError } from './fetch-error-B10Od9AT.js';
4
+
5
+ type FetchProviderProps = CreateFetchOptions & {
6
+ children: ReactNode;
7
+ /** Pass an existing client instead of creating one from the other props. */
8
+ client?: FetchClient;
9
+ };
10
+
11
+ declare const FetchProvider: (props: FetchProviderProps) => react.FunctionComponentElement<react.ProviderProps<FetchClient | null>>;
12
+
13
+ declare const useFetch: () => FetchClient;
14
+
15
+ type UseSseOptions<T> = {
16
+ /** When false, the stream is not opened. Default true. */
17
+ enabled?: boolean;
18
+ lastEventId?: string;
19
+ params?: Record<string, string | number>;
20
+ query?: Record<string, string | number | boolean | undefined | null>;
21
+ onMessage?: (data: T, event: SseEvent<T>) => void;
22
+ onEvent?: (event: SseEvent<T>) => void;
23
+ onError?: (error: unknown) => void;
24
+ };
25
+ type UseSseResult<T> = {
26
+ data: T | undefined;
27
+ event: SseEvent<T> | undefined;
28
+ error: FetchError | Error | undefined;
29
+ isConnected: boolean;
30
+ close: () => void;
31
+ };
32
+ declare const useSse: <T>(path: string, options?: UseSseOptions<T>) => UseSseResult<T>;
33
+
34
+ export { FetchProvider, type FetchProviderProps, type UseSseOptions, type UseSseResult, useFetch, useSse };
package/dist/react.js ADDED
@@ -0,0 +1,91 @@
1
+ import { isFetchError, createFetch } from './chunk-T27KPHCL.js';
2
+ import { createContext, useContext, createElement, useState, useRef, useEffect } from 'react';
3
+
4
+ var FetchContext = createContext(null);
5
+ var buildClient = (props) => {
6
+ if (props.client) {
7
+ return props.client;
8
+ }
9
+ const { children: _children, client: _client, ...options } = props;
10
+ return createFetch(options);
11
+ };
12
+ var useFetchProviderState = (props) => {
13
+ const createdRef = useRef(null);
14
+ if (props.client) {
15
+ return { value: props.client, children: props.children };
16
+ }
17
+ if (!createdRef.current) {
18
+ createdRef.current = buildClient(props);
19
+ }
20
+ return { value: createdRef.current, children: props.children };
21
+ };
22
+ var useFetch = () => {
23
+ const client = useContext(FetchContext);
24
+ if (!client) {
25
+ throw new Error("tanstack-fetch: useFetch() must be used inside <FetchProvider>");
26
+ }
27
+ return client;
28
+ };
29
+
30
+ // src/react/fetch-provider.tsx
31
+ var FetchProvider = (props) => {
32
+ const { value, children } = useFetchProviderState(props);
33
+ return createElement(FetchContext.Provider, { value }, children);
34
+ };
35
+ var fetch_provider_default = FetchProvider;
36
+ var useSse = (path, options = {}) => {
37
+ const api = useFetch();
38
+ const [data, setData] = useState(void 0);
39
+ const [event, setEvent] = useState(void 0);
40
+ const [error, setError] = useState(void 0);
41
+ const [isConnected, setIsConnected] = useState(false);
42
+ const closeRef = useRef(null);
43
+ const optionsRef = useRef(options);
44
+ optionsRef.current = options;
45
+ const paramsKey = JSON.stringify(options.params ?? null);
46
+ const queryKey = JSON.stringify(options.query ?? null);
47
+ useEffect(() => {
48
+ if (options.enabled === false) {
49
+ return;
50
+ }
51
+ setError(void 0);
52
+ const subscription = api.sse(path, {
53
+ params: optionsRef.current.params,
54
+ query: optionsRef.current.query,
55
+ lastEventId: optionsRef.current.lastEventId,
56
+ onOpen: () => setIsConnected(true),
57
+ onMessage: (message, nextEvent) => {
58
+ setData(message);
59
+ setEvent(nextEvent);
60
+ optionsRef.current.onMessage?.(message, nextEvent);
61
+ },
62
+ onEvent: (nextEvent) => {
63
+ optionsRef.current.onEvent?.(nextEvent);
64
+ },
65
+ onError: (nextError) => {
66
+ setIsConnected(false);
67
+ const normalized = nextError instanceof Error ? nextError : new Error("SSE connection failed");
68
+ setError(isFetchError(nextError) ? nextError : normalized);
69
+ optionsRef.current.onError?.(nextError);
70
+ },
71
+ onClose: () => setIsConnected(false)
72
+ });
73
+ closeRef.current = subscription.close;
74
+ return () => {
75
+ subscription.close();
76
+ closeRef.current = null;
77
+ setIsConnected(false);
78
+ };
79
+ }, [api, path, options.enabled, options.lastEventId, paramsKey, queryKey]);
80
+ return {
81
+ data,
82
+ event,
83
+ error,
84
+ isConnected,
85
+ close: () => closeRef.current?.()
86
+ };
87
+ };
88
+
89
+ export { fetch_provider_default as FetchProvider, useFetch, useSse };
90
+ //# sourceMappingURL=react.js.map
91
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/fetch-provider.hook.ts","../src/react/fetch-provider.tsx","../src/react/use-sse.hook.ts"],"names":["useRef"],"mappings":"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","file":"react.js","sourcesContent":["import { useRef } from 'react'\nimport { createFetch } from '../create-fetch'\nimport type { CreateFetchOptions, FetchClient } from '../types'\nimport type { FetchProviderProps } from './fetch-provider.type'\nimport { createContext, useContext, type Context } from 'react'\n\nconst FetchContext: Context<FetchClient | null> = createContext<FetchClient | null>(null)\n\nconst buildClient = (props: FetchProviderProps): FetchClient => {\n if (props.client) {\n return props.client\n }\n const { children: _children, client: _client, ...options } = props\n return createFetch(options as CreateFetchOptions)\n}\n\nconst useFetchProviderState = (props: FetchProviderProps) => {\n const createdRef = useRef<FetchClient | null>(null)\n\n if (props.client) {\n return { value: props.client, children: props.children }\n }\n\n if (!createdRef.current) {\n createdRef.current = buildClient(props)\n }\n\n return { value: createdRef.current, children: props.children }\n}\n\nconst useFetch = (): FetchClient => {\n const client = useContext(FetchContext)\n if (!client) {\n throw new Error('tanstack-fetch: useFetch() must be used inside <FetchProvider>')\n }\n return client\n}\n\nexport { FetchContext, useFetchProviderState, useFetch }\n","import { createElement } from 'react'\nimport type { FetchProviderProps } from './fetch-provider.type'\nimport { FetchContext, useFetchProviderState } from './fetch-provider.hook'\n\nconst FetchProvider = (props: FetchProviderProps) => {\n const { value, children } = useFetchProviderState(props)\n return createElement(FetchContext.Provider, { value }, children)\n}\n\nexport default FetchProvider\nexport type { FetchProviderProps }\n","import { useEffect, useRef, useState } from 'react'\nimport { isFetchError } from '../fetch-error'\nimport { useFetch } from './fetch-provider.hook'\nimport type { FetchError } from '../fetch-error'\nimport type { SseEvent } from '../types'\n\ntype UseSseOptions<T> = {\n /** When false, the stream is not opened. Default true. */\n enabled?: boolean\n lastEventId?: string\n params?: Record<string, string | number>\n query?: Record<string, string | number | boolean | undefined | null>\n onMessage?: (data: T, event: SseEvent<T>) => void\n onEvent?: (event: SseEvent<T>) => void\n onError?: (error: unknown) => void\n}\n\ntype UseSseResult<T> = {\n data: T | undefined\n event: SseEvent<T> | undefined\n error: FetchError | Error | undefined\n isConnected: boolean\n close: () => void\n}\n\nconst useSse = <T>(path: string, options: UseSseOptions<T> = {}): UseSseResult<T> => {\n const api = useFetch()\n const [data, setData] = useState<T | undefined>(undefined)\n const [event, setEvent] = useState<SseEvent<T> | undefined>(undefined)\n const [error, setError] = useState<FetchError | Error | undefined>(undefined)\n const [isConnected, setIsConnected] = useState(false)\n const closeRef = useRef<(() => void) | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const paramsKey = JSON.stringify(options.params ?? null)\n const queryKey = JSON.stringify(options.query ?? null)\n\n useEffect(() => {\n if (options.enabled === false) {\n return\n }\n\n setError(undefined)\n const subscription = api.sse<T>(path, {\n params: optionsRef.current.params,\n query: optionsRef.current.query,\n lastEventId: optionsRef.current.lastEventId,\n onOpen: () => setIsConnected(true),\n onMessage: (message, nextEvent) => {\n setData(message)\n setEvent(nextEvent)\n optionsRef.current.onMessage?.(message, nextEvent)\n },\n onEvent: (nextEvent) => {\n optionsRef.current.onEvent?.(nextEvent)\n },\n onError: (nextError) => {\n setIsConnected(false)\n const normalized =\n nextError instanceof Error ? nextError : new Error('SSE connection failed')\n setError(isFetchError(nextError) ? nextError : normalized)\n optionsRef.current.onError?.(nextError)\n },\n onClose: () => setIsConnected(false),\n })\n\n closeRef.current = subscription.close\n\n return () => {\n subscription.close()\n closeRef.current = null\n setIsConnected(false)\n }\n }, [api, path, options.enabled, options.lastEventId, paramsKey, queryKey])\n\n return {\n data,\n event,\n error,\n isConnected,\n close: () => closeRef.current?.(),\n }\n}\n\nexport { useSse }\nexport type { UseSseOptions, UseSseResult }\n"]}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "tanstack-fetch",
3
+ "version": "1.0.0",
4
+ "description": "TanStack Query–ready fetch client for React and Next.js. SSR, SSE, interceptors, OpenAPI codegen.",
5
+ "license": "MIT",
6
+ "author": {
7
+ "name": "Mohammad Garmabi",
8
+ "email": "mwmdgmb@gmail.com",
9
+ "url": "https://github.com/mohamadgarmabi"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/mohamadgarmabi/tanstack-fetch.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/mohamadgarmabi/tanstack-fetch/issues"
17
+ },
18
+ "homepage": "https://github.com/mohamadgarmabi/tanstack-fetch#readme",
19
+ "keywords": [
20
+ "fetch",
21
+ "http",
22
+ "typescript",
23
+ "tanstack",
24
+ "tanstack-query",
25
+ "react-query",
26
+ "ssr",
27
+ "sse",
28
+ "openapi",
29
+ "nextjs",
30
+ "react",
31
+ "interceptor"
32
+ ],
33
+ "type": "module",
34
+ "sideEffects": false,
35
+ "main": "./dist/index.cjs",
36
+ "module": "./dist/index.js",
37
+ "types": "./dist/index.d.ts",
38
+ "bin": {
39
+ "tanstack-fetch": "./dist/cli.js"
40
+ },
41
+ "exports": {
42
+ ".": {
43
+ "types": "./dist/index.d.ts",
44
+ "import": "./dist/index.js",
45
+ "require": "./dist/index.cjs"
46
+ },
47
+ "./react": {
48
+ "types": "./dist/react.d.ts",
49
+ "import": "./dist/react.js",
50
+ "require": "./dist/react.cjs"
51
+ }
52
+ },
53
+ "files": [
54
+ "dist",
55
+ "LICENSE",
56
+ "README.md"
57
+ ],
58
+ "engines": {
59
+ "node": ">=18"
60
+ },
61
+ "scripts": {
62
+ "build": "tsup",
63
+ "dev": "tsup --watch",
64
+ "test": "vitest run",
65
+ "test:watch": "vitest",
66
+ "typecheck": "tsc --noEmit",
67
+ "lint": "eslint src test example",
68
+ "format": "prettier --write .",
69
+ "format:check": "prettier --check .",
70
+ "example": "tsx example/run.ts",
71
+ "prepublishOnly": "npm run typecheck && npm run lint && npm test && npm run build"
72
+ },
73
+ "peerDependencies": {
74
+ "react": ">=18"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "react": {
78
+ "optional": true
79
+ }
80
+ },
81
+ "dependencies": {
82
+ "yaml": "^2.8.1"
83
+ },
84
+ "devDependencies": {
85
+ "@eslint/js": "^9.36.0",
86
+ "@types/node": "^24.5.2",
87
+ "@types/react": "^19.1.13",
88
+ "eslint": "^9.36.0",
89
+ "prettier": "^3.6.2",
90
+ "react": "^19.1.1",
91
+ "tsx": "^4.20.5",
92
+ "tsup": "^8.5.0",
93
+ "typescript": "^5.9.2",
94
+ "typescript-eslint": "^8.44.0",
95
+ "vitest": "^3.2.4"
96
+ }
97
+ }