dexix-request 1.0.0 → 1.1.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/DexiXError.ts","../src/errors/HTTPError.ts","../src/errors/NetworkError.ts","../src/errors/TimeoutError.ts","../src/utils/buildURL.ts","../src/utils/mergeHeaders.ts","../src/utils/mergeConfig.ts","../src/utils/isPlainObject.ts","../src/utils/serializeBody.ts","../src/errors/ParseError.ts","../src/utils/parseResponse.ts","../src/utils/combineSignals.ts","../src/core/dispatch.ts","../src/core/instance.ts","../src/index.ts"],"names":["DexiXError","message","request","response","HTTPError","NetworkError","cause","TimeoutError","timeout","isAbsoluteURL","url","joinURL","baseURL","trimmedBase","trimmedPath","appendQuery","query","path","existingSearch","params","key","value","item","search","buildURL","joined","mergeHeaders","sources","result","source","mergeConfig","parent","child","isPlainObject","prototype","isNativeBodyType","serializeBody","body","ParseError","EMPTY_STATUS_CODES","inferResponseType","contentType","parseResponse","responseType","type","text","failedResponse","combineSignals","userSignal","controller","timedOut","timer","onUserAbort","cancel","dispatch","config","headers","requestInfo","signal","didTimeout","init","errorResponse","defaults","method","resolved","requestWithBody","createInstance","instance","dx","index_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\n/**\n * Base class for every error thrown by DexiX Request.\n * All DexiX errors carry the originating request and, when available,\n * the response that was received.\n */\nexport class DexiXError extends Error {\n /** The request that caused this error. */\n public readonly request: DexiXRequestInfo;\n /** The response received, if any (absent for network/timeout errors). */\n public readonly response?: DexiXResponse;\n /** HTTP status code, if a response was received. */\n public readonly status?: number;\n /** Response headers, if a response was received. */\n public readonly headers?: Headers;\n /** The request URL. */\n public readonly url: string;\n\n public constructor(\n message: string,\n request: DexiXRequestInfo,\n response?: DexiXResponse,\n ) {\n super(message);\n this.name = \"DexiXError\";\n this.request = request;\n this.response = response;\n this.status = response?.status;\n this.headers = response?.headers;\n this.url = request.url;\n\n // Restore the correct prototype chain when compiled down to ES5-style\n // targets (not an issue at ES2022, but harmless and defensive).\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\n/**\n * Thrown when the server responds with a non-2xx status code.\n * Always carries the full `response`, including any parsed body DexiX\n * Request was able to extract before raising the error.\n */\nexport class HTTPError extends DexiXError {\n public constructor(request: DexiXRequestInfo, response: DexiXResponse) {\n super(\n `Request failed with status ${response.status} (${response.statusText}) for ${request.url}`,\n request,\n response,\n );\n this.name = \"HTTPError\";\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo } from \"../types/index.js\";\n\n/**\n * Thrown when the request could not be completed because of a network\n * failure (DNS resolution failure, connection refused, offline, CORS\n * rejection, etc). No response was ever received.\n */\nexport class NetworkError extends DexiXError {\n public constructor(message: string, request: DexiXRequestInfo, cause?: unknown) {\n super(message || \"Network request failed\", request);\n this.name = \"NetworkError\";\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo } from \"../types/index.js\";\n\n/**\n * Thrown when a request exceeds its configured `timeout` before a\n * response is received.\n */\nexport class TimeoutError extends DexiXError {\n /** The timeout duration, in milliseconds, that was exceeded. */\n public readonly timeout: number;\n\n public constructor(request: DexiXRequestInfo, timeout: number) {\n super(`Request to ${request.url} timed out after ${timeout}ms`, request);\n this.name = \"TimeoutError\";\n this.timeout = timeout;\n }\n}\n","import type { QueryParams } from \"../types/index.js\";\n\n/**\n * Detects absolute URLs (has a scheme like `https://`, `http://`, or is\n * protocol-relative `//host`).\n */\nfunction isAbsoluteURL(url: string): boolean {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n/**\n * Joins a base URL and a relative path without producing double slashes\n * or dropping a needed one.\n */\nfunction joinURL(baseURL: string, url: string): string {\n if (!baseURL) return url;\n if (isAbsoluteURL(url)) return url;\n\n const trimmedBase = baseURL.endsWith(\"/\") ? baseURL.slice(0, -1) : baseURL;\n const trimmedPath = url.startsWith(\"/\") ? url : `/${url}`;\n return `${trimmedBase}${trimmedPath}`;\n}\n\n/**\n * Appends query parameters to a URL, preserving any existing search\n * string already present on the URL. Array values become repeated keys.\n * `null`/`undefined` values are omitted entirely.\n */\nfunction appendQuery(url: string, query?: QueryParams): string {\n if (!query || Object.keys(query).length === 0) {\n return url;\n }\n\n const [path, existingSearch = \"\"] = url.split(\"?\");\n const params = new URLSearchParams(existingSearch);\n\n for (const [key, value] of Object.entries(query)) {\n if (value === null || value === undefined) continue;\n\n if (Array.isArray(value)) {\n for (const item of value) {\n params.append(key, String(item));\n }\n } else {\n params.append(key, String(value));\n }\n }\n\n const search = params.toString();\n return search ? `${path}?${search}` : (path as string);\n}\n\n/**\n * Builds the final request URL from a base URL, a relative or absolute\n * URL, and an optional set of query parameters.\n */\nexport function buildURL(baseURL: string | undefined, url: string, query?: QueryParams): string {\n const joined = joinURL(baseURL ?? \"\", url);\n return appendQuery(joined, query);\n}\n","import type { HeadersInput } from \"../types/index.js\";\n\n/**\n * Merges any number of header sources into a single `Headers` instance.\n * Later sources override earlier ones for the same (case-insensitive) key.\n * A value of `undefined` in a plain-object source removes that header.\n */\nexport function mergeHeaders(...sources: Array<HeadersInput | undefined>): Headers {\n const result = new Headers();\n\n for (const source of sources) {\n if (!source) continue;\n\n if (source instanceof Headers) {\n source.forEach((value, key) => {\n result.set(key, value);\n });\n continue;\n }\n\n if (Array.isArray(source)) {\n for (const [key, value] of source) {\n result.set(key, value);\n }\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined) {\n result.delete(key);\n } else {\n result.set(key, value);\n }\n }\n }\n\n return result;\n}\n","import { mergeHeaders } from \"./mergeHeaders.js\";\nimport type { RequestConfig } from \"../types/index.js\";\n\n/**\n * Merges a child `RequestConfig` on top of a parent one. Headers and\n * query params are merged (child wins per-key); every other field is\n * simply overridden by the child when present.\n */\nexport function mergeConfig(parent: RequestConfig, child: RequestConfig): RequestConfig {\n return {\n ...parent,\n ...child,\n headers: mergeHeaders(parent.headers, child.headers),\n query: { ...parent.query, ...child.query },\n };\n}\n","/**\n * Returns `true` for plain JavaScript objects (object literals, or objects\n * with `Object.prototype` / `null` as their prototype). Returns `false`\n * for arrays, class instances, `FormData`, `Blob`, `File`, `URLSearchParams`,\n * `ReadableStream`, `Date`, `Map`, `Set`, and primitives.\n */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n","import { isPlainObject } from \"./isPlainObject.js\";\nimport type { RequestBody } from \"../types/index.js\";\n\n/**\n * Result of serializing a request body: the value ready to hand to\n * `fetch`, and an optional `Content-Type` to apply when one wasn't\n * already set by the caller.\n */\nexport interface SerializedBody {\n body: BodyInit | null | undefined;\n contentType?: string;\n}\n\n/**\n * Determines whether a value is already a \"native\" body type that\n * `fetch` understands natively and should be passed through untouched.\n */\nfunction isNativeBodyType(value: unknown): value is BodyInit {\n return (\n typeof value === \"string\" ||\n value instanceof FormData ||\n value instanceof Blob ||\n value instanceof URLSearchParams ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n value instanceof ReadableStream\n );\n}\n\n/**\n * Serializes a DexiX request body. Plain objects and arrays are\n * JSON-serialized automatically; every other supported `BodyInit` type is\n * passed through untouched so the caller retains full control when\n * needed (e.g. uploading a `FormData` or streaming a `ReadableStream`).\n */\nexport function serializeBody(body: RequestBody): SerializedBody {\n if (body === null || body === undefined) {\n return { body: undefined };\n }\n\n if (isNativeBodyType(body)) {\n // FormData sets its own multipart boundary; let the platform handle it.\n if (body instanceof FormData) {\n return { body };\n }\n if (body instanceof URLSearchParams) {\n return { body, contentType: \"application/x-www-form-urlencoded;charset=UTF-8\" };\n }\n if (typeof body === \"string\") {\n return { body, contentType: \"text/plain;charset=UTF-8\" };\n }\n return { body };\n }\n\n if (isPlainObject(body) || Array.isArray(body)) {\n return {\n body: JSON.stringify(body),\n contentType: \"application/json;charset=UTF-8\",\n };\n }\n\n // Fallback: best-effort JSON serialization for other serializable values.\n return {\n body: JSON.stringify(body),\n contentType: \"application/json;charset=UTF-8\",\n };\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\n/**\n * Thrown when a response body could not be parsed according to the\n * requested (or inferred) `responseType`, e.g. invalid JSON.\n */\nexport class ParseError extends DexiXError {\n public constructor(request: DexiXRequestInfo, response: DexiXResponse, cause?: unknown) {\n super(`Failed to parse response body from ${request.url}`, request, response);\n this.name = \"ParseError\";\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n","import { ParseError } from \"../errors/ParseError.js\";\nimport type { DexiXRequestInfo, DexiXResponse, ResponseType } from \"../types/index.js\";\n\nconst EMPTY_STATUS_CODES = new Set([204, 205, 304]);\n\n/**\n * Infers the best response type from the `Content-Type` header when the\n * caller didn't explicitly request one.\n */\nfunction inferResponseType(response: Response): ResponseType {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\n return \"json\";\n }\n if (contentType.startsWith(\"text/\")) {\n return \"text\";\n }\n return \"json\";\n}\n\n/**\n * Parses a `Response` body according to `responseType` (or an inferred\n * type based on `Content-Type`), returning the parsed value. Throws\n * `ParseError` if parsing fails.\n */\nexport async function parseResponse<T>(\n response: Response,\n request: DexiXRequestInfo,\n responseType?: ResponseType,\n): Promise<T> {\n if (request.method === \"HEAD\" || EMPTY_STATUS_CODES.has(response.status)) {\n return undefined as T;\n }\n\n const type = responseType ?? inferResponseType(response);\n\n try {\n switch (type) {\n case \"json\": {\n const text = await response.text();\n if (text.length === 0) {\n return undefined as T;\n }\n return JSON.parse(text) as T;\n }\n case \"text\":\n return (await response.text()) as unknown as T;\n case \"blob\":\n return (await response.blob()) as unknown as T;\n case \"arrayBuffer\":\n return (await response.arrayBuffer()) as unknown as T;\n case \"stream\":\n return response.body as unknown as T;\n default:\n return (await response.text()) as unknown as T;\n }\n } catch (cause) {\n const failedResponse: DexiXResponse = {\n data: undefined,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n url: response.url || request.url,\n };\n throw new ParseError(request, failedResponse, cause);\n }\n}\n","/**\n * Combines an optional user-provided `AbortSignal` with an internal\n * timeout, producing a single signal that aborts when either source\n * aborts. Returns the combined signal along with a `cancel()` function\n * that must be called once the request settles to clear the timer, and\n * a `didTimeout()` predicate to distinguish a timeout abort from a\n * user-initiated abort.\n */\nexport function combineSignals(\n userSignal: AbortSignal | undefined,\n timeout: number | undefined,\n): {\n signal: AbortSignal | undefined;\n cancel: () => void;\n didTimeout: () => boolean;\n} {\n if (!timeout || timeout <= 0) {\n return {\n signal: userSignal,\n cancel: () => {},\n didTimeout: () => false,\n };\n }\n\n const controller = new AbortController();\n let timedOut = false;\n\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n\n const onUserAbort = () => controller.abort();\n userSignal?.addEventListener(\"abort\", onUserAbort, { once: true });\n\n const cancel = () => {\n clearTimeout(timer);\n userSignal?.removeEventListener(\"abort\", onUserAbort);\n };\n\n return {\n signal: controller.signal,\n cancel,\n didTimeout: () => timedOut,\n };\n}\n","import { HTTPError } from \"../errors/HTTPError.js\";\nimport { NetworkError } from \"../errors/NetworkError.js\";\nimport { TimeoutError } from \"../errors/TimeoutError.js\";\nimport { buildURL, combineSignals, mergeHeaders, parseResponse, serializeBody } from \"../utils/index.js\";\nimport type { DexiXRequestInfo, DexiXResponse, ResolvedRequestConfig } from \"../types/index.js\";\n\n/**\n * Executes a single HTTP request described by a fully-resolved config.\n * This is the single point in the library that calls `fetch`.\n *\n * @internal\n */\nexport async function dispatch<T>(config: ResolvedRequestConfig): Promise<T> {\n const { body, contentType } = serializeBody(config.body);\n\n const headers = mergeHeaders(\n contentType ? { \"content-type\": contentType } : undefined,\n config.headers,\n );\n\n const url = buildURL(config.baseURL, config.url, config.query);\n\n const requestInfo: DexiXRequestInfo = {\n url,\n method: config.method,\n headers,\n body: config.body,\n };\n\n const { signal, cancel, didTimeout } = combineSignals(config.signal, config.timeout);\n\n const init: RequestInit = {\n method: config.method,\n headers,\n body: config.method === \"GET\" || config.method === \"HEAD\" ? undefined : body,\n signal,\n credentials: config.credentials,\n cache: config.cache,\n redirect: config.redirect,\n referrerPolicy: config.referrerPolicy,\n mode: config.mode,\n };\n\n const request = new Request(url, init);\n\n if (config.onRequest) {\n await config.onRequest(request);\n }\n\n let response: Response;\n\n try {\n response = await fetch(request);\n } catch (cause) {\n cancel();\n\n if (cause instanceof DOMException && cause.name === \"AbortError\") {\n if (didTimeout()) {\n throw new TimeoutError(requestInfo, config.timeout ?? 0);\n }\n throw cause;\n }\n\n throw new NetworkError(\n cause instanceof Error ? cause.message : \"Network request failed\",\n requestInfo,\n cause,\n );\n }\n\n cancel();\n\n if (config.onResponse) {\n await config.onResponse(response);\n }\n\n if (!response.ok) {\n const data = await parseResponse<unknown>(response, requestInfo, config.responseType).catch(\n () => undefined,\n );\n\n const errorResponse: DexiXResponse = {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n url: response.url || url,\n };\n\n throw new HTTPError(requestInfo, errorResponse);\n }\n\n return parseResponse<T>(response, requestInfo, config.responseType);\n}\n","import { dispatch } from \"./dispatch.js\";\nimport { mergeConfig } from \"../utils/index.js\";\nimport type {\n DexiXInstance,\n HttpMethod,\n RequestBody,\n RequestConfig,\n ResolvedRequestConfig,\n} from \"../types/index.js\";\n\nfunction request<T>(\n defaults: RequestConfig,\n method: HttpMethod,\n url: string,\n config?: RequestConfig,\n): Promise<T> {\n const resolved: ResolvedRequestConfig = {\n ...mergeConfig(defaults, config ?? {}),\n method,\n url,\n };\n\n return dispatch<T>(resolved);\n}\n\nfunction requestWithBody<T>(\n defaults: RequestConfig,\n method: HttpMethod,\n url: string,\n body?: RequestBody,\n config?: RequestConfig,\n): Promise<T> {\n return request<T>(defaults, method, url, { ...config, body: body ?? config?.body });\n}\n\n/**\n * Creates a new DexiX Request instance. Calling the instance directly\n * performs a GET request; method-specific helpers (`get`, `post`, `put`,\n * `patch`, `delete`, `head`, `options`) are attached for convenience.\n */\nexport function createInstance(defaults: RequestConfig = {}): DexiXInstance {\n const instance = (<T>(url: string, config?: RequestConfig): Promise<T> =>\n request<T>(defaults, \"GET\", url, config)) as DexiXInstance;\n\n instance.get = (url, config) => request(defaults, \"GET\", url, config);\n instance.post = (url, body, config) => requestWithBody(defaults, \"POST\", url, body, config);\n instance.put = (url, body, config) => requestWithBody(defaults, \"PUT\", url, body, config);\n instance.patch = (url, body, config) => requestWithBody(defaults, \"PATCH\", url, body, config);\n instance.delete = (url, config) => request(defaults, \"DELETE\", url, config);\n instance.head = (url, config) => request(defaults, \"HEAD\", url, config);\n instance.options = (url, config) => request(defaults, \"OPTIONS\", url, config);\n\n Object.defineProperty(instance, \"defaults\", {\n value: defaults,\n writable: false,\n enumerable: true,\n });\n\n instance.create = (config?: RequestConfig) => createInstance(mergeConfig(defaults, config ?? {}));\n\n return instance;\n}\n","import { createInstance } from \"./core/index.js\";\nimport type { DexiXInstance } from \"./types/index.js\";\n\nexport type {\n DexiXInstance,\n RequestConfig,\n HttpMethod,\n QueryParams,\n RequestBody,\n HeadersInput,\n ResponseType,\n DexiXResponse,\n DexiXRequestInfo,\n} from \"./types/index.js\";\n\nexport { DexiXError, NetworkError, TimeoutError, HTTPError, ParseError } from \"./errors/index.js\";\n\n/**\n * The default DexiX Request instance.\n *\n * @example\n * ```ts\n * import dx from \"dexix-request\";\n *\n * const users = await dx(\"/users\");\n * const user = await dx.get<User>(\"/users/1\");\n * await dx.post(\"/posts\", { title: \"Hello\" });\n * ```\n */\nconst dx: DexiXInstance = createInstance();\n\nexport { createInstance };\nexport default dx;\n"]}
1
+ {"version":3,"sources":["../src/errors/DexiXError.ts","../src/errors/HTTPError.ts","../src/errors/NetworkError.ts","../src/errors/TimeoutError.ts","../src/utils/buildURL.ts","../src/utils/mergeHeaders.ts","../src/utils/mergeConfig.ts","../src/utils/isPlainObject.ts","../src/utils/serializeBody.ts","../src/errors/ParseError.ts","../src/utils/parseResponse.ts","../src/utils/combineSignals.ts","../src/core/dispatch.ts","../src/core/interceptors.ts","../src/core/instance.ts","../src/index.ts"],"names":["DexiXError","message","request","response","HTTPError","NetworkError","cause","TimeoutError","timeout","isAbsoluteURL","url","joinURL","baseURL","trimmedBase","trimmedPath","appendQuery","query","path","existingSearch","params","key","value","item","search","buildURL","joined","mergeHeaders","sources","result","source","mergeConfig","parent","child","isPlainObject","prototype","isNativeBodyType","serializeBody","body","ParseError","EMPTY_STATUS_CODES","inferResponseType","contentType","parseResponse","responseType","type","text","failedResponse","combineSignals","userSignal","controller","timedOut","timer","onUserAbort","cancel","attempt","config","headers","requestInfo","signal","didTimeout","init","errorResponse","sleep","ms","resolve","defaultRetryDelay","attemptIndex","defaultRetryOn","error","dispatch","retries","retryDelay","retryOn","delay","InterceptorManager","fulfilled","rejected","id","handler","runRequestChain","manager","current","runResponseChain","outcome","failed","caught","defaults","interceptors","method","merged","resolved","requestWithBody","createInstance","requestInterceptors","responseInterceptors","instance","onFulfilled","onRejected","dx","index_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\nexport class DexiXError extends Error {\n public readonly request: DexiXRequestInfo;\n public readonly response?: DexiXResponse;\n public readonly status?: number;\n public readonly headers?: Headers;\n public readonly url: string;\n\n public constructor(\n message: string,\n request: DexiXRequestInfo,\n response?: DexiXResponse,\n ) {\n super(message);\n this.name = \"DexiXError\";\n this.request = request;\n this.response = response;\n this.status = response?.status;\n this.headers = response?.headers;\n this.url = request.url;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\nexport class HTTPError extends DexiXError {\n public constructor(request: DexiXRequestInfo, response: DexiXResponse) {\n super(\n `Request failed with status ${response.status} (${response.statusText}) for ${request.url}`,\n request,\n response,\n );\n this.name = \"HTTPError\";\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo } from \"../types/index.js\";\n\nexport class NetworkError extends DexiXError {\n public constructor(message: string, request: DexiXRequestInfo, cause?: unknown) {\n super(message || \"Network request failed\", request);\n this.name = \"NetworkError\";\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo } from \"../types/index.js\";\n\nexport class TimeoutError extends DexiXError {\n public readonly timeout: number;\n\n public constructor(request: DexiXRequestInfo, timeout: number) {\n super(`Request to ${request.url} timed out after ${timeout}ms`, request);\n this.name = \"TimeoutError\";\n this.timeout = timeout;\n }\n}\n","import type { QueryParams } from \"../types/index.js\";\n\nfunction isAbsoluteURL(url: string): boolean {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\nfunction joinURL(baseURL: string, url: string): string {\n if (!baseURL) return url;\n if (isAbsoluteURL(url)) return url;\n\n const trimmedBase = baseURL.endsWith(\"/\") ? baseURL.slice(0, -1) : baseURL;\n const trimmedPath = url.startsWith(\"/\") ? url : `/${url}`;\n return `${trimmedBase}${trimmedPath}`;\n}\n\nfunction appendQuery(url: string, query?: QueryParams): string {\n if (!query || Object.keys(query).length === 0) {\n return url;\n }\n\n const [path, existingSearch = \"\"] = url.split(\"?\");\n const params = new URLSearchParams(existingSearch);\n\n for (const [key, value] of Object.entries(query)) {\n if (value === null || value === undefined) continue;\n\n if (Array.isArray(value)) {\n for (const item of value) {\n params.append(key, String(item));\n }\n } else {\n params.append(key, String(value));\n }\n }\n\n const search = params.toString();\n return search ? `${path}?${search}` : (path as string);\n}\n\nexport function buildURL(baseURL: string | undefined, url: string, query?: QueryParams): string {\n const joined = joinURL(baseURL ?? \"\", url);\n return appendQuery(joined, query);\n}\n","import type { HeadersInput } from \"../types/index.js\";\n\nexport function mergeHeaders(...sources: Array<HeadersInput | undefined>): Headers {\n const result = new Headers();\n\n for (const source of sources) {\n if (!source) continue;\n\n if (source instanceof Headers) {\n source.forEach((value, key) => {\n result.set(key, value);\n });\n continue;\n }\n\n if (Array.isArray(source)) {\n for (const [key, value] of source) {\n result.set(key, value);\n }\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined) {\n result.delete(key);\n } else {\n result.set(key, value);\n }\n }\n }\n\n return result;\n}\n","import { mergeHeaders } from \"./mergeHeaders.js\";\nimport type { RequestConfig } from \"../types/index.js\";\n\nexport function mergeConfig(parent: RequestConfig, child: RequestConfig): RequestConfig {\n return {\n ...parent,\n ...child,\n headers: mergeHeaders(parent.headers, child.headers),\n query: { ...parent.query, ...child.query },\n };\n}\n","export function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n","import { isPlainObject } from \"./isPlainObject.js\";\nimport type { RequestBody } from \"../types/index.js\";\n\nexport interface SerializedBody {\n body: BodyInit | null | undefined;\n contentType?: string;\n}\n\nfunction isNativeBodyType(value: unknown): value is BodyInit {\n return (\n typeof value === \"string\" ||\n value instanceof FormData ||\n value instanceof Blob ||\n value instanceof URLSearchParams ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n value instanceof ReadableStream\n );\n}\n\nexport function serializeBody(body: RequestBody): SerializedBody {\n if (body === null || body === undefined) {\n return { body: undefined };\n }\n\n if (isNativeBodyType(body)) {\n if (body instanceof FormData) {\n return { body };\n }\n if (body instanceof URLSearchParams) {\n return { body, contentType: \"application/x-www-form-urlencoded;charset=UTF-8\" };\n }\n if (typeof body === \"string\") {\n return { body, contentType: \"text/plain;charset=UTF-8\" };\n }\n return { body };\n }\n\n if (isPlainObject(body) || Array.isArray(body)) {\n return {\n body: JSON.stringify(body),\n contentType: \"application/json;charset=UTF-8\",\n };\n }\n\n return {\n body: JSON.stringify(body),\n contentType: \"application/json;charset=UTF-8\",\n };\n}\n","import { DexiXError } from \"./DexiXError.js\";\nimport type { DexiXRequestInfo, DexiXResponse } from \"../types/index.js\";\n\nexport class ParseError extends DexiXError {\n public constructor(request: DexiXRequestInfo, response: DexiXResponse, cause?: unknown) {\n super(`Failed to parse response body from ${request.url}`, request, response);\n this.name = \"ParseError\";\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n","import { ParseError } from \"../errors/ParseError.js\";\nimport type { DexiXRequestInfo, DexiXResponse, ResponseType } from \"../types/index.js\";\n\nconst EMPTY_STATUS_CODES = new Set([204, 205, 304]);\n\nfunction inferResponseType(response: Response): ResponseType {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\n return \"json\";\n }\n if (contentType.startsWith(\"text/\")) {\n return \"text\";\n }\n return \"json\";\n}\n\nexport async function parseResponse<T>(\n response: Response,\n request: DexiXRequestInfo,\n responseType?: ResponseType,\n): Promise<T> {\n if (request.method === \"HEAD\" || EMPTY_STATUS_CODES.has(response.status)) {\n return undefined as T;\n }\n\n const type = responseType ?? inferResponseType(response);\n\n try {\n switch (type) {\n case \"json\": {\n const text = await response.text();\n if (text.length === 0) {\n return undefined as T;\n }\n return JSON.parse(text) as T;\n }\n case \"text\":\n return (await response.text()) as unknown as T;\n case \"blob\":\n return (await response.blob()) as unknown as T;\n case \"arrayBuffer\":\n return (await response.arrayBuffer()) as unknown as T;\n case \"stream\":\n return response.body as unknown as T;\n default:\n return (await response.text()) as unknown as T;\n }\n } catch (cause) {\n const failedResponse: DexiXResponse = {\n data: undefined,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n url: response.url || request.url,\n };\n throw new ParseError(request, failedResponse, cause);\n }\n}\n","export function combineSignals(\n userSignal: AbortSignal | undefined,\n timeout: number | undefined,\n): {\n signal: AbortSignal | undefined;\n cancel: () => void;\n didTimeout: () => boolean;\n} {\n if (!timeout || timeout <= 0) {\n return {\n signal: userSignal,\n cancel: () => {},\n didTimeout: () => false,\n };\n }\n\n const controller = new AbortController();\n let timedOut = false;\n\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n\n const onUserAbort = () => controller.abort();\n userSignal?.addEventListener(\"abort\", onUserAbort, { once: true });\n\n const cancel = () => {\n clearTimeout(timer);\n userSignal?.removeEventListener(\"abort\", onUserAbort);\n };\n\n return {\n signal: controller.signal,\n cancel,\n didTimeout: () => timedOut,\n };\n}\n","import { HTTPError } from \"../errors/HTTPError.js\";\nimport { NetworkError } from \"../errors/NetworkError.js\";\nimport { TimeoutError } from \"../errors/TimeoutError.js\";\nimport { buildURL, combineSignals, mergeHeaders, parseResponse, serializeBody } from \"../utils/index.js\";\nimport type { DexiXRequestInfo, DexiXResponse, ResolvedRequestConfig } from \"../types/index.js\";\n\nasync function attempt<T>(config: ResolvedRequestConfig): Promise<T> {\n const { body, contentType } = serializeBody(config.body);\n\n const headers = mergeHeaders(\n contentType ? { \"content-type\": contentType } : undefined,\n config.headers,\n );\n\n const url = buildURL(config.baseURL, config.url, config.query);\n\n const requestInfo: DexiXRequestInfo = {\n url,\n method: config.method,\n headers,\n body: config.body,\n };\n\n const { signal, cancel, didTimeout } = combineSignals(config.signal, config.timeout);\n\n const init: RequestInit = {\n method: config.method,\n headers,\n body: config.method === \"GET\" || config.method === \"HEAD\" ? undefined : body,\n signal,\n credentials: config.credentials,\n cache: config.cache,\n redirect: config.redirect,\n referrerPolicy: config.referrerPolicy,\n mode: config.mode,\n };\n\n const request = new Request(url, init);\n\n if (config.onRequest) {\n await config.onRequest(request);\n }\n\n let response: Response;\n\n try {\n response = await fetch(request);\n } catch (cause) {\n cancel();\n\n if (cause instanceof DOMException && cause.name === \"AbortError\") {\n if (didTimeout()) {\n throw new TimeoutError(requestInfo, config.timeout ?? 0);\n }\n throw cause;\n }\n\n throw new NetworkError(\n cause instanceof Error ? cause.message : \"Network request failed\",\n requestInfo,\n cause,\n );\n }\n\n cancel();\n\n if (config.onResponse) {\n await config.onResponse(response);\n }\n\n if (!response.ok) {\n const data = await parseResponse<unknown>(response, requestInfo, config.responseType).catch(\n () => undefined,\n );\n\n const errorResponse: DexiXResponse = {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n url: response.url || url,\n };\n\n throw new HTTPError(requestInfo, errorResponse);\n }\n\n return parseResponse<T>(response, requestInfo, config.responseType);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction defaultRetryDelay(attemptIndex: number): number {\n return Math.min(250 * 2 ** attemptIndex, 8000);\n}\n\nfunction defaultRetryOn(error: unknown): boolean {\n if (error instanceof HTTPError) {\n return error.status !== undefined && (error.status >= 500 || error.status === 429);\n }\n return error instanceof NetworkError || error instanceof TimeoutError;\n}\n\nexport async function dispatch<T>(config: ResolvedRequestConfig): Promise<T> {\n const retries = config.retries ?? 0;\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const retryOn = config.retryOn ?? defaultRetryOn;\n\n for (let attemptIndex = 0; ; attemptIndex++) {\n try {\n return await attempt<T>(config);\n } catch (error) {\n const canRetry = attemptIndex < retries && retryOn(error, attemptIndex);\n if (!canRetry) throw error;\n\n const delay = typeof retryDelay === \"function\" ? retryDelay(attemptIndex, error) : retryDelay;\n if (delay > 0) await sleep(delay);\n }\n }\n}\n","import type { InterceptorFulfilled, InterceptorRejected } from \"../types/index.js\";\n\ninterface InterceptorHandler<V> {\n fulfilled: InterceptorFulfilled<V>;\n rejected?: InterceptorRejected;\n}\n\nexport class InterceptorManager<V> {\n private handlers: Array<InterceptorHandler<V> | null> = [];\n\n use(fulfilled: InterceptorFulfilled<V>, rejected?: InterceptorRejected): number {\n this.handlers.push({ fulfilled, rejected });\n return this.handlers.length - 1;\n }\n\n eject(id: number): void {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n clear(): void {\n this.handlers = [];\n }\n\n list(): Array<InterceptorHandler<V>> {\n return this.handlers.filter((handler): handler is InterceptorHandler<V> => handler !== null);\n }\n}\n","import { dispatch } from \"./dispatch.js\";\nimport { InterceptorManager } from \"./interceptors.js\";\nimport { mergeConfig } from \"../utils/index.js\";\nimport type {\n DexiXInstance,\n DexiXInterceptors,\n HttpMethod,\n RequestBody,\n RequestConfig,\n ResolvedRequestConfig,\n} from \"../types/index.js\";\n\ninterface Interceptors {\n request: InterceptorManager<ResolvedRequestConfig>;\n response: InterceptorManager<unknown>;\n}\n\nasync function runRequestChain(\n manager: InterceptorManager<ResolvedRequestConfig>,\n config: ResolvedRequestConfig,\n): Promise<ResolvedRequestConfig> {\n let current = config;\n\n for (const handler of manager.list()) {\n try {\n current = await handler.fulfilled(current);\n } catch (error) {\n if (!handler.rejected) throw error;\n current = (await handler.rejected(error)) as ResolvedRequestConfig;\n }\n }\n\n return current;\n}\n\nasync function runResponseChain<T>(\n manager: InterceptorManager<unknown>,\n outcome: Promise<T>,\n): Promise<T> {\n let value: unknown;\n let error: unknown;\n let failed = false;\n\n try {\n value = await outcome;\n } catch (caught) {\n failed = true;\n error = caught;\n }\n\n for (const handler of manager.list()) {\n if (failed) {\n if (!handler.rejected) continue;\n try {\n value = await handler.rejected(error);\n failed = false;\n } catch (caught) {\n error = caught;\n }\n continue;\n }\n value = await handler.fulfilled(value);\n }\n\n if (failed) throw error;\n return value as T;\n}\n\nfunction request<T>(\n defaults: RequestConfig,\n interceptors: Interceptors,\n method: HttpMethod,\n url: string,\n config?: RequestConfig,\n): Promise<T> {\n const merged: ResolvedRequestConfig = {\n ...mergeConfig(defaults, config ?? {}),\n method,\n url,\n };\n\n const outcome = (async (): Promise<T> => {\n const resolved = await runRequestChain(interceptors.request, merged);\n return dispatch<T>(resolved);\n })();\n\n return runResponseChain(interceptors.response, outcome);\n}\n\nfunction requestWithBody<T>(\n defaults: RequestConfig,\n interceptors: Interceptors,\n method: HttpMethod,\n url: string,\n body?: RequestBody,\n config?: RequestConfig,\n): Promise<T> {\n return request<T>(defaults, interceptors, method, url, { ...config, body: body ?? config?.body });\n}\n\nexport function createInstance(defaults: RequestConfig = {}): DexiXInstance {\n const requestInterceptors = new InterceptorManager<ResolvedRequestConfig>();\n const responseInterceptors = new InterceptorManager<unknown>();\n const interceptors: Interceptors = { request: requestInterceptors, response: responseInterceptors };\n\n const instance = (<T>(url: string, config?: RequestConfig): Promise<T> =>\n request<T>(defaults, interceptors, \"GET\", url, config)) as DexiXInstance;\n\n instance.get = (url, config) => request(defaults, interceptors, \"GET\", url, config);\n instance.post = (url, body, config) => requestWithBody(defaults, interceptors, \"POST\", url, body, config);\n instance.put = (url, body, config) => requestWithBody(defaults, interceptors, \"PUT\", url, body, config);\n instance.patch = (url, body, config) => requestWithBody(defaults, interceptors, \"PATCH\", url, body, config);\n instance.delete = (url, config) => request(defaults, interceptors, \"DELETE\", url, config);\n instance.head = (url, config) => request(defaults, interceptors, \"HEAD\", url, config);\n instance.options = (url, config) => request(defaults, interceptors, \"OPTIONS\", url, config);\n\n Object.defineProperty(instance, \"defaults\", {\n value: defaults,\n writable: false,\n enumerable: true,\n });\n\n const publicInterceptors: DexiXInterceptors = {\n request: {\n use: (onFulfilled, onRejected) => requestInterceptors.use(onFulfilled, onRejected),\n eject: (id) => requestInterceptors.eject(id),\n clear: () => requestInterceptors.clear(),\n },\n response: {\n use: (onFulfilled, onRejected) => responseInterceptors.use(onFulfilled, onRejected),\n eject: (id) => responseInterceptors.eject(id),\n clear: () => responseInterceptors.clear(),\n },\n };\n\n Object.defineProperty(instance, \"interceptors\", {\n value: publicInterceptors,\n writable: false,\n enumerable: true,\n });\n\n instance.create = (config) => createInstance(mergeConfig(defaults, config ?? {}));\n\n return instance;\n}\n","import { createInstance } from \"./core/index.js\";\nimport type { DexiXInstance } from \"./types/index.js\";\n\nexport type {\n DexiXInstance,\n RequestConfig,\n HttpMethod,\n QueryParams,\n RequestBody,\n HeadersInput,\n ResponseType,\n DexiXResponse,\n DexiXRequestInfo,\n DexiXInterceptors,\n DexiXInterceptorManager,\n RetryDelay,\n RetryPredicate,\n} from \"./types/index.js\";\n\nexport { DexiXError, NetworkError, TimeoutError, HTTPError, ParseError } from \"./errors/index.js\";\n\nconst dx: DexiXInstance = createInstance();\n\nexport { createInstance };\nexport default dx;\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dexix-request",
3
- "version": "1.0.0",
4
- "description": "A tiny, modern, zero-dependency HTTP client for JavaScript and TypeScript. Built for the browser, Node.js, and React.",
3
+ "version": "1.1.0",
4
+ "description": "A tiny, zero-dependency HTTP client for JavaScript and TypeScript with interceptors, built-in retries, and a beautiful CLI. Built for the browser, Node.js, and React.",
5
5
  "keywords": [
6
6
  "http",
7
7
  "http-client",
@@ -11,12 +11,15 @@
11
11
  "typescript",
12
12
  "axios-alternative",
13
13
  "react",
14
- "node"
14
+ "node",
15
+ "cli",
16
+ "interceptors",
17
+ "retry"
15
18
  ],
16
19
  "homepage": "https://github.com/AkbariCodes/DexiX-Request/#readme",
17
20
  "bugs": {
18
- "url": "https://github.com/AkbariCodes/DexiX-Request/issues"
19
- },
21
+ "url": "https://github.com/AkbariCodes/DexiX-Request/issues"
22
+ },
20
23
  "repository": {
21
24
  "type": "git",
22
25
  "url": "git+https://github.com/AkbariCodes/DexiX-Request.git"
@@ -28,6 +31,10 @@
28
31
  "main": "./dist/index.cjs",
29
32
  "module": "./dist/index.js",
30
33
  "types": "./dist/index.d.ts",
34
+ "bin": {
35
+ "dx": "./bin/dexix.mjs",
36
+ "dexix": "./bin/dexix.mjs"
37
+ },
31
38
  "exports": {
32
39
  ".": {
33
40
  "types": "./dist/index.d.ts",
@@ -38,6 +45,8 @@
38
45
  },
39
46
  "files": [
40
47
  "dist",
48
+ "bin",
49
+ "scripts/postinstall.mjs",
41
50
  "README.md",
42
51
  "LICENSE",
43
52
  "CHANGELOG.md"
@@ -53,12 +62,13 @@
53
62
  "test:coverage": "vitest run --coverage",
54
63
  "typecheck": "tsc --noEmit",
55
64
  "lint": "tsc --noEmit",
56
- "prepublishOnly": "npm run build"
65
+ "prepublishOnly": "npm run build",
66
+ "postinstall": "node ./scripts/postinstall.mjs"
57
67
  },
58
68
  "devDependencies": {
59
69
  "tsup": "^8.5.1",
60
70
  "typescript": "^5.9.3",
61
- "vitest": "^2.0.5"
71
+ "vitest": "^4.1.10"
62
72
  },
63
73
  "publishConfig": {
64
74
  "access": "public"
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { fileURLToPath } from "node:url";
4
+ import path from "node:path";
5
+
6
+ const isCI = Boolean(process.env.CI);
7
+ const noColor = Boolean(process.env.NO_COLOR);
8
+ const isTTY = Boolean(process.stdout.isTTY);
9
+
10
+ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
11
+ const isTopLevelInstall = process.env.INIT_CWD ? path.resolve(process.env.INIT_CWD) === packageRoot : true;
12
+
13
+ if (isCI || noColor || !isTTY || !isTopLevelInstall) {
14
+ process.exit(0);
15
+ }
16
+
17
+ const reset = "\x1b[0m";
18
+ const bold = "\x1b[1m";
19
+ const dim = "\x1b[2m";
20
+ const cyan = "\x1b[36m";
21
+ const magenta = "\x1b[35m";
22
+ const green = "\x1b[32m";
23
+ const gray = "\x1b[90m";
24
+
25
+ const logo = [
26
+ " ____ _ __ __",
27
+ " | _ \\ _____ __(_)\\ \\/ /",
28
+ " | | | |/ _ \\ \\/ /| | \\ / ",
29
+ " | |_| | __/> < | | / \\ ",
30
+ " |____/ \\___/_/\\_\\|_|/_/\\_\\",
31
+ ];
32
+
33
+ const gradient = [cyan, cyan, magenta, magenta, green];
34
+
35
+ console.log("");
36
+ logo.forEach((line, i) => {
37
+ console.log(`${gradient[i % gradient.length]}${bold}${line}${reset}`);
38
+ });
39
+ console.log("");
40
+ console.log(` ${bold}DexiX Request${reset} ${dim}installed successfully.${reset}`);
41
+ console.log(` ${dim}A tiny, zero-dependency HTTP client — faster and leaner than Axios.${reset}`);
42
+ console.log("");
43
+ console.log(` ${green}✓${reset} ${dim}Import it:${reset} ${cyan}import dx from "dexix-request"${reset}`);
44
+ console.log(` ${green}✓${reset} ${dim}Use the CLI:${reset} ${cyan}npx dx get https://api.example.com${reset}`);
45
+ console.log(` ${green}✓${reset} ${dim}Read the docs:${reset} ${gray}https://github.com/AkbariCodes/DexiX-Request#readme${reset}`);
46
+ console.log("");