@vielzeug/courier 1.1.4 → 2.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.
- package/README.md +10 -12
- package/dist/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +1 -1
- package/dist/_dev.js.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.ts +4 -7
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/courier.cjs +5 -6
- package/dist/courier.cjs.map +1 -1
- package/dist/courier.d.ts +20 -142
- package/dist/courier.d.ts.map +1 -1
- package/dist/courier.iife.js +5 -6
- package/dist/courier.iife.js.map +1 -1
- package/dist/courier.js +5 -6
- package/dist/courier.js.map +1 -1
- package/dist/devtools.cjs.map +1 -1
- package/dist/devtools.d.ts +0 -28
- package/dist/devtools.d.ts.map +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +0 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +6 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/interceptors.cjs +1 -1
- package/dist/interceptors.cjs.map +1 -1
- package/dist/interceptors.js +1 -1
- package/dist/interceptors.js.map +1 -1
- package/dist/query.cjs +1 -1
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.ts +8 -101
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +1 -1
- package/dist/query.js.map +1 -1
- package/dist/serialize.cjs +1 -1
- package/dist/serialize.cjs.map +1 -1
- package/dist/serialize.d.ts +1 -1
- package/dist/serialize.d.ts.map +1 -1
- package/dist/serialize.js +1 -1
- package/dist/serialize.js.map +1 -1
- package/dist/stream.cjs +5 -1
- package/dist/stream.cjs.map +1 -1
- package/dist/stream.d.ts +22 -39
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +5 -1
- package/dist/stream.js.map +1 -1
- package/dist/transport.cjs.map +1 -1
- package/dist/transport.d.ts +1 -1
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +38 -46
- package/dist/types.d.ts.map +1 -1
- package/dist/url.cjs.map +1 -1
- package/dist/url.d.ts +0 -9
- package/dist/url.d.ts.map +1 -1
- package/dist/url.js.map +1 -1
- package/package.json +4 -4
- package/dist/batcher.cjs +0 -2
- package/dist/batcher.cjs.map +0 -1
- package/dist/batcher.d.ts +0 -66
- package/dist/batcher.d.ts.map +0 -1
- package/dist/batcher.js +0 -2
- package/dist/batcher.js.map +0 -1
- package/dist/focus.cjs +0 -2
- package/dist/focus.cjs.map +0 -1
- package/dist/focus.d.ts +0 -25
- package/dist/focus.d.ts.map +0 -1
- package/dist/focus.js +0 -2
- package/dist/focus.js.map +0 -1
- package/dist/mutation.cjs +0 -2
- package/dist/mutation.cjs.map +0 -1
- package/dist/mutation.d.ts +0 -81
- package/dist/mutation.d.ts.map +0 -1
- package/dist/mutation.js +0 -2
- package/dist/mutation.js.map +0 -1
- package/dist/persist.cjs +0 -2
- package/dist/persist.cjs.map +0 -1
- package/dist/persist.d.ts +0 -86
- package/dist/persist.d.ts.map +0 -1
- package/dist/persist.js +0 -2
- package/dist/persist.js.map +0 -1
- package/dist/query-cache.cjs +0 -2
- package/dist/query-cache.cjs.map +0 -1
- package/dist/query-cache.d.ts +0 -88
- package/dist/query-cache.d.ts.map +0 -1
- package/dist/query-cache.js +0 -2
- package/dist/query-cache.js.map +0 -1
- package/dist/query-observe.cjs +0 -2
- package/dist/query-observe.cjs.map +0 -1
- package/dist/query-observe.d.ts +0 -17
- package/dist/query-observe.d.ts.map +0 -1
- package/dist/query-observe.js +0 -2
- package/dist/query-observe.js.map +0 -1
- package/dist/retry.cjs +0 -2
- package/dist/retry.cjs.map +0 -1
- package/dist/retry.d.ts +0 -34
- package/dist/retry.d.ts.map +0 -1
- package/dist/retry.js +0 -2
- package/dist/retry.js.map +0 -1
- package/dist/stream-readable.cjs +0 -3
- package/dist/stream-readable.cjs.map +0 -1
- package/dist/stream-readable.d.ts +0 -46
- package/dist/stream-readable.d.ts.map +0 -1
- package/dist/stream-readable.js +0 -3
- package/dist/stream-readable.js.map +0 -1
- package/dist/stream-shared.cjs +0 -2
- package/dist/stream-shared.cjs.map +0 -1
- package/dist/stream-shared.d.ts +0 -41
- package/dist/stream-shared.d.ts.map +0 -1
- package/dist/stream-shared.js +0 -2
- package/dist/stream-shared.js.map +0 -1
- package/dist/stream-sse.cjs +0 -6
- package/dist/stream-sse.cjs.map +0 -1
- package/dist/stream-sse.d.ts +0 -59
- package/dist/stream-sse.d.ts.map +0 -1
- package/dist/stream-sse.js +0 -6
- package/dist/stream-sse.js.map +0 -1
- package/dist/sync-store.cjs +0 -2
- package/dist/sync-store.cjs.map +0 -1
- package/dist/sync-store.d.ts +0 -20
- package/dist/sync-store.d.ts.map +0 -1
- package/dist/sync-store.js +0 -2
- package/dist/sync-store.js.map +0 -1
package/dist/courier.d.ts
CHANGED
|
@@ -1,154 +1,32 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type Mutation, type MutationFn, type MutationOptions } from './mutation';
|
|
3
|
-
import { type QueryClientOptions } from './query';
|
|
1
|
+
import type { MutationOptions, QueryCache } from './types';
|
|
4
2
|
import { type TransportOptions } from './transport';
|
|
5
|
-
/**
|
|
6
|
-
* Extended mutation options for `client.mutation()` on a `Courier` instance.
|
|
7
|
-
* Includes all `MutationOptions` plus `invalidates` and `sets` cache shorthands.
|
|
8
|
-
*/
|
|
9
|
-
export type CourierMutationOptions<TData = unknown, TVariables = void> = MutationOptions<TData, TVariables> & {
|
|
10
|
-
/** Query keys to invalidate in the shared cache on success. Runs before `onSuccess`. */
|
|
11
|
-
invalidates?: QueryKey[];
|
|
12
|
-
/**
|
|
13
|
-
* Imperatively seed the cache on success. Return an array of `[key, data]` pairs.
|
|
14
|
-
* Runs before `onSuccess`.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```ts
|
|
18
|
-
* sets: (user) => [[ ['users', user.id], user ], [ ['users'], allUsers ]]
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
sets?: (data: TData, variables: TVariables) => Array<[QueryKey, unknown]>;
|
|
22
|
-
};
|
|
23
3
|
export type CourierOptions = TransportOptions & {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* Only retry/callback-error options are meaningful here — lifecycle callbacks
|
|
27
|
-
* (`onSuccess`, `onError`, `onSettled`) should be provided per-mutation since
|
|
28
|
-
* they receive typed variables that differ per mutation.
|
|
29
|
-
*/
|
|
30
|
-
mutationDefaults?: Pick<MutationOptions, 'delay' | 'onCallbackError' | 'shouldRetry' | 'times'>;
|
|
31
|
-
/** Options specific to the query cache (staleTime, gcTime, refetch policies, etc.). */
|
|
32
|
-
query?: QueryClientOptions;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Create a unified Courier instance backed by a single shared transport.
|
|
36
|
-
*
|
|
37
|
-
* `baseUrl`, `headers`, `timeout`, and `fetch` are shared between the `api` and
|
|
38
|
-
* `stream` sub-clients. Interceptors registered via `courier.use()` apply to all
|
|
39
|
-
* HTTP requests — REST calls and SSE connections alike.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```ts
|
|
43
|
-
* const client = createCourier({
|
|
44
|
-
* baseUrl: 'https://api.example.com',
|
|
45
|
-
* headers: { authorization: `Bearer ${token}` },
|
|
46
|
-
* });
|
|
47
|
-
*
|
|
48
|
-
* // Interceptors apply to both api and stream
|
|
49
|
-
* client.use(async (ctx, next) => {
|
|
50
|
-
* return next(ctx.withHeaders({ 'x-request-id': crypto.randomUUID() }));
|
|
51
|
-
* });
|
|
52
|
-
*
|
|
53
|
-
* const user = await client.api.get<User>('/users/{id}', { params: { id: '1' } });
|
|
54
|
-
* const src = client.stream.sse('/events', { reconnect: true });
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export declare function createCourier(opts?: CourierOptions): {
|
|
58
|
-
api: {
|
|
59
|
-
cancelAll(): void;
|
|
60
|
-
delete: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
61
|
-
readonly disposalSignal: AbortSignal;
|
|
62
|
-
dispose(): void;
|
|
63
|
-
readonly disposed: boolean;
|
|
64
|
-
get: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
65
|
-
getHeaders: () => Readonly<Record<string, string>>;
|
|
66
|
-
headers: (updates: Record<string, string | undefined>) => void;
|
|
67
|
-
patch: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
68
|
-
post: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
69
|
-
put: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
70
|
-
request: <T, P extends string = string>(method: string, url: P, config?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
71
|
-
[Symbol.dispose](): void;
|
|
72
|
-
use: (interceptor: import("./transport").Interceptor) => () => void;
|
|
4
|
+
query?: {
|
|
5
|
+
staleTime?: number;
|
|
73
6
|
};
|
|
74
|
-
|
|
7
|
+
};
|
|
8
|
+
export type Courier = ReturnType<typeof createCourier>;
|
|
9
|
+
/** One application client owns transport, queries, mutations, and streams. */
|
|
10
|
+
export declare function createCourier(options?: CourierOptions): {
|
|
75
11
|
cancelAll(): void;
|
|
76
|
-
|
|
12
|
+
delete: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
77
13
|
readonly disposalSignal: AbortSignal;
|
|
78
|
-
/**
|
|
79
|
-
* Permanently dispose the client. All in-flight requests, SSE connections,
|
|
80
|
-
* and query cache fetches are aborted. Idempotent.
|
|
81
|
-
*/
|
|
82
14
|
dispose(): void;
|
|
83
|
-
/** `true` after `dispose()` is called. */
|
|
84
15
|
readonly disposed: boolean;
|
|
85
|
-
|
|
16
|
+
events: <T = unknown, P extends string = string>(url: P, config?: import("./stream").StreamOptions<P>) => AsyncIterableIterator<import("./stream").StreamEvent<T>>;
|
|
17
|
+
get: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
18
|
+
getHeaders: () => Readonly<Record<string, string>>;
|
|
86
19
|
headers: (updates: Record<string, string | undefined>) => void;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
* (input: NewUser, signal) => client.api.post<User>('/users', { body: input, signal }),
|
|
97
|
-
* {
|
|
98
|
-
* invalidates: [['users']],
|
|
99
|
-
* sets: (user) => [[ ['users', user.id], user ]],
|
|
100
|
-
* },
|
|
101
|
-
* );
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
mutation<TData, TVariables = void>(fn: MutationFn<TData, TVariables>, mutOpts?: CourierMutationOptions<TData, TVariables>): Mutation<TData, TVariables>;
|
|
105
|
-
/** Query / cache client. */
|
|
106
|
-
query: {
|
|
107
|
-
cancel(key: QueryKey): void;
|
|
108
|
-
cancelAll(): void;
|
|
109
|
-
clear(): void;
|
|
110
|
-
readonly disposalSignal: AbortSignal;
|
|
111
|
-
dispose(): void;
|
|
112
|
-
readonly disposed: boolean;
|
|
113
|
-
fetch: <T>(options: import("./query").QueryOptions<T>) => Promise<T>;
|
|
114
|
-
fetchMany<T = unknown>(queries: import("./query").QueryOptions<T>[]): Promise<T[]>;
|
|
115
|
-
get<T>(key: QueryKey): T | undefined;
|
|
116
|
-
getState<T>(key: QueryKey): import("./types").QueryState<T> | null;
|
|
117
|
-
invalidate: (key: QueryKey) => void;
|
|
118
|
-
keys(): QueryKey[];
|
|
119
|
-
observe: <T = unknown, S = T>(options: import("./query").ObserveOptions<T, S>) => import("./types").SyncStore<import("./types").QueryState<S>>;
|
|
120
|
-
observeMany<T = unknown>(keys: QueryKey[]): import("./types").SyncStore<import("./types").QueryState<T>[]>;
|
|
121
|
-
refetchStale(): void;
|
|
122
|
-
remove(key: QueryKey): void;
|
|
123
|
-
set: {
|
|
124
|
-
<T>(key: QueryKey, data: T, opts?: {
|
|
125
|
-
gcTime?: number;
|
|
126
|
-
updatedAt?: number;
|
|
127
|
-
}): void;
|
|
128
|
-
<T>(key: QueryKey, updater: (old: T | undefined) => T, opts?: {
|
|
129
|
-
gcTime?: number;
|
|
130
|
-
updatedAt?: number;
|
|
131
|
-
}): void;
|
|
132
|
-
};
|
|
133
|
-
readonly size: number;
|
|
134
|
-
[Symbol.dispose](): void;
|
|
135
|
-
};
|
|
136
|
-
/** SSE and ReadableStream client. */
|
|
137
|
-
stream: {
|
|
138
|
-
cancelAll(): void;
|
|
139
|
-
readonly disposalSignal: AbortSignal;
|
|
140
|
-
dispose(): void;
|
|
141
|
-
readonly disposed: boolean;
|
|
142
|
-
getHeaders: () => Readonly<Record<string, string>>;
|
|
143
|
-
headers: (updates: Record<string, string | undefined>) => void;
|
|
144
|
-
readable: <T = string, P extends string = string>(url: P, config?: import("./stream-readable").ReadableConfig<P>) => AsyncGenerator<T>;
|
|
145
|
-
sse: <TEvents extends Record<string, unknown> = Record<string, string>, P extends string = string>(url: P, config?: import("./stream-sse").SseOptions<P>) => import("./stream-sse").SseSource<TEvents>;
|
|
146
|
-
[Symbol.dispose](): void;
|
|
147
|
-
use: (interceptor: import("./transport").Interceptor) => () => void;
|
|
148
|
-
};
|
|
20
|
+
mutate: <T>(options: MutationOptions<T>) => Promise<T>;
|
|
21
|
+
patch: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
22
|
+
post: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
23
|
+
put: <T, P extends string = string>(url: P, cfg?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
24
|
+
queries: QueryCache;
|
|
25
|
+
read: <T = string, P extends string = string>(url: P, config?: import("./stream").StreamOptions<P> & {
|
|
26
|
+
parse?: "ndjson" | "text";
|
|
27
|
+
}) => AsyncIterableIterator<T>;
|
|
28
|
+
request: <T, P extends string = string>(method: string, url: P, config?: import("./url").HttpRequestConfig<P>) => Promise<T>;
|
|
149
29
|
[Symbol.dispose](): void;
|
|
150
|
-
/** Register a shared interceptor that applies to both API requests and SSE connections. */
|
|
151
30
|
use: (interceptor: import("./transport").Interceptor) => () => void;
|
|
152
31
|
};
|
|
153
|
-
export type Courier = ReturnType<typeof createCourier>;
|
|
154
32
|
//# sourceMappingURL=courier.d.ts.map
|
package/dist/courier.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"courier.d.ts","sourceRoot":"","sources":["../src/courier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"courier.d.ts","sourceRoot":"","sources":["../src/courier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM3D,OAAO,EAAkC,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpF,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG;IAC9C,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAEvD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB;;;;;;;;;;aASlC,CAAC,WAAW,eAAe,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;;;;;;aAwDqsI,CAAC;;;;;EADxwI"}
|
package/dist/courier.iife.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
var Courier=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},r=class e extends n{url;method;status;data;headers;constructor(e){super(e.message),this.url=e.url,this.method=e.method,this.status=e.status,this.data=e.data,this.headers=e.headers}static fromResponse(t,n,r,i){return new e({data:n,headers:t.headers,message:t.statusText||`HTTP ${t.status}`,method:r,status:t.status,url:i})}static is(t,n){return t instanceof e&&(n===void 0||t.status===n)}},i=class extends n{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},a=class extends n{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},o=class extends n{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},s=class extends n{data;constructor(e,t){super(e instanceof Error?e.message:String(e),{cause:e}),this.data=t}},c=class extends n{},l=class extends n{constructor(e){super(`[courier] ${e} disposed`)}},u=class extends n{};function d(e,t,n,r){let s=e instanceof Error?e.message:String(e),c=r?.reason;return c instanceof Error&&c.name===`TimeoutError`?new a({cause:e,message:s,method:t,url:n}):e instanceof DOMException?e.name===`TimeoutError`?new a({cause:e,message:s,method:t,url:n}):new o({cause:e,message:s,method:t,url:n}):e instanceof Error&&e.name===`AbortError`||r?.aborted?new o({cause:e,message:s,method:t,url:n}):new i({cause:e,message:s,method:t,url:n})}async function f(e,t=`auto`){if(t===`raw`)return e;if(e.status===204||e.status===205||e.status===304)return;if(t===`json`)return e.json();if(t===`text`)return e.text();if(t===`blob`)return e.blob();if(t===`arrayBuffer`)return e.arrayBuffer();let n=e.headers.get(`content-type`)??``;return n.includes(`application/json`)||n.includes(`+json`)?e.json():n.startsWith(`text/`)?e.text():n.startsWith(`image/`)||n.startsWith(`audio/`)||n.startsWith(`video/`)?e.blob():e.text()}function p(e,t,n,r,i){return n!==void 0&&!m(n)?{...i,body:JSON.stringify(n),headers:{"content-type":`application/json`,...t},method:e.toUpperCase(),signal:r}:{...i,...n!==void 0&&{body:n},headers:t,method:e.toUpperCase(),signal:r}}function m(e){return e instanceof FormData||e instanceof Blob||e instanceof URLSearchParams||typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof ReadableStream<`u`&&e instanceof ReadableStream}function h(e,t,n){return{headers:t,init:n,url:e,withHeaders(r){let i={...t};for(let[e,t]of Object.entries(r))i[e.toLowerCase()]=t;return h(e,i,n)}}}function g(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}var _=3e4;function v(e){if((e<=0||!Number.isFinite(e))&&e!==1/0)throw new n(`[courier] timeout must be a positive number or Infinity`)}function y(e,t){return e===1/0?t??void 0:g(AbortSignal.timeout(e),t)}function b(e={}){let{baseUrl:t=``,fetch:n=globalThis.fetch,headers:r={},timeout:i=_}=e;v(i);let a=Object.fromEntries(Object.entries(r).map(([e,t])=>[e.toLowerCase(),t])),o=new Set,s=new AbortController,c=[],l=null,u=!1;function d(){if(l)return l;let e=e=>n(e.url,{...e.init,headers:e.headers});return l=c.length===0?e:c.reduceRight((e,t)=>n=>t(n,e),e),l}function f(e){return c.push(e),l=null,()=>{let t=c.indexOf(e);t!==-1&&(c.splice(t,1),l=null)}}function p(e){for(let[t,n]of Object.entries(e)){let e=t.toLowerCase();n===void 0?delete a[e]:a[e]=n}}function m(){return{...a}}function g(e,t){let n=e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])):void 0;return{...a,...n,...t}}function y(e){return o.add(e),()=>o.delete(e)}function b(e){return d()(h(e.url,e.headers,e.init))}function x(){for(let e of[...o])e.abort();o.clear()}function S(){if(!u){u=!0,s.abort();for(let e of o)e.abort();o.clear(),c.length=0,l=null}}return{baseUrl:t,cancelAll:x,dispatch:b,get disposalSignal(){return s.signal},dispose:S,get disposed(){return u},getHeaders:m,getTimeout(){return i},headers:p,mergeHeaders:g,track:y,use:f}}function x(e,t,n,r){let i=e.replace(/\/+$/,``),a=t.replace(/^\/+/,``);a=a.replace(/\{([^}]+)\}/g,(e,r)=>{let i=n?.[r];if(i==null)throw new u(`unresolved path param {${r}} in '${t}'`);return encodeURIComponent(String(i))});let o=i&&a?`${i}/${a}`:i||a;if(!r)return o;let s=new URLSearchParams;for(let[e,t]of Object.entries(r))if(t!==void 0){if(Array.isArray(t)){for(let n of t)n!==void 0&&s.append(e,n===null?``:String(n));continue}s.append(e,t===null?``:String(t))}let c=s.toString();return c?`${o}${o.includes(`?`)?`&`:`?`}${c}`:o}var S=new Set([`GET`,`HEAD`,`OPTIONS`]);function C(e,n,r,i){if(S.has(e))return`${e}:${n}:${r}`;if(i!==void 0)return`${e}:${n}:${(0,t.hash)(i)}`}function w(e){let{transport:t,...n}=e??{},i=t??b(n),a=!t,o=new Map;async function c(e,t,n,a,o,c){let l=t.signal,u;try{u=await i.dispatch({headers:e,init:t,url:n})}catch(e){throw d(e,a,n,l)}if(!u.ok){let e;try{e=await f(u,o??`auto`)}catch{e=await u.text().catch(()=>``)}throw r.fromResponse(u,e,a,n)}let p;try{p=await f(u,o??`auto`)}catch(e){throw d(e,a,n,l)}if(c)try{return c.parse(p)}catch(e){throw new s(e,p)}return p}async function u(e,t,n={}){if(i.disposed)throw new l(`ApiClient`);let r=e.toUpperCase(),a;try{a=x(i.baseUrl,t,n.params,n.query)}catch(e){throw d(e,r,t)}let{body:s,dedupe:u=!0,dedupeKey:f,fetchInit:m,headers:h,responseType:_,schema:b,signal:S,timeout:w}=n;w!==void 0&&v(w);let T=i.mergeHeaders(h),E=u?C(r,a,_??`auto`,f):void 0;if(E){let e=o.get(E);if(e)return e}let D=new AbortController,O=i.track(D),k=g(S,D.signal)??D.signal,{headers:A,...j}=p(r,T,s,y(w??i.getTimeout(),k),m??{}),M=c(A,j,a,r,_,b);E&&o.set(E,M);try{return await M}finally{E&&o.delete(E),O()}}return{cancelAll(){i.cancelAll(),o.clear()},delete:(e,t)=>u(`DELETE`,e,t),get disposalSignal(){return i.disposalSignal},dispose(){o.clear(),a&&i.dispose()},get disposed(){return i.disposed},get:(e,t)=>u(`GET`,e,t),getHeaders:i.getHeaders,headers:i.headers,patch:(e,t)=>u(`PATCH`,e,t),post:(e,t)=>u(`POST`,e,t),put:(e,t)=>u(`PUT`,e,t),request:u,[Symbol.dispose](){this.dispose()},use:i.use}}function T(e){let{maxSize:t=25,resolve:n,resolveSettled:r,window:i=0}=e,a=[],o=new AbortController,s=!1,u=null,d=!1;function f(){if(a.length===0)return;let e=a.splice(0,t);a.length>0&&p();let i=e.map(e=>e.key);try{r?r(i).then(t=>{if(t.length!==e.length){let n=new c(`Batcher: resolveSettled() returned ${t.length} results for ${e.length} keys`);for(let t of e)t.reject(n);return}e.forEach((e,n)=>{let r=t[n];r.status===`fulfilled`?e.resolve(r.value):e.reject(r.reason)})}).catch(t=>{for(let n of e)n.reject(t)}):n(i).then(t=>{if(t.length!==e.length){let n=new c(`Batcher: resolve() returned ${t.length} results for ${e.length} keys`);for(let t of e)t.reject(n);return}e.forEach((e,n)=>e.resolve(t[n]))}).catch(t=>{for(let n of e)n.reject(t)})}catch(t){for(let n of e)n.reject(t)}}function p(){s||(s=!0,i===0?queueMicrotask(()=>{s=!1,f()}):u=setTimeout(()=>{u=null,s=!1,f()},i))}return{get disposalSignal(){return o.signal},dispose(){if(d)return;d=!0,u!==null&&(clearTimeout(u),u=null);let e=new l(`Batcher`);for(let t of a.splice(0))t.reject(e);s=!1,o.abort()},get disposed(){return d},load(e){return d?Promise.reject(new l(`Batcher`)):new Promise((n,r)=>{a.push({key:e,reject:r,resolve:n}),a.length>=t?(u!==null&&(clearTimeout(u),u=null),s=!1,f()):p()})},[Symbol.dispose](){this.dispose()}}}function E(e){return Math.random()*(0,t.backoff)(e)}function D(e,t){if(typeof t==`function`){let n=t(e);return Number.isFinite(n)?Math.max(0,n):0}return typeof t==`number`?Number.isFinite(t)?Math.max(0,t):0:E(e)}var O=Object.freeze({data:void 0,error:null,isFetching:!1,isLoading:!0,status:`loading`,updatedAt:void 0});function k(e,n){let r=O,i=0,a=null,o=new Set,s=!1,c=null;function u(){o.forEach(e=>e())}async function d(e){try{await e?.()}catch(e){if(n?.onCallbackError)try{n.onCallbackError(e instanceof Error?e:Error(String(e)))}catch{}}}return{async cancel(){let e=a;e&&(e.controller.abort(),await e.promise.catch(()=>{}))},dispose(){s||(s=!0,a?.controller.abort(),a=null,o.clear())},get disposed(){return s},async mutate(o,c){if(s)throw new l(`Mutation`);let f=new AbortController,p=c?.signal?g(c.signal,f.signal):f.signal,m=++i;r={data:void 0,error:null,isFetching:!0,isLoading:!0,status:`loading`,updatedAt:void 0},u();let h={controller:f,promise:null};a=h;let _=(async()=>{try{let a=await(0,t.retry)(()=>e(o,p),{delay:e=>D(e,n?.delay),shouldRetry:n?.shouldRetry,signal:p,times:n?.times??1});return m===i&&(r={data:a,error:null,isFetching:!1,isLoading:!1,status:`success`,updatedAt:Date.now()},u()),await d(()=>n?.onSuccess?.(a,o)),await d(()=>n?.onFinally?.(o)),await d(()=>n?.onSettled?.({data:a,status:`success`,variables:o})),a}catch(e){let a=e instanceof Error?e:Error(String(e)),s=p.aborted||(0,t.isAbortError)(a);throw m===i&&(r=s?O:{data:void 0,error:a,isFetching:!1,isLoading:!1,status:`error`,updatedAt:Date.now()},u()),s||await d(()=>n?.onError?.(a,o)),await d(()=>n?.onFinally?.(o)),await d(()=>n?.onSettled?.(s?{status:`aborted`,variables:o}:{error:a,status:`error`,variables:o})),a}finally{a?.controller===f&&(a=null)}})();return h.promise=_,_},peek(){return r},reset(){r=O,u()},get store(){return c??={peek:()=>r,subscribe:e=>s?()=>{}:(o.add(e),()=>o.delete(e))}},subscribe(e){return s?()=>{}:(o.add(e),()=>o.delete(e))},[Symbol.dispose](){this.dispose()}}}function A(e){return typeof e==`function`?e():e}function j(e){return(0,t.hash)(e)}function M(e){return(0,t.hash)(e)}function N(e,n){let r=(0,t.hash)(n),i=e.entries.get(r);return i||(i={data:void 0,error:null,hash:r,inflight:null,isFetching:!1,key:n,lastConfig:void 0,observers:new Set,segmentHashes:n.map(e=>(0,t.hash)(e)),status:`loading`,updatedAt:void 0},e.entries.set(r,i)),i}function P(e,t){let n=e.gcTimers.get(t);n&&(clearTimeout(n),e.gcTimers.delete(t))}function F(e,t,n){if(e.disposed||(P(e,t.hash),t.observers.size>0))return;if(n===0){e.entries.delete(t.hash);return}let r=setTimeout(()=>{let n=e.entries.get(t.hash);!n||n.observers.size>0||n.isFetching||(e.entries.delete(t.hash),e.gcTimers.delete(t.hash))},n);e.gcTimers.set(t.hash,r)}function I(e,t){t.inflight?.controller.abort(),P(e,t.hash),e.entries.delete(t.hash)}function L(e,t){return t.length>e.segmentHashes.length?!1:t.every((t,n)=>t===e.segmentHashes[n])}function R(e,t){t.isFetching=!0,t.status=`loading`,t.error=null,e.notify(t)}function z(e,t,n,r){t.data=n,t.error=null,t.status=`success`,t.updatedAt=Date.now(),t.isFetching=!1,t.inflight=null,F(e,t,r),e.notify(t)}function B(e,t,n,r){t.error=n,t.status=`error`,t.updatedAt=Date.now(),t.isFetching=!1,t.inflight=null,F(e,t,r),e.notify(t)}function V(e,t,n,r){if(t.data=n.data,t.error=n.error,t.status=n.status,t.updatedAt=n.updatedAt,t.isFetching=!1,t.inflight=null,t.observers.size===0&&t.status===`loading`&&t.data===void 0){I(e,t);return}F(e,t,r),e.notify(t)}function H(e,t){if(t.inflight?.controller.abort(),t.observers.size>0){t.inflight=null,t.isFetching=!1,t.status=`loading`,t.data=void 0,t.error=null,t.updatedAt=void 0,e.notify(t);return}I(e,t)}function U(e,n,r){if(n.inflight)return n.inflight.promise;let{delay:i,fn:a,gcTime:o,shouldRetry:s,times:c}=r,l=new AbortController,u={data:n.data,error:n.error,status:n.status,updatedAt:n.updatedAt},d=(async()=>{try{let r=await(0,t.retry)(()=>a({key:n.key,signal:l.signal}),{delay:e=>D(e,i),shouldRetry:s,signal:l.signal,times:c});return z(e,n,r,o),r}catch(r){let i=r instanceof Error?r:Error(String(r));throw l.signal.aborted||(0,t.isAbortError)(i)?V(e,n,u,o):B(e,n,i,o),i}})();return n.inflight={controller:l,promise:d},R(e,n),d}function W(e,t){return{delay:t.delay??e.delayDefault,fn:t.fn,gcTime:t.gcTime??e.gcTimeDefault,shouldRetry:t.shouldRetry??e.shouldRetryDefault,staleTime:t.staleTime??e.staleTimeDefault,times:t.times??e.timesDefault}}function G(e,t,n,r){return{delayDefault:e.delay,disposed:!1,entries:t,gcTimeDefault:e.gcTime??3e5,gcTimers:n,notify:r,shouldRetryDefault:e.shouldRetry,staleTimeDefault:e.staleTime??0,timesDefault:e.times??1}}var K=Object.freeze({data:void 0,error:null,isFetching:!1,isLoading:!0,status:`loading`,updatedAt:void 0});function q(e){return e.status===`loading`?{data:void 0,error:null,isFetching:e.isFetching,isLoading:!0,status:`loading`,updatedAt:void 0}:e.status===`success`?{data:e.data,error:null,isFetching:e.isFetching,isLoading:!1,status:`success`,updatedAt:e.updatedAt}:{data:e.data,error:e.error,isFetching:e.isFetching,isLoading:!1,status:`error`,updatedAt:e.updatedAt}}function J(e,t){let n=q(e);if(n.status===`loading`){let e=A(t.placeholderData);return{...n,data:e}}let r=t.select?t.select(n.data):n.data;return{...n,data:r}}function Y(e){for(let t of e.observers){let n=t,r=J(e,n),i=n.previous,a=Object.is(i?.data,r.data),o=!!i&&i.status===r.status&&i.isFetching===r.isFetching&&Object.is(i.error,r.error);(n.select?o&&a:o&&i?.updatedAt===r.updatedAt&&a)||(n.previous=r,n.listener())}}function X(e,t,n){let r={listener:()=>{},...n};return{peek(){let n=e.entries.get(j(t));return n?J(n,r):K},subscribe(i){if(e.disposed)return()=>{};let a=N(e,t);P(e,a.hash);let o={...n,listener:i,previous:J(a,r)};return a.observers.add(o),()=>{a.observers.delete(o),a.observers.size===0&&F(e,a,a.lastConfig?.gcTime??e.gcTimeDefault)}}}}function Z(e){let t=!1,n=new AbortController,r=new Map,i=new Map,a=G({delay:e?.delay,gcTime:e?.gcTime,shouldRetry:e?.shouldRetry,staleTime:e?.staleTime,times:e?.times},r,i,Y);async function o(e){if(t)throw new l(`QueryClient`);let{enabled:n=!0,fn:i,gcTime:o,initialData:s,key:c,staleTime:u,...d}=e;if(!n){let e=j(c);return r.get(e)?.data??void 0}let f=N(a,c),p=W(a,{fn:i,gcTime:o,staleTime:u,...d});if(s!==void 0&&f.status===`loading`&&f.data===void 0){let e=A(s);e!==void 0&&(f.data=e,f.error=null,f.status=`success`,f.updatedAt=Date.now())}return f.status===`success`&&f.updatedAt!==void 0&&Date.now()-f.updatedAt<p.staleTime&&!f.isFetching?(f.lastConfig=p,f.data):(f.lastConfig=p,f.inflight?f.inflight.promise:U(a,f,p))}function s(e){if(!e.lastConfig){H(a,e);return}e.isFetching||U(a,e,e.lastConfig).catch(()=>{})}function c(e){let t=e.map(e=>M(e));for(let e of[...r.values()])if(L(e,t)){if(e.observers.size>0){s(e);continue}H(a,e)}}function u(e,t,n){let r=N(a,e),i=n?.gcTime??r.lastConfig?.gcTime??a.gcTimeDefault;r.data=typeof t==`function`?t(r.data):t,r.error=null,r.status=`success`,r.updatedAt=n?.updatedAt??Date.now(),r.isFetching=!1,r.inflight=null,Y(r),F(a,r,i)}function d(e){return e.observers.size===0||!e.lastConfig||e.isFetching?!1:e.status===`success`&&e.updatedAt!==void 0||e.status===`error`&&e.data!==void 0&&e.updatedAt!==void 0?Date.now()-e.updatedAt>=e.lastConfig.staleTime:!1}function f(e){let{fetch:t=!0,key:n,placeholderData:r,select:i}=e,s=X(a,n,{placeholderData:r,select:i});return t&&e.fn&&o({...e}).catch(()=>{}),s}return{cancel(e){let t=r.get(j(e));t?.inflight&&t.inflight.controller.abort()},cancelAll(){for(let e of r.values())e.inflight?.controller.abort()},clear(){for(let e of[...r.values()])H(a,e)},get disposalSignal(){return n.signal},dispose(){if(!t){t=!0,a.disposed=!0,n.abort();for(let[,e]of r)e.observers.clear(),e.inflight?.controller.abort();for(let[,e]of i)clearTimeout(e);i.clear(),r.clear()}},get disposed(){return t},fetch:o,fetchMany(e){return Promise.all(e.map(e=>o(e)))},get(e){let t=r.get(j(e));return t?t.data:void 0},getState(e){let t=r.get(j(e));return t?q(t):null},invalidate:c,keys(){return[...r.values()].map(e=>e.key)},observe:f,observeMany(e){let t=e.map(e=>X(a,e));return{peek(){return t.map(e=>e.peek())},subscribe(e){let n=t.map(t=>t.subscribe(e));return()=>{for(let e of n)e()}}}},refetchStale(){for(let e of[...r.values()])d(e)&&U(a,e,e.lastConfig).catch(()=>{})},remove(e){let t=r.get(j(e));t&&H(a,t)},set:u,get size(){return r.size},[Symbol.dispose](){this.dispose()}}}async function Q(e,t,n,i,a){let o=i.method.toUpperCase(),s=x(e.baseUrl,t,i.params,i.query),c=g(i.extSignal,n.signal)??n.signal,l=y(i.timeout??1/0,c),{headers:f,...m}=p(o,e.mergeHeaders(i.headers,a),i.body,l,i.fetchInit??{}),h;try{h=await e.dispatch({headers:f,init:m,url:s})}catch(e){throw d(e,o,s,l??c)}if(!h.ok){let e=await h.text().catch(()=>``);throw r.fromResponse(h,e,o,s)}if(!h.body)throw new u(`Response has no body`);return h}async function*ee(e,n,r={}){if(e.disposed)throw new l(`StreamClient`);let{body:i,fetchInit:a,headers:o,method:s=i===void 0?`GET`:`POST`,onError:c,params:d,parse:f=`text`,query:p,reconnect:m=!1,signal:h,timeout:g}=r;g!==void 0&&v(g);let _=m===!0?{}:m===!1?{times:0}:m,y=_.times??(m?5:0),b=_.delay??E,x=new AbortController,S=e.track(x),C=0,w=!1;try{for(;!e.disposed&&!x.signal.aborted;){let r,l=!1;try{let t=(await Q(e,n,x,{body:i,extSignal:h,fetchInit:a,headers:o,method:s,params:d,query:p,timeout:g})).body.getReader(),r=new TextDecoder;try{if(f===`ndjson`){let e=``;for(;;){let{done:n,value:i}=await t.read();if(n){let t=e.trim();if(t)try{yield JSON.parse(t)}catch{throw new u(`NDJSON: failed to parse line: ${t.slice(0,200)}`)}l=!0;break}e+=r.decode(i,{stream:!0});let a;for(;(a=e.indexOf(`
|
|
2
|
-
`)
|
|
3
|
-
`).
|
|
4
|
-
`);let i;for(;(
|
|
5
|
-
`))!==-1;){let e=
|
|
6
|
-
`:``)+r;else if(n===`id`&&!r.includes(`\0`))h=r;else if(n===`retry`){let e=parseInt(r,10);Number.isNaN(e)||(w=e)}}}}}finally{t.releaseLock()}}async function O(){let n=0;try{for(;!y&&!e.disposed&&!g.signal.aborted;){let r;b=`connecting`;try{b=`open`,await D()}catch(t){if(y||e.disposed||g.signal.aborted)break;r=t instanceof Error?t:Error(String(t))}if(y||e.disposed||g.signal.aborted)break;if(C===0){r&&c?.(r);break}if(n>=C){c?.(r??Error(`[courier] SSE reconnect budget exhausted`));break}b=`reconnecting`;let i=typeof w==`function`?w(n):w;n++,await(0,t.sleep)(i,g.signal).catch(()=>{})}}finally{b=`closed`,_()}}return O().catch(t=>{!y&&!e.disposed&&c?.(t instanceof Error?t:Error(String(t)))}),{get closed(){return y},dispose(){y=!0,g.abort(),h.clear()},on(e,t){if(y)return()=>{};let n=h.get(e);return n||(n=new Set,h.set(e,n)),n.add(t),()=>n.delete(t)},get status(){return b},[Symbol.dispose](){this.dispose()}}}function $(e){let{transport:t,...n}=e??{},r=!t,i=t??b(n);return{cancelAll(){i.cancelAll()},get disposalSignal(){return i.disposalSignal},dispose(){r&&i.dispose()},get disposed(){return i.disposed},getHeaders:i.getHeaders,headers:i.headers,readable:(e,t)=>ee(i,e,t),sse:(e,t)=>ne(i,e,t),[Symbol.dispose](){this.dispose()},use:i.use}}function re(e){let{mutationDefaults:t,query:n,...r}=e??{},i=b(r),a=w({transport:i}),o=$({transport:i}),s=Z(n);return{api:a,cancelAll(){i.cancelAll(),s.cancelAll()},get disposalSignal(){return i.disposalSignal},dispose(){i.dispose(),s.dispose()},get disposed(){return i.disposed},headers:i.headers,mutation(e,n){let{invalidates:r,sets:i,...a}=n??{},o=async(e,t)=>{if(i){let n=i(e,t);for(let[e,t]of n)s.set(e,t)}if(r)for(let e of r)s.invalidate(e);await a.onSuccess?.(e,t)};return k(e,{...t,...a,onSuccess:o})},query:s,stream:o,[Symbol.dispose](){this.dispose()},use:i.use}}var ie=!globalThis.__COURIER_PROD__;function ae(e){ie&&console.warn(`[@vielzeug/courier] ${e}`)}function oe(e,t){let n=[],r=typeof document<`u`,i=typeof window<`u`;if(!r&&!i&&ae(`bindRefetch() called with no document/window in scope — no listeners attached`),r){let t=()=>{document.visibilityState===`visible`&&e.refetchStale()};document.addEventListener(`visibilitychange`,t),n.push(()=>document.removeEventListener(`visibilitychange`,t))}if(i){let t=()=>e.refetchStale();window.addEventListener(`online`,t),n.push(()=>window.removeEventListener(`online`,t))}let a=()=>{for(let e of n)e();n.length=0};return t?.signal?.addEventListener(`abort`,a,{once:!0}),a}function se(e){return async(t,n)=>{let r=typeof e==`function`?await e():e;return n(t.withHeaders({authorization:`Bearer ${r}`}))}}function ce(e){let n=e?.header??`x-request-id`,r=e?.generate??t.uuid;return(e,t)=>t(e.withHeaders({[n]:r()}))}function le(e){let t=e?.logger??((e,t)=>{console.debug(e,t)});return async(e,n)=>{let r=performance.now(),i=(e.init.method??`GET`).toUpperCase();try{let a=await n(e),o=Math.round(performance.now()-r);return t(`${i} ${e.url} ${a.status} (${o}ms)`,{duration:o,method:i,status:a.status,url:e.url}),a}catch(n){let a=Math.round(performance.now()-r);throw t(`${i} ${e.url} ERR (${a}ms)`,{duration:a,method:i,status:0,url:e.url}),n}}}function ue(e,n){let{keys:r,onError:i,prefix:a=`courier:`,storage:o}=n,s=e.keys(),c=typeof r==`function`?s.filter(r):r,l=[];function u(e){return`${a}${(0,t.hash)(e)}`}function d(e,t){if(t.status!==`success`)return;let n={data:t.data,updatedAt:t.updatedAt};try{let t=o.setItem(u(e),JSON.stringify(n));t instanceof Promise&&t.catch(t=>i?.(t,e))}catch(t){i?.(t,e)}}for(let t of c){let n=e.getState(t);n&&d(t,n);let r=e.observe({fetch:!1,key:t}),i=r.subscribe(()=>d(t,r.peek()));l.push(i)}return()=>{for(let e of l)e();l.length=0}}async function de(e,n){let{keys:r,maxAge:i,onError:a,prefix:o=`courier:`,storage:s}=n,c=e.keys(),l=typeof r==`function`?c.filter(r):r;await Promise.all(l.map(async n=>{try{let r=await s.getItem(`${o}${(0,t.hash)(n)}`);if(!r)return;let c=JSON.parse(r);if(typeof c!=`object`||!c||!(`data`in c)||typeof c.updatedAt!=`number`){a?.(Error(`[courier] Malformed persisted entry`),n);return}let l=c;if(i!==void 0&&Date.now()-l.updatedAt>i)return;e.set(n,l.data,{updatedAt:l.updatedAt})}catch(e){a?.(e,n)}}))}function fe(e){return{peek:()=>e.peek(),subscribe:t=>e.subscribe(t)}}return e.CourierAbortError=o,e.CourierBatcherError=c,e.CourierDisposedError=l,e.CourierError=n,e.CourierHttpError=r,e.CourierNetworkError=i,e.CourierParseError=u,e.CourierSchemaValidationError=s,e.CourierTimeoutError=a,e.bindRefetch=oe,e.createApi=w,e.createBatcher=T,e.createCourier=re,e.createMutation=k,e.createQuery=Z,e.createStream=$,e.hydrateQueryCache=de,e.persistQueryCache=ue,e.toSyncStore=fe,e.withBearerAuth=se,e.withLogging=le,e.withRequestId=ce,e})({},Arsenal);
|
|
1
|
+
var Courier=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},n=class e extends t{url;method;status;data;headers;constructor(e){super(e.message),this.url=e.url,this.method=e.method,this.status=e.status,this.data=e.data,this.headers=e.headers}static fromResponse(t,n,r,i){return new e({data:n,headers:t.headers,message:t.statusText||`HTTP ${t.status}`,method:r,status:t.status,url:i})}static is(t,n){return t instanceof e&&(n===void 0||t.status===n)}},r=class extends t{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},i=class extends t{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},a=class extends t{url;method;constructor(e){super(e.message,{cause:e.cause}),this.url=e.url,this.method=e.method}},o=class extends t{data;constructor(e,t){super(e instanceof Error?e.message:String(e),{cause:e}),this.data=t}},s=class extends t{constructor(e){super(`[courier] ${e} disposed`)}},c=class extends t{};function l(e,t,n,o){let s=e instanceof Error?e.message:String(e),c=o?.reason;return c instanceof Error&&c.name===`TimeoutError`?new i({cause:e,message:s,method:t,url:n}):e instanceof DOMException?e.name===`TimeoutError`?new i({cause:e,message:s,method:t,url:n}):new a({cause:e,message:s,method:t,url:n}):e instanceof Error&&e.name===`AbortError`||o?.aborted?new a({cause:e,message:s,method:t,url:n}):new r({cause:e,message:s,method:t,url:n})}async function u(e,t=`auto`){if(t===`raw`)return e;if(e.status===204||e.status===205||e.status===304)return;if(t===`json`)return e.json();if(t===`text`)return e.text();if(t===`blob`)return e.blob();if(t===`arrayBuffer`)return e.arrayBuffer();let n=e.headers.get(`content-type`)??``;return n.includes(`application/json`)||n.includes(`+json`)?e.json():n.startsWith(`text/`)?e.text():n.startsWith(`image/`)||n.startsWith(`audio/`)||n.startsWith(`video/`)?e.blob():e.text()}var d=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},f=class extends d{};function p(e,t,n){if(e===void 0)return`undefined`;if(e===null)return`null`;if(typeof e==`bigint`)return`${e}n`;if(typeof e!=`object`)return JSON.stringify(e);if(n.has(e))return`[Circular]`;if(n.add(e),e instanceof Date)return`[Date:${Number.isNaN(e.getTime())?`Invalid`:e.toISOString()}]`;if(e instanceof RegExp)return`[RegExp:${e.source}/${e.flags}]`;if(e instanceof Set)return`[Set:${[...e].map(e=>p(e,t,n)).sort().join(`,`)}]`;if(e instanceof Map)return`[Map:${[...e.entries()].map(([e,r])=>[p(e,t,n),p(r,t,n)]).sort(([e,t],[n,r])=>e===n?t.localeCompare(r):e.localeCompare(n)).map(([e,t])=>`${e}=>${t}`).join(`,`)}]`;if(Array.isArray(e))return`[${e.map(e=>p(e,t,n)).join(`,`)}]`;let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null){if(t?.onClassInstance===`throw`)throw new f(`hash: unsupported type ${e.constructor?.name??`unknown`}`);return String(e)}let i=e;return`{${Object.keys(i).filter(e=>i[e]!==void 0).sort().map(e=>`${JSON.stringify(e)}:${p(i[e],t,n)}`).join(`,`)}}`}function m(e,t){return p(e,t,new Set)}function h(e,t,n,r,i){return n!==void 0&&!g(n)?{...i,body:JSON.stringify(n),headers:{"content-type":`application/json`,...t},method:e.toUpperCase(),signal:r}:{...i,...n!==void 0&&{body:n},headers:t,method:e.toUpperCase(),signal:r}}function g(e){return e instanceof FormData||e instanceof Blob||e instanceof URLSearchParams||typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof ReadableStream<`u`&&e instanceof ReadableStream}function _(e,t,n){return{headers:t,init:n,url:e,withHeaders(r){let i={...t};for(let[e,t]of Object.entries(r))i[e.toLowerCase()]=t;return _(e,i,n)}}}function v(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}var y=3e4;function b(e){if((e<=0||!Number.isFinite(e))&&e!==1/0)throw new t(`[courier] timeout must be a positive number or Infinity`)}function x(e,t){return e===1/0?t??void 0:v(AbortSignal.timeout(e),t)}function S(e={}){let{baseUrl:t=``,fetch:n=globalThis.fetch,headers:r={},timeout:i=y}=e;b(i);let a=Object.fromEntries(Object.entries(r).map(([e,t])=>[e.toLowerCase(),t])),o=new Set,s=new AbortController,c=[],l=null,u=!1;function d(){if(l)return l;let e=e=>n(e.url,{...e.init,headers:e.headers});return l=c.length===0?e:c.reduceRight((e,t)=>n=>t(n,e),e),l}function f(e){return c.push(e),l=null,()=>{let t=c.indexOf(e);t!==-1&&(c.splice(t,1),l=null)}}function p(e){for(let[t,n]of Object.entries(e)){let e=t.toLowerCase();n===void 0?delete a[e]:a[e]=n}}function m(){return{...a}}function h(e,t){let n=e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])):void 0;return{...a,...n,...t}}function g(e){return o.add(e),()=>o.delete(e)}function v(e){return d()(_(e.url,e.headers,e.init))}function x(){for(let e of[...o])e.abort();o.clear()}function S(){if(!u){u=!0,s.abort();for(let e of o)e.abort();o.clear(),c.length=0,l=null}}return{baseUrl:t,cancelAll:x,dispatch:v,get disposalSignal(){return s.signal},dispose:S,get disposed(){return u},getHeaders:m,getTimeout(){return i},headers:p,mergeHeaders:h,track:g,use:f}}function C(e,t,n,r){let i=e.replace(/\/+$/,``),a=t.replace(/^\/+/,``);a=a.replace(/\{([^}]+)\}/g,(e,r)=>{let i=n?.[r];if(i==null)throw new c(`unresolved path param {${r}} in '${t}'`);return encodeURIComponent(String(i))});let o=i&&a?`${i}/${a}`:i||a;if(!r)return o;let s=new URLSearchParams;for(let[e,t]of Object.entries(r))if(t!==void 0){if(Array.isArray(t)){for(let n of t)n!==void 0&&s.append(e,n===null?``:String(n));continue}s.append(e,t===null?``:String(t))}let l=s.toString();return l?`${o}${o.includes(`?`)?`&`:`?`}${l}`:o}function w(e){let{transport:t,...r}=e??{},i=t??S(r),a=!t;async function c(e,t,r,a,s,c){let d=t.signal,f;try{f=await i.dispatch({headers:e,init:t,url:r})}catch(e){throw l(e,a,r,d)}if(!f.ok){let e=f.headers.get(`content-type`)?.includes(`json`)??!1,t;if(typeof f.text==`function`){let n=await f.text().catch(()=>``);if(t=n,n&&e)try{t=JSON.parse(n)}catch{}}else t=await u(f,e?`json`:`auto`).catch(()=>``);throw n.fromResponse(f,t,a,r)}let p;try{p=await u(f,s??`auto`)}catch(e){throw l(e,a,r,d)}if(c)try{return c.parse(p)}catch(e){throw new o(e,p)}return p}async function d(e,t,n={}){if(i.disposed)throw new s(`Courier`);let r=e.toUpperCase(),a;try{a=C(i.baseUrl,t,n.params,n.query)}catch(e){throw l(e,r,t)}let{body:o,fetchInit:u,headers:d,responseType:f,schema:p,signal:m,timeout:g}=n;g!==void 0&&b(g);let _=new AbortController,y=i.track(_),S=x(g??i.getTimeout(),v(m,_.signal)),{headers:w,...T}=h(r,i.mergeHeaders(d),o,S,u??{});try{return await c(w,T,a,r,f,p)}finally{y()}}return{cancelAll:i.cancelAll,delete:(e,t)=>d(`DELETE`,e,t),get disposalSignal(){return i.disposalSignal},dispose(){a&&i.dispose()},get disposed(){return i.disposed},get:(e,t)=>d(`GET`,e,t),getHeaders:i.getHeaders,headers:i.headers,patch:(e,t)=>d(`PATCH`,e,t),post:(e,t)=>d(`POST`,e,t),put:(e,t)=>d(`PUT`,e,t),request:d,[Symbol.dispose](){this.dispose()},use:i.use}}var T=0;function E(e=!1){return{data:void 0,error:null,isFetching:e,status:`loading`,updatedAt:void 0}}function D(e){let t=new Map,n=new Map,r=e?.signal?.aborted??!1,i=e=>{for(let t of[...n.get(m(e))??[]])t()},a=()=>{for(let e of t.values())e.controller?.abort()},o=()=>{let e=[...t.values()].map(e=>e.key);a(),t.clear();for(let t of e)i(t)};e?.signal?.addEventListener(`abort`,()=>{r=!0,o()},{once:!0});let c=e=>{let n=m(e),r=t.get(n);return r||(r={controller:void 0,definition:void 0,key:e,promise:void 0,snapshot:E()},t.set(n,r)),r},l=(t,n)=>{if(r)return Promise.reject(new s(`QueryCache`));if(!t.definition)return Promise.reject(Error(`No fetch function registered for query ${m(t.key)}.`));let a=t.definition.staleTime??e?.staleTime??T;if(!n&&t.snapshot.status===`success`&&Date.now()-t.snapshot.updatedAt<a&&!t.snapshot.isFetching)return Promise.resolve(t.snapshot.data);if(t.promise)return t.promise;let o=new AbortController;t.controller=o,t.snapshot=t.snapshot.status===`success`?{...t.snapshot,isFetching:!0}:{...E(!0)},i(t.key);let c=Promise.resolve().then(()=>t.definition.fetch({key:t.key,signal:o.signal})).then(e=>(t.snapshot={data:e,error:null,isFetching:!1,status:`success`,updatedAt:Date.now()},t.controller=void 0,t.promise=void 0,i(t.key),e),e=>{let n=e instanceof Error?e:Error(String(e));throw t.snapshot={data:t.snapshot.status===`success`?t.snapshot.data:void 0,error:n,isFetching:!1,status:`error`,updatedAt:Date.now()},t.controller=void 0,t.promise=void 0,i(t.key),n});return t.promise=c,c};return{cancelAll:a,clear:o,fetch(e,t){let n=c(e.key);return n.definition=e,l(n,t?.force??!1)},get(e){let n=t.get(m(e));return n?.snapshot.status===`success`?n.snapshot.data:void 0},getSnapshot(e){return t.get(m(e))?.snapshot??null},invalidate(e){for(let n of t.values())e.length<=n.key.length&&e.every((e,t)=>m(e)===m(n.key[t]))&&(n.snapshot.status===`success`&&(n.snapshot={...n.snapshot,updatedAt:0}),i(n.key))},keys(){return[...t.values()].map(e=>e.key)},refetchStale(){for(let n of t.values()){if(!n.definition||n.snapshot.status!==`success`||n.snapshot.isFetching)continue;let t=n.definition.staleTime??e?.staleTime??T;Date.now()-n.snapshot.updatedAt>=t&&l(n,!0).catch(()=>{`${m(n.key)}`})}},set(e,t,n){let r=c(e);r.snapshot={data:t,error:null,isFetching:!1,status:`success`,updatedAt:n?.updatedAt??Date.now()},i(e)},subscribe(e,t){let r=m(e),i=n.get(r)??new Set;return i.add(t),n.set(r,i),()=>{i.delete(t),i.size===0&&n.delete(r)}}}}function O(e){let t=new AbortController,n=e(t.signal);return{next:e=>n.next(e),return:e=>(t.abort(),n.return(e)),[Symbol.asyncIterator](){return this},throw:e=>(t.abort(),n.throw(e))}}async function k(e,t,r){if(e.disposed)throw new s(`Courier`);let i=new AbortController,a=e.track(i),o=(r.method??(r.body===void 0?`GET`:`POST`)).toUpperCase(),u=x(r.timeout??1/0,v(r.signal,i.signal)),d=t;try{d=C(e.baseUrl,t,r.params,r.query);let{headers:s,...l}=h(o,e.mergeHeaders(r.headers),r.body,u,r.fetchInit??{}),f=await e.dispatch({headers:s,init:l,url:d});if(!f.ok)throw n.fromResponse(f,await f.text().catch(()=>``),o,d);if(!f.body)throw new c(`Response has no body`);return{controller:i,response:f,untrack:a}}catch(e){throw a(),e instanceof n||e instanceof c?e:l(e,o,d,u)}}function A(e){async function*t(t,n){let{controller:r,response:i,untrack:a}=await k(e,t,n),o=i.body.getReader(),s=new TextDecoder,c=``,l=`message`,u=``;try{for(;;){let e=await o.read();if(e.done)break;c+=s.decode(e.value,{stream:!0}).replace(/\r\n?/g,`
|
|
2
|
+
`);let t;for(;(t=c.indexOf(`
|
|
3
|
+
`))!==-1;){let e=c.slice(0,t);if(c=c.slice(t+1),e===``){if(u!==``){let e=u.endsWith(`
|
|
4
|
+
`)?u.slice(0,-1):u;try{e=JSON.parse(e)}catch{}yield{data:e,event:l}}u=``,l=`message`;continue}if(e.startsWith(`:`))continue;let n=e.indexOf(`:`),r=n===-1?e:e.slice(0,n),i=(n===-1?``:e.slice(n+1)).replace(/^ /,``);r===`data`?u+=`${i}\n`:r===`event`&&(l=i)}}}finally{o.releaseLock(),r.abort(),a()}}async function*n(t,n){let{controller:r,response:i,untrack:a}=await k(e,t,n),o=i.body.getReader(),s=new TextDecoder,l=``;try{for(;;){let e=await o.read();if(e.done){if(n.parse===`ndjson`&&l.trim())try{yield JSON.parse(l)}catch{throw new c(`NDJSON: failed to parse line: ${l.slice(0,200)}`)}break}let t=s.decode(e.value,{stream:!0});if(n.parse!==`ndjson`){yield t;continue}l+=t;let r;for(;(r=l.indexOf(`
|
|
5
|
+
`))!==-1;){let e=l.slice(0,r).trim();if(l=l.slice(r+1),e)try{yield JSON.parse(e)}catch{throw new c(`NDJSON: failed to parse line: ${e.slice(0,200)}`)}}}}finally{o.releaseLock(),r.abort(),a()}}return{events(e,n={}){return O(r=>t(e,{...n,headers:{accept:`text/event-stream`,"cache-control":`no-cache`,...n.headers},signal:v(n.signal,r)}))},read(e,t={}){return O(r=>n(e,{...t,signal:v(t.signal,r)}))}}}function j(e={}){let{query:t,...n}=e,r=S(n),i=w({transport:r}),a=D({...t,signal:r.disposalSignal}),o=a,c=A(r),l=new Set;return{cancelAll(){r.cancelAll(),a.cancelAll();for(let e of l)e.abort()},delete:i.delete,get disposalSignal(){return r.disposalSignal},dispose(){for(let e of l)e.abort();l.clear(),o.clear(),r.dispose()},get disposed(){return r.disposed},events:c.events,get:i.get,getHeaders:i.getHeaders,headers:r.headers,mutate:async e=>{if(r.disposed)throw new s(`Courier`);let t=new AbortController;l.add(t);let n=v(e.signal,t.signal,r.disposalSignal)??t.signal;try{let t=await e.request({signal:n});return await e.onSuccess?.(t,o),t}finally{l.delete(t)}},patch:i.patch,post:i.post,put:i.put,queries:o,read:c.read,request:i.request,[Symbol.dispose](){this.dispose()},use:r.use}}function M(){return crypto.randomUUID()}function N(e){return async(t,n)=>{let r=typeof e==`function`?await e():e;return n(t.withHeaders({authorization:`Bearer ${r}`}))}}function P(e){let t=e?.header??`x-request-id`,n=e?.generate??M;return(e,r)=>r(e.withHeaders({[t]:n()}))}function F(e){let t=e?.logger??((e,t)=>{console.debug(e,t)});return async(e,n)=>{let r=performance.now(),i=(e.init.method??`GET`).toUpperCase();try{let a=await n(e),o=Math.round(performance.now()-r);return t(`${i} ${e.url} ${a.status} (${o}ms)`,{duration:o,method:i,status:a.status,url:e.url}),a}catch(n){let a=Math.round(performance.now()-r);throw t(`${i} ${e.url} ERR (${a}ms)`,{duration:a,method:i,status:0,url:e.url}),n}}}return e.CourierAbortError=a,e.CourierDisposedError=s,e.CourierError=t,e.CourierHttpError=n,e.CourierNetworkError=r,e.CourierParseError=c,e.CourierSchemaValidationError=o,e.CourierTimeoutError=i,e.createCourier=j,e.withBearerAuth=N,e.withLogging=F,e.withRequestId=P,e})({});
|
|
7
6
|
//# sourceMappingURL=courier.iife.js.map
|