@fetchkit/ffetch 5.4.2 → 5.4.8
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/LICENSE +20 -20
- package/README.md +396 -396
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/plugins/bulkhead.d.cts +1 -1
- package/dist/plugins/bulkhead.d.ts +1 -1
- package/dist/plugins/circuit.d.cts +1 -1
- package/dist/plugins/circuit.d.ts +1 -1
- package/dist/plugins/context-id.d.cts +1 -1
- package/dist/plugins/context-id.d.ts +1 -1
- package/dist/plugins/dedupe.cjs.map +1 -1
- package/dist/plugins/dedupe.d.cts +1 -1
- package/dist/plugins/dedupe.d.ts +1 -1
- package/dist/plugins/dedupe.js.map +1 -1
- package/dist/plugins/download-progress.d.cts +1 -1
- package/dist/plugins/download-progress.d.ts +1 -1
- package/dist/plugins/hedge.d.cts +1 -1
- package/dist/plugins/hedge.d.ts +1 -1
- package/dist/plugins/request-shortcuts.d.cts +2 -2
- package/dist/plugins/request-shortcuts.d.ts +2 -2
- package/dist/plugins/response-shortcuts.cjs +1 -1
- package/dist/plugins/response-shortcuts.cjs.map +1 -1
- package/dist/plugins/response-shortcuts.d.cts +1 -1
- package/dist/plugins/response-shortcuts.d.ts +1 -1
- package/dist/plugins/response-shortcuts.js +1 -1
- package/dist/plugins/response-shortcuts.js.map +1 -1
- package/dist/{plugins-DqBQVM4I.d.cts → plugins-CV5-_6ys.d.cts} +1 -1
- package/dist/{plugins-DqBQVM4I.d.ts → plugins-CV5-_6ys.d.ts} +1 -1
- package/dist/{types-DbmivXba.d.cts → types-CTF4bAEG.d.cts} +2 -2
- package/dist/{types-DpHoyvhy.d.ts → types-D_oyy1F_.d.ts} +2 -2
- package/package.json +4 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { H as Hooks } from './types-
|
|
3
|
-
import { C as ClientPlugin,
|
|
4
|
-
export {
|
|
1
|
+
import { a as FFetchOptions, F as FFetch } from './types-CTF4bAEG.cjs';
|
|
2
|
+
export { H as Hooks } from './types-CTF4bAEG.cjs';
|
|
3
|
+
import { C as ClientPlugin, a as PluginExtensionBase, d as PluginRequestPromiseExtensionBase, b as PluginExtensions, e as PluginRequestPromiseExtensions } from './plugins-CV5-_6ys.cjs';
|
|
4
|
+
export { P as PluginDispatch, c as PluginRequestContext, f as PluginSetupContext } from './plugins-CV5-_6ys.cjs';
|
|
5
5
|
|
|
6
6
|
declare function createClient<TPlugins extends readonly ClientPlugin<PluginExtensionBase, PluginRequestPromiseExtensionBase>[] = readonly ClientPlugin<PluginExtensionBase, PluginRequestPromiseExtensionBase>[]>(opts?: FFetchOptions<TPlugins>): FFetch<PluginExtensions<TPlugins>, PluginRequestPromiseExtensions<TPlugins>>;
|
|
7
7
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { H as Hooks } from './types-
|
|
3
|
-
import { C as ClientPlugin,
|
|
4
|
-
export {
|
|
1
|
+
import { a as FFetchOptions, F as FFetch } from './types-D_oyy1F_.js';
|
|
2
|
+
export { H as Hooks } from './types-D_oyy1F_.js';
|
|
3
|
+
import { C as ClientPlugin, a as PluginExtensionBase, d as PluginRequestPromiseExtensionBase, b as PluginExtensions, e as PluginRequestPromiseExtensions } from './plugins-CV5-_6ys.js';
|
|
4
|
+
export { P as PluginDispatch, c as PluginRequestContext, f as PluginSetupContext } from './plugins-CV5-_6ys.js';
|
|
5
5
|
|
|
6
6
|
declare function createClient<TPlugins extends readonly ClientPlugin<PluginExtensionBase, PluginRequestPromiseExtensionBase>[] = readonly ClientPlugin<PluginExtensionBase, PluginRequestPromiseExtensionBase>[]>(opts?: FFetchOptions<TPlugins>): FFetch<PluginExtensions<TPlugins>, PluginRequestPromiseExtensions<TPlugins>>;
|
|
7
7
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/dedupe.ts","../../src/dedupeRequestHash.ts"],"sourcesContent":["import type { ClientPlugin, PluginRequestContext } from '../plugins.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/dedupe.ts","../../src/dedupeRequestHash.ts"],"sourcesContent":["import type { ClientPlugin, PluginRequestContext } from '../plugins.js'\nimport {\n dedupeRequestHash,\n type DedupeHashParams,\n} from '../dedupeRequestHash.js'\n\ntype DedupeEntry = {\n promise: Promise<Response>\n resolve: (value: Response | PromiseLike<Response>) => void\n reject: (reason?: unknown) => void\n createdAt: number\n}\n\nexport type DedupePluginOptions = {\n hashFn?: (params: DedupeHashParams) => string | undefined\n ttl?: number\n sweepInterval?: number\n order?: number\n}\n\nfunction contextToHashParams(ctx: PluginRequestContext): DedupeHashParams {\n return {\n method: ctx.request.method,\n url: ctx.request.url,\n body: (ctx.init.body ?? null) as DedupeHashParams['body'],\n headers: ctx.request.headers,\n signal:\n ctx.init.signal === undefined || ctx.init.signal === null\n ? undefined\n : ctx.init.signal,\n requestInit: ctx.init,\n request: ctx.request,\n }\n}\n\nexport function dedupePlugin(options: DedupePluginOptions = {}): ClientPlugin {\n const {\n hashFn = dedupeRequestHash,\n ttl,\n sweepInterval = 5000,\n order = 10,\n } = options\n\n const inFlight = new Map<string, DedupeEntry>()\n let sweeper: ReturnType<typeof setInterval> | undefined\n\n function startSweeper() {\n if (sweeper || typeof ttl !== 'number' || ttl <= 0) return\n sweeper = setInterval(() => {\n const now = Date.now()\n for (const [key, entry] of inFlight.entries()) {\n if (now - entry.createdAt > ttl) {\n inFlight.delete(key)\n }\n }\n if (inFlight.size === 0 && sweeper) {\n clearInterval(sweeper)\n sweeper = undefined\n }\n }, sweepInterval)\n }\n\n function stopSweeperIfIdle() {\n if (inFlight.size === 0 && sweeper) {\n clearInterval(sweeper)\n sweeper = undefined\n }\n }\n\n return {\n name: 'dedupe',\n order,\n wrapDispatch: (next) => async (ctx) => {\n const key = hashFn(contextToHashParams(ctx))\n ctx.state.dedupeKey = key\n\n if (!key) {\n return next(ctx)\n }\n\n const existing = inFlight.get(key)\n if (existing) {\n return existing.promise\n }\n\n let settled = false\n let resolveFn: (value: Response | PromiseLike<Response>) => void\n let rejectFn: (reason?: unknown) => void\n\n const placeholder = new Promise<Response>((resolve, reject) => {\n resolveFn = (value) => {\n if (!settled) {\n settled = true\n resolve(value)\n }\n }\n rejectFn = (reason) => {\n if (!settled) {\n settled = true\n reject(reason)\n }\n }\n })\n // Internal placeholder can reject before a consumer attaches handlers.\n // Mark it observed to avoid unhandled-rejection noise.\n placeholder.catch(() => undefined)\n\n inFlight.set(key, {\n promise: placeholder,\n resolve: resolveFn!,\n reject: rejectFn!,\n createdAt: Date.now(),\n })\n startSweeper()\n\n const actualPromise = next(ctx)\n const entry = inFlight.get(key)\n if (entry) {\n actualPromise.then(\n (result) => entry.resolve(result),\n (error) => entry.reject(error)\n )\n inFlight.set(key, {\n ...entry,\n promise: actualPromise,\n })\n }\n\n return actualPromise.finally(() => {\n const current = inFlight.get(key)\n if (current?.promise === actualPromise) {\n inFlight.delete(key)\n stopSweeperIfIdle()\n }\n })\n },\n }\n}\n\nexport { dedupeRequestHash }\nexport type { DedupeHashParams }\n","export type DedupeHashParams = {\n method: string\n url: string\n body:\n | string\n | FormData\n | URLSearchParams\n | Blob\n | ArrayBuffer\n | BufferSource\n | null\n | ReadableStream<unknown>\n headers?: Headers | Record<string, string>\n signal?: AbortSignal\n requestInit?: RequestInit\n request?: Request\n}\n\nexport function dedupeRequestHash(\n params: DedupeHashParams\n): string | undefined {\n const { method, url, body } = params\n let bodyString = ''\n if (body instanceof FormData) {\n // Skip deduplication for FormData\n return undefined\n }\n // Skip deduplication for ReadableStream\n if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) {\n return undefined\n }\n if (typeof body === 'string') {\n bodyString = body\n } else if (body instanceof URLSearchParams) {\n bodyString = body.toString()\n } else if (body instanceof ArrayBuffer) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Uint8Array) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Blob) {\n bodyString = `[blob:${body.type}:${body.size}]`\n } else if (body == null) {\n bodyString = ''\n } else {\n try {\n bodyString = JSON.stringify(body)\n } catch {\n bodyString = '[unserializable-body]'\n }\n }\n return `${method.toUpperCase()}|${url}|${bodyString}`\n}\n"],"mappings":"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","names":[]}
|
package/dist/plugins/dedupe.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/dedupeRequestHash.ts","../../src/plugins/dedupe.ts"],"sourcesContent":["export type DedupeHashParams = {\n method: string\n url: string\n body:\n | string\n | FormData\n | URLSearchParams\n | Blob\n | ArrayBuffer\n | BufferSource\n | null\n | ReadableStream<unknown>\n headers?: Headers | Record<string, string>\n signal?: AbortSignal\n requestInit?: RequestInit\n request?: Request\n}\n\nexport function dedupeRequestHash(\n params: DedupeHashParams\n): string | undefined {\n const { method, url, body } = params\n let bodyString = ''\n if (body instanceof FormData) {\n // Skip deduplication for FormData\n return undefined\n }\n // Skip deduplication for ReadableStream\n if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) {\n return undefined\n }\n if (typeof body === 'string') {\n bodyString = body\n } else if (body instanceof URLSearchParams) {\n bodyString = body.toString()\n } else if (body instanceof ArrayBuffer) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Uint8Array) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Blob) {\n bodyString = `[blob:${body.type}:${body.size}]`\n } else if (body == null) {\n bodyString = ''\n } else {\n try {\n bodyString = JSON.stringify(body)\n } catch {\n bodyString = '[unserializable-body]'\n }\n }\n return `${method.toUpperCase()}|${url}|${bodyString}`\n}\n","import type { ClientPlugin, PluginRequestContext } from '../plugins.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/dedupeRequestHash.ts","../../src/plugins/dedupe.ts"],"sourcesContent":["export type DedupeHashParams = {\n method: string\n url: string\n body:\n | string\n | FormData\n | URLSearchParams\n | Blob\n | ArrayBuffer\n | BufferSource\n | null\n | ReadableStream<unknown>\n headers?: Headers | Record<string, string>\n signal?: AbortSignal\n requestInit?: RequestInit\n request?: Request\n}\n\nexport function dedupeRequestHash(\n params: DedupeHashParams\n): string | undefined {\n const { method, url, body } = params\n let bodyString = ''\n if (body instanceof FormData) {\n // Skip deduplication for FormData\n return undefined\n }\n // Skip deduplication for ReadableStream\n if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) {\n return undefined\n }\n if (typeof body === 'string') {\n bodyString = body\n } else if (body instanceof URLSearchParams) {\n bodyString = body.toString()\n } else if (body instanceof ArrayBuffer) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Uint8Array) {\n bodyString = Buffer.from(body).toString('base64')\n } else if (body instanceof Blob) {\n bodyString = `[blob:${body.type}:${body.size}]`\n } else if (body == null) {\n bodyString = ''\n } else {\n try {\n bodyString = JSON.stringify(body)\n } catch {\n bodyString = '[unserializable-body]'\n }\n }\n return `${method.toUpperCase()}|${url}|${bodyString}`\n}\n","import type { ClientPlugin, PluginRequestContext } from '../plugins.js'\nimport {\n dedupeRequestHash,\n type DedupeHashParams,\n} from '../dedupeRequestHash.js'\n\ntype DedupeEntry = {\n promise: Promise<Response>\n resolve: (value: Response | PromiseLike<Response>) => void\n reject: (reason?: unknown) => void\n createdAt: number\n}\n\nexport type DedupePluginOptions = {\n hashFn?: (params: DedupeHashParams) => string | undefined\n ttl?: number\n sweepInterval?: number\n order?: number\n}\n\nfunction contextToHashParams(ctx: PluginRequestContext): DedupeHashParams {\n return {\n method: ctx.request.method,\n url: ctx.request.url,\n body: (ctx.init.body ?? null) as DedupeHashParams['body'],\n headers: ctx.request.headers,\n signal:\n ctx.init.signal === undefined || ctx.init.signal === null\n ? undefined\n : ctx.init.signal,\n requestInit: ctx.init,\n request: ctx.request,\n }\n}\n\nexport function dedupePlugin(options: DedupePluginOptions = {}): ClientPlugin {\n const {\n hashFn = dedupeRequestHash,\n ttl,\n sweepInterval = 5000,\n order = 10,\n } = options\n\n const inFlight = new Map<string, DedupeEntry>()\n let sweeper: ReturnType<typeof setInterval> | undefined\n\n function startSweeper() {\n if (sweeper || typeof ttl !== 'number' || ttl <= 0) return\n sweeper = setInterval(() => {\n const now = Date.now()\n for (const [key, entry] of inFlight.entries()) {\n if (now - entry.createdAt > ttl) {\n inFlight.delete(key)\n }\n }\n if (inFlight.size === 0 && sweeper) {\n clearInterval(sweeper)\n sweeper = undefined\n }\n }, sweepInterval)\n }\n\n function stopSweeperIfIdle() {\n if (inFlight.size === 0 && sweeper) {\n clearInterval(sweeper)\n sweeper = undefined\n }\n }\n\n return {\n name: 'dedupe',\n order,\n wrapDispatch: (next) => async (ctx) => {\n const key = hashFn(contextToHashParams(ctx))\n ctx.state.dedupeKey = key\n\n if (!key) {\n return next(ctx)\n }\n\n const existing = inFlight.get(key)\n if (existing) {\n return existing.promise\n }\n\n let settled = false\n let resolveFn: (value: Response | PromiseLike<Response>) => void\n let rejectFn: (reason?: unknown) => void\n\n const placeholder = new Promise<Response>((resolve, reject) => {\n resolveFn = (value) => {\n if (!settled) {\n settled = true\n resolve(value)\n }\n }\n rejectFn = (reason) => {\n if (!settled) {\n settled = true\n reject(reason)\n }\n }\n })\n // Internal placeholder can reject before a consumer attaches handlers.\n // Mark it observed to avoid unhandled-rejection noise.\n placeholder.catch(() => undefined)\n\n inFlight.set(key, {\n promise: placeholder,\n resolve: resolveFn!,\n reject: rejectFn!,\n createdAt: Date.now(),\n })\n startSweeper()\n\n const actualPromise = next(ctx)\n const entry = inFlight.get(key)\n if (entry) {\n actualPromise.then(\n (result) => entry.resolve(result),\n (error) => entry.reject(error)\n )\n inFlight.set(key, {\n ...entry,\n promise: actualPromise,\n })\n }\n\n return actualPromise.finally(() => {\n const current = inFlight.get(key)\n if (current?.promise === actualPromise) {\n inFlight.delete(key)\n stopSweeperIfIdle()\n }\n })\n },\n }\n}\n\nexport { dedupeRequestHash }\nexport type { DedupeHashParams }\n"],"mappings":"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","names":[]}
|
package/dist/plugins/hedge.d.cts
CHANGED
package/dist/plugins/hedge.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as FFetchRequestInit } from '../types-
|
|
2
|
-
import { C as ClientPlugin } from '../plugins-
|
|
1
|
+
import { b as FFetchRequestInit } from '../types-CTF4bAEG.cjs';
|
|
2
|
+
import { C as ClientPlugin } from '../plugins-CV5-_6ys.cjs';
|
|
3
3
|
|
|
4
4
|
type RequestShortcut = <TThis extends (input: RequestInfo | URL, init?: FFetchRequestInit) => Promise<Response>>(this: TThis, input: RequestInfo | URL, init?: FFetchRequestInit) => ReturnType<TThis>;
|
|
5
5
|
type RequestShortcuts = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as FFetchRequestInit } from '../types-
|
|
2
|
-
import { C as ClientPlugin } from '../plugins-
|
|
1
|
+
import { b as FFetchRequestInit } from '../types-D_oyy1F_.js';
|
|
2
|
+
import { C as ClientPlugin } from '../plugins-CV5-_6ys.js';
|
|
3
3
|
|
|
4
4
|
type RequestShortcut = <TThis extends (input: RequestInfo | URL, init?: FFetchRequestInit) => Promise<Response>>(this: TThis, input: RequestInfo | URL, init?: FFetchRequestInit) => ReturnType<TThis>;
|
|
5
5
|
type RequestShortcuts = {
|
|
@@ -23,7 +23,7 @@ __export(response_shortcuts_exports, {
|
|
|
23
23
|
responseShortcutsPlugin: () => responseShortcutsPlugin
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(response_shortcuts_exports);
|
|
26
|
-
var DECORATED = Symbol("ffetch.responseShortcutsDecorated");
|
|
26
|
+
var DECORATED = /* @__PURE__ */ Symbol("ffetch.responseShortcutsDecorated");
|
|
27
27
|
function attachResponseShortcuts(promise) {
|
|
28
28
|
const decorated = promise;
|
|
29
29
|
if (decorated[DECORATED]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/response-shortcuts.ts"],"sourcesContent":["import type { ClientPlugin } from '../plugins.js'\n\nexport type ResponseShortcuts = {\n json: <T = unknown>() => Promise<T>\n text: () => Promise<string>\n blob: () => Promise<Blob>\n arrayBuffer: () => Promise<ArrayBuffer>\n formData: () => Promise<FormData>\n}\n\ntype ResponseShortcutsPromise = Promise<Response> & ResponseShortcuts\n\nconst DECORATED = Symbol('ffetch.responseShortcutsDecorated')\n\ntype DecoratedPromise = ResponseShortcutsPromise & {\n [DECORATED]?: true\n}\n\nfunction attachResponseShortcuts(\n promise: Promise<Response>\n): ResponseShortcutsPromise {\n const decorated = promise as DecoratedPromise\n\n if (decorated[DECORATED]) {\n return decorated\n }\n\n Object.defineProperties(decorated, {\n json: {\n value: function json<T = unknown>(this: Promise<Response>) {\n return this.then((response) => response.json() as Promise<T>)\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n text: {\n value: function text(this: Promise<Response>) {\n return this.then((response) => response.text())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n blob: {\n value: function blob(this: Promise<Response>) {\n return this.then((response) => response.blob())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n arrayBuffer: {\n value: function arrayBuffer(this: Promise<Response>) {\n return this.then((response) => response.arrayBuffer())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n formData: {\n value: function formData(this: Promise<Response>) {\n return this.then((response) => response.formData())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n [DECORATED]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n })\n\n return decorated\n}\n\nexport function responseShortcutsPlugin(): ClientPlugin<\n Record<never, never>,\n ResponseShortcuts\n> {\n return {\n name: 'response-shortcuts',\n decoratePromise: (promise) => attachResponseShortcuts(promise),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAM,YAAY,
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/response-shortcuts.ts"],"sourcesContent":["import type { ClientPlugin } from '../plugins.js'\n\nexport type ResponseShortcuts = {\n json: <T = unknown>() => Promise<T>\n text: () => Promise<string>\n blob: () => Promise<Blob>\n arrayBuffer: () => Promise<ArrayBuffer>\n formData: () => Promise<FormData>\n}\n\ntype ResponseShortcutsPromise = Promise<Response> & ResponseShortcuts\n\nconst DECORATED = Symbol('ffetch.responseShortcutsDecorated')\n\ntype DecoratedPromise = ResponseShortcutsPromise & {\n [DECORATED]?: true\n}\n\nfunction attachResponseShortcuts(\n promise: Promise<Response>\n): ResponseShortcutsPromise {\n const decorated = promise as DecoratedPromise\n\n if (decorated[DECORATED]) {\n return decorated\n }\n\n Object.defineProperties(decorated, {\n json: {\n value: function json<T = unknown>(this: Promise<Response>) {\n return this.then((response) => response.json() as Promise<T>)\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n text: {\n value: function text(this: Promise<Response>) {\n return this.then((response) => response.text())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n blob: {\n value: function blob(this: Promise<Response>) {\n return this.then((response) => response.blob())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n arrayBuffer: {\n value: function arrayBuffer(this: Promise<Response>) {\n return this.then((response) => response.arrayBuffer())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n formData: {\n value: function formData(this: Promise<Response>) {\n return this.then((response) => response.formData())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n [DECORATED]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n })\n\n return decorated\n}\n\nexport function responseShortcutsPlugin(): ClientPlugin<\n Record<never, never>,\n ResponseShortcuts\n> {\n return {\n name: 'response-shortcuts',\n decoratePromise: (promise) => attachResponseShortcuts(promise),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAM,YAAY,uBAAO,mCAAmC;AAM5D,SAAS,wBACP,SAC0B;AAC1B,QAAM,YAAY;AAElB,MAAI,UAAU,SAAS,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,iBAAiB,WAAW;AAAA,IACjC,MAAM;AAAA,MACJ,OAAO,SAAS,OAA2C;AACzD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAe;AAAA,MAC9D;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,SAAS,OAA8B;AAC5C,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,MAChD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,SAAS,OAA8B;AAC5C,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,MAChD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,aAAa;AAAA,MACX,OAAO,SAAS,cAAqC;AACnD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,YAAY,CAAC;AAAA,MACvD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,UAAU;AAAA,MACR,OAAO,SAAS,WAAkC;AAChD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,SAAS,CAAC;AAAA,MACpD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,CAAC,SAAS,GAAG;AAAA,MACX,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,SAAS,0BAGd;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,CAAC,YAAY,wBAAwB,OAAO;AAAA,EAC/D;AACF;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/plugins/response-shortcuts.ts
|
|
2
|
-
var DECORATED = Symbol("ffetch.responseShortcutsDecorated");
|
|
2
|
+
var DECORATED = /* @__PURE__ */ Symbol("ffetch.responseShortcutsDecorated");
|
|
3
3
|
function attachResponseShortcuts(promise) {
|
|
4
4
|
const decorated = promise;
|
|
5
5
|
if (decorated[DECORATED]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/response-shortcuts.ts"],"sourcesContent":["import type { ClientPlugin } from '../plugins.js'\n\nexport type ResponseShortcuts = {\n json: <T = unknown>() => Promise<T>\n text: () => Promise<string>\n blob: () => Promise<Blob>\n arrayBuffer: () => Promise<ArrayBuffer>\n formData: () => Promise<FormData>\n}\n\ntype ResponseShortcutsPromise = Promise<Response> & ResponseShortcuts\n\nconst DECORATED = Symbol('ffetch.responseShortcutsDecorated')\n\ntype DecoratedPromise = ResponseShortcutsPromise & {\n [DECORATED]?: true\n}\n\nfunction attachResponseShortcuts(\n promise: Promise<Response>\n): ResponseShortcutsPromise {\n const decorated = promise as DecoratedPromise\n\n if (decorated[DECORATED]) {\n return decorated\n }\n\n Object.defineProperties(decorated, {\n json: {\n value: function json<T = unknown>(this: Promise<Response>) {\n return this.then((response) => response.json() as Promise<T>)\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n text: {\n value: function text(this: Promise<Response>) {\n return this.then((response) => response.text())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n blob: {\n value: function blob(this: Promise<Response>) {\n return this.then((response) => response.blob())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n arrayBuffer: {\n value: function arrayBuffer(this: Promise<Response>) {\n return this.then((response) => response.arrayBuffer())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n formData: {\n value: function formData(this: Promise<Response>) {\n return this.then((response) => response.formData())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n [DECORATED]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n })\n\n return decorated\n}\n\nexport function responseShortcutsPlugin(): ClientPlugin<\n Record<never, never>,\n ResponseShortcuts\n> {\n return {\n name: 'response-shortcuts',\n decoratePromise: (promise) => attachResponseShortcuts(promise),\n }\n}\n"],"mappings":";AAYA,IAAM,YAAY,
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/response-shortcuts.ts"],"sourcesContent":["import type { ClientPlugin } from '../plugins.js'\n\nexport type ResponseShortcuts = {\n json: <T = unknown>() => Promise<T>\n text: () => Promise<string>\n blob: () => Promise<Blob>\n arrayBuffer: () => Promise<ArrayBuffer>\n formData: () => Promise<FormData>\n}\n\ntype ResponseShortcutsPromise = Promise<Response> & ResponseShortcuts\n\nconst DECORATED = Symbol('ffetch.responseShortcutsDecorated')\n\ntype DecoratedPromise = ResponseShortcutsPromise & {\n [DECORATED]?: true\n}\n\nfunction attachResponseShortcuts(\n promise: Promise<Response>\n): ResponseShortcutsPromise {\n const decorated = promise as DecoratedPromise\n\n if (decorated[DECORATED]) {\n return decorated\n }\n\n Object.defineProperties(decorated, {\n json: {\n value: function json<T = unknown>(this: Promise<Response>) {\n return this.then((response) => response.json() as Promise<T>)\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n text: {\n value: function text(this: Promise<Response>) {\n return this.then((response) => response.text())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n blob: {\n value: function blob(this: Promise<Response>) {\n return this.then((response) => response.blob())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n arrayBuffer: {\n value: function arrayBuffer(this: Promise<Response>) {\n return this.then((response) => response.arrayBuffer())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n formData: {\n value: function formData(this: Promise<Response>) {\n return this.then((response) => response.formData())\n },\n writable: false,\n enumerable: false,\n configurable: false,\n },\n [DECORATED]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n })\n\n return decorated\n}\n\nexport function responseShortcutsPlugin(): ClientPlugin<\n Record<never, never>,\n ResponseShortcuts\n> {\n return {\n name: 'response-shortcuts',\n decoratePromise: (promise) => attachResponseShortcuts(promise),\n }\n}\n"],"mappings":";AAYA,IAAM,YAAY,uBAAO,mCAAmC;AAM5D,SAAS,wBACP,SAC0B;AAC1B,QAAM,YAAY;AAElB,MAAI,UAAU,SAAS,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,iBAAiB,WAAW;AAAA,IACjC,MAAM;AAAA,MACJ,OAAO,SAAS,OAA2C;AACzD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAe;AAAA,MAC9D;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,SAAS,OAA8B;AAC5C,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,MAChD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,SAAS,OAA8B;AAC5C,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,MAChD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,aAAa;AAAA,MACX,OAAO,SAAS,cAAqC;AACnD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,YAAY,CAAC;AAAA,MACvD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,UAAU;AAAA,MACR,OAAO,SAAS,WAAkC;AAChD,eAAO,KAAK,KAAK,CAAC,aAAa,SAAS,SAAS,CAAC;AAAA,MACpD;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,IACA,CAAC,SAAS,GAAG;AAAA,MACX,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,SAAS,0BAGd;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,CAAC,YAAY,wBAAwB,OAAO;AAAA,EAC/D;AACF;","names":[]}
|
|
@@ -59,4 +59,4 @@ type ClientPlugin<TExtension extends PluginExtensionBase = Record<never, never>,
|
|
|
59
59
|
onFinally?: (ctx: PluginRequestContext) => void | Promise<void>;
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
export type { ClientPlugin as C,
|
|
62
|
+
export type { ClientPlugin as C, PluginDispatch as P, PluginExtensionBase as a, PluginExtensions as b, PluginRequestContext as c, PluginRequestPromiseExtensionBase as d, PluginRequestPromiseExtensions as e, PluginSetupContext as f };
|
|
@@ -59,4 +59,4 @@ type ClientPlugin<TExtension extends PluginExtensionBase = Record<never, never>,
|
|
|
59
59
|
onFinally?: (ctx: PluginRequestContext) => void | Promise<void>;
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
export type { ClientPlugin as C,
|
|
62
|
+
export type { ClientPlugin as C, PluginDispatch as P, PluginExtensionBase as a, PluginExtensions as b, PluginRequestContext as c, PluginRequestPromiseExtensionBase as d, PluginRequestPromiseExtensions as e, PluginSetupContext as f };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ClientPlugin,
|
|
1
|
+
import { C as ClientPlugin, a as PluginExtensionBase, d as PluginRequestPromiseExtensionBase } from './plugins-CV5-_6ys.cjs';
|
|
2
2
|
|
|
3
3
|
type Hooks = {
|
|
4
4
|
before?: (req: Request) => void | Promise<void>;
|
|
@@ -45,4 +45,4 @@ type PendingRequest = {
|
|
|
45
45
|
controller: AbortController;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
export type {
|
|
48
|
+
export type { FFetch as F, Hooks as H, FFetchOptions as a, FFetchRequestInit as b };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ClientPlugin,
|
|
1
|
+
import { C as ClientPlugin, a as PluginExtensionBase, d as PluginRequestPromiseExtensionBase } from './plugins-CV5-_6ys.js';
|
|
2
2
|
|
|
3
3
|
type Hooks = {
|
|
4
4
|
before?: (req: Request) => void | Promise<void>;
|
|
@@ -45,4 +45,4 @@ type PendingRequest = {
|
|
|
45
45
|
controller: AbortController;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
export type {
|
|
48
|
+
export type { FFetch as F, Hooks as H, FFetchOptions as a, FFetchRequestInit as b };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fetchkit/ffetch",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.8",
|
|
4
4
|
"description": "Fetch wrapper with configurable timeouts, retries, and TypeScript-first DX",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fetch",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"type": "module",
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "https://github.com/fetch-kit/ffetch.git"
|
|
15
|
+
"url": "git+https://github.com/fetch-kit/ffetch.git"
|
|
16
16
|
},
|
|
17
17
|
"homepage": "https://github.com/fetch-kit/ffetch#readme",
|
|
18
18
|
"bugs": "https://github.com/fetch-kit/ffetch/issues",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"test:ci": "vitest --run --coverage",
|
|
85
85
|
"lint": "eslint src --ext .ts",
|
|
86
86
|
"format": "prettier -w src",
|
|
87
|
+
"version": "changeset version",
|
|
87
88
|
"prepublishOnly": "npm run build && npm run test:ci"
|
|
88
89
|
},
|
|
89
90
|
"devDependencies": {
|
|
@@ -94,6 +95,7 @@
|
|
|
94
95
|
"@typescript-eslint/parser": "^8.39.0",
|
|
95
96
|
"@vitest/coverage-v8": "^3.2.4",
|
|
96
97
|
"eslint": "^9.33.0",
|
|
98
|
+
"happy-dom": "^20.9.0",
|
|
97
99
|
"husky": "^8.0.0",
|
|
98
100
|
"jsr": "^0.13.5",
|
|
99
101
|
"lint-staged": "^16.1.5",
|