zipfetch 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js ADDED
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Main ZipFetch client class
3
+ */
4
+ import { ZipError } from './error.js';
5
+ import { ResponseCache } from './cache.js';
6
+ import { RateLimiter } from './rate-limiter.js';
7
+ export class ZipFetch {
8
+ config;
9
+ cache;
10
+ rateLimiter;
11
+ requestInterceptors = [];
12
+ responseInterceptors = [];
13
+ errorInterceptors = [];
14
+ constructor(config = {}) {
15
+ this.config = {
16
+ timeout: 30000,
17
+ retry: { attempts: 0 },
18
+ cache: { enabled: false, ttl: 60000, methods: ['GET'] },
19
+ ...config,
20
+ };
21
+ this.cache = new ResponseCache();
22
+ if (config.rateLimit) {
23
+ this.rateLimiter = new RateLimiter(config.rateLimit);
24
+ }
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Interceptors
28
+ // ---------------------------------------------------------------------------
29
+ interceptors = {
30
+ request: {
31
+ use: (interceptor) => {
32
+ this.requestInterceptors.push(interceptor);
33
+ return this.requestInterceptors.length - 1;
34
+ },
35
+ eject: (index) => {
36
+ this.requestInterceptors.splice(index, 1);
37
+ },
38
+ clear: () => {
39
+ this.requestInterceptors = [];
40
+ },
41
+ },
42
+ response: {
43
+ use: (interceptor) => {
44
+ this.responseInterceptors.push(interceptor);
45
+ return this.responseInterceptors.length - 1;
46
+ },
47
+ eject: (index) => {
48
+ this.responseInterceptors.splice(index, 1);
49
+ },
50
+ clear: () => {
51
+ this.responseInterceptors = [];
52
+ },
53
+ },
54
+ error: {
55
+ use: (interceptor) => {
56
+ this.errorInterceptors.push(interceptor);
57
+ return this.errorInterceptors.length - 1;
58
+ },
59
+ eject: (index) => {
60
+ this.errorInterceptors.splice(index, 1);
61
+ },
62
+ clear: () => {
63
+ this.errorInterceptors = [];
64
+ },
65
+ },
66
+ };
67
+ // ---------------------------------------------------------------------------
68
+ // Core Request Method
69
+ // ---------------------------------------------------------------------------
70
+ async request(config) {
71
+ // Apply request interceptors
72
+ let finalConfig = { ...config };
73
+ for (const interceptor of this.requestInterceptors) {
74
+ finalConfig = await interceptor(finalConfig);
75
+ }
76
+ // Build URL
77
+ const url = this.buildUrl(finalConfig);
78
+ // Check cache
79
+ const method = (finalConfig.method?.toUpperCase() || 'GET');
80
+ const cacheEnabled = this.isCacheEnabled(finalConfig, method);
81
+ if (cacheEnabled) {
82
+ const cached = this.cache.get(url, finalConfig);
83
+ if (cached)
84
+ return cached;
85
+ }
86
+ // Rate limiting
87
+ if (this.rateLimiter) {
88
+ await this.rateLimiter.acquire();
89
+ }
90
+ // Execute request with retry
91
+ const response = await this.executeWithRetry(url, finalConfig);
92
+ // Cache successful response
93
+ if (cacheEnabled && response.status >= 200 && response.status < 300) {
94
+ this.cache.set(url, finalConfig, response, this.config.cache?.ttl || 60000);
95
+ }
96
+ // Apply response interceptors
97
+ let finalResponse = response;
98
+ for (const interceptor of this.responseInterceptors) {
99
+ finalResponse = (await interceptor(finalResponse));
100
+ }
101
+ return finalResponse;
102
+ }
103
+ buildUrl(config) {
104
+ const baseURL = config.baseURL || this.config.baseURL || '';
105
+ let url = config.url || '';
106
+ if (baseURL && !url.startsWith('http')) {
107
+ url = `${baseURL.replace(/\/$/, '')}/${url.replace(/^\//, '')}`;
108
+ }
109
+ // Add query params
110
+ if (config.params) {
111
+ const searchParams = new URLSearchParams();
112
+ for (const [key, value] of Object.entries(config.params)) {
113
+ if (value !== undefined) {
114
+ searchParams.append(key, String(value));
115
+ }
116
+ }
117
+ const queryString = searchParams.toString();
118
+ if (queryString) {
119
+ url += (url.includes('?') ? '&' : '?') + queryString;
120
+ }
121
+ }
122
+ return url;
123
+ }
124
+ isCacheEnabled(config, method) {
125
+ return (config.useCache !== false &&
126
+ this.config.cache?.enabled === true &&
127
+ (this.config.cache.methods?.includes(method) ?? false));
128
+ }
129
+ async executeWithRetry(url, config) {
130
+ const retryConfig = config.retry || this.config.retry || { attempts: 0 };
131
+ const maxAttempts = (retryConfig.attempts || 0) + 1;
132
+ let lastError = null;
133
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
134
+ try {
135
+ const response = await this.executeRequest(url, config);
136
+ // Check if should retry based on response
137
+ if (attempt < maxAttempts && this.shouldRetry(response, retryConfig)) {
138
+ await this.delay(attempt, retryConfig);
139
+ continue;
140
+ }
141
+ return response;
142
+ }
143
+ catch (error) {
144
+ lastError =
145
+ error instanceof ZipError ? error : ZipError.network(config, error);
146
+ if (attempt < maxAttempts) {
147
+ await this.delay(attempt, retryConfig);
148
+ continue;
149
+ }
150
+ }
151
+ }
152
+ // Apply error interceptors
153
+ for (const interceptor of this.errorInterceptors) {
154
+ lastError = await interceptor(lastError);
155
+ }
156
+ throw lastError;
157
+ }
158
+ async executeRequest(url, config) {
159
+ const timeout = config.timeout || this.config.timeout || 30000;
160
+ const controller = new AbortController();
161
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
162
+ try {
163
+ // Merge headers
164
+ const headers = new Headers({
165
+ 'Content-Type': 'application/json',
166
+ ...this.config.headers,
167
+ ...config.headers,
168
+ });
169
+ // Prepare body
170
+ const body = this.prepareBody(config, headers);
171
+ const request = new Request(url, {
172
+ method: config.method || 'GET',
173
+ headers,
174
+ body,
175
+ signal: controller.signal,
176
+ credentials: config.credentials,
177
+ mode: config.mode,
178
+ redirect: config.redirect,
179
+ referrer: config.referrer,
180
+ referrerPolicy: config.referrerPolicy,
181
+ integrity: config.integrity,
182
+ });
183
+ const response = await fetch(request);
184
+ clearTimeout(timeoutId);
185
+ // Parse response
186
+ const data = await this.parseResponse(response);
187
+ const zipResponse = {
188
+ data,
189
+ status: response.status,
190
+ statusText: response.statusText,
191
+ headers: response.headers,
192
+ config,
193
+ request,
194
+ };
195
+ // Throw on error status codes
196
+ if (!response.ok) {
197
+ throw new ZipError(`Request failed with status ${response.status}`, config, zipResponse);
198
+ }
199
+ return zipResponse;
200
+ }
201
+ catch (error) {
202
+ clearTimeout(timeoutId);
203
+ if (error instanceof ZipError) {
204
+ throw error;
205
+ }
206
+ if (error.name === 'AbortError') {
207
+ throw ZipError.timeout(config);
208
+ }
209
+ throw ZipError.network(config, error);
210
+ }
211
+ }
212
+ prepareBody(config, headers) {
213
+ if (config.data === undefined) {
214
+ return undefined;
215
+ }
216
+ if (config.data instanceof FormData ||
217
+ config.data instanceof URLSearchParams ||
218
+ config.data instanceof Blob ||
219
+ config.data instanceof ArrayBuffer ||
220
+ typeof config.data === 'string') {
221
+ // Remove Content-Type for FormData to let browser set it
222
+ if (config.data instanceof FormData) {
223
+ headers.delete('Content-Type');
224
+ }
225
+ return config.data;
226
+ }
227
+ return JSON.stringify(config.data);
228
+ }
229
+ async parseResponse(response) {
230
+ const contentType = response.headers.get('content-type');
231
+ if (contentType?.includes('application/json')) {
232
+ return response.json();
233
+ }
234
+ if (contentType?.includes('text/')) {
235
+ return response.text();
236
+ }
237
+ return response.blob();
238
+ }
239
+ shouldRetry(response, config) {
240
+ if (!config.retryOn) {
241
+ return response.status >= 500;
242
+ }
243
+ if (Array.isArray(config.retryOn)) {
244
+ return config.retryOn.includes(response.status);
245
+ }
246
+ return response.status >= 500;
247
+ }
248
+ async delay(attempt, config) {
249
+ const baseDelay = config.delay || 1000;
250
+ let delay;
251
+ if (config.backoff === 'exponential') {
252
+ delay = baseDelay * Math.pow(2, attempt - 1);
253
+ }
254
+ else {
255
+ delay = baseDelay * attempt;
256
+ }
257
+ // Add jitter (±10%)
258
+ const jitter = delay * 0.1 * (Math.random() * 2 - 1);
259
+ delay += jitter;
260
+ return new Promise((resolve) => setTimeout(resolve, delay));
261
+ }
262
+ // ---------------------------------------------------------------------------
263
+ // HTTP Method Shortcuts
264
+ // ---------------------------------------------------------------------------
265
+ get(url, config) {
266
+ return this.request({ ...config, url, method: 'GET' });
267
+ }
268
+ post(url, data, config) {
269
+ return this.request({ ...config, url, method: 'POST', data });
270
+ }
271
+ put(url, data, config) {
272
+ return this.request({ ...config, url, method: 'PUT', data });
273
+ }
274
+ patch(url, data, config) {
275
+ return this.request({ ...config, url, method: 'PATCH', data });
276
+ }
277
+ delete(url, config) {
278
+ return this.request({ ...config, url, method: 'DELETE' });
279
+ }
280
+ head(url, config) {
281
+ return this.request({ ...config, url, method: 'HEAD' });
282
+ }
283
+ options(url, config) {
284
+ return this.request({ ...config, url, method: 'OPTIONS' });
285
+ }
286
+ // ---------------------------------------------------------------------------
287
+ // Utility Methods
288
+ // ---------------------------------------------------------------------------
289
+ clearCache() {
290
+ this.cache.clear();
291
+ }
292
+ create(config) {
293
+ return new ZipFetch({ ...this.config, ...config });
294
+ }
295
+ getConfig() {
296
+ return { ...this.config };
297
+ }
298
+ }
299
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,QAAQ;IACX,MAAM,CAAiB;IACvB,KAAK,CAAgB;IACrB,WAAW,CAAe;IAE1B,mBAAmB,GAAyB,EAAE,CAAC;IAC/C,oBAAoB,GAA0B,EAAE,CAAC;IACjD,iBAAiB,GAAuB,EAAE,CAAC;IAEnD,YAAY,SAAyB,EAAE;QACrC,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;YACtB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE;YACvD,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E,YAAY,GAAG;QACb,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,WAA+B,EAAE,EAAE;gBACvC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;gBACvB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAChC,CAAC;SACF;QACD,QAAQ,EAAE;YACR,GAAG,EAAE,CAAC,WAAgC,EAAE,EAAE;gBACxC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C,CAAC;YACD,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;gBACvB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YACjC,CAAC;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE,CAAC,WAA6B,EAAE,EAAE;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;gBACvB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC9B,CAAC;SACF;KACF,CAAC;IAEF,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E,KAAK,CAAC,OAAO,CAAc,MAAqB;QAC9C,6BAA6B;QAC7B,IAAI,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAChC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnD,WAAW,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,YAAY;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEvC,cAAc;QACd,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,KAAK,CAAe,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,WAAW,CAAC,CAAC;YACnD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAI,GAAG,EAAE,WAAW,CAAC,CAAC;QAElE,4BAA4B;QAC5B,IAAI,YAAY,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC9E,CAAC;QAED,8BAA8B;QAC9B,IAAI,aAAa,GAAG,QAAQ,CAAC;QAC7B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpD,aAAa,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAmB,CAAC;QACvE,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,QAAQ,CAAC,MAAqB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5D,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAE3B,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QAClE,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,cAAc,CAAC,MAAqB,EAAE,MAAkB;QAC9D,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,KAAK;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;YACnC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CACvD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAI,GAAW,EAAE,MAAqB;QAClE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,SAAS,GAAoB,IAAI,CAAC;QAEtC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;gBAE3D,0CAA0C;gBAC1C,IAAI,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;oBACrE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACvC,SAAS;gBACX,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS;oBACP,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAc,CAAC,CAAC;gBAE/E,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACvC,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjD,SAAS,GAAG,MAAM,WAAW,CAAC,SAAU,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAI,GAAW,EAAE,MAAqB;QAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;gBACtB,GAAI,MAAM,CAAC,OAAkC;aAC9C,CAAC,CAAC;YAEH,eAAe;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;gBAC9B,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,iBAAiB;YACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAI,QAAQ,CAAC,CAAC;YAEnD,MAAM,WAAW,GAAmB;gBAClC,IAAI;gBACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM;gBACN,OAAO;aACR,CAAC;YAEF,8BAA8B;YAC9B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,QAAQ,CAChB,8BAA8B,QAAQ,CAAC,MAAM,EAAE,EAC/C,MAAM,EACN,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3C,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAc,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAAqB,EAAE,OAAgB;QACzD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IACE,MAAM,CAAC,IAAI,YAAY,QAAQ;YAC/B,MAAM,CAAC,IAAI,YAAY,eAAe;YACtC,MAAM,CAAC,IAAI,YAAY,IAAI;YAC3B,MAAM,CAAC,IAAI,YAAY,WAAW;YAClC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAC/B,CAAC;YACD,yDAAyD;YACzD,IAAI,MAAM,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,MAAM,CAAC,IAAgB,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,QAAkB;QAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEzD,IAAI,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;QACvC,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAEO,WAAW,CAAC,QAAqB,EAAE,MAAmB;QAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;QAChC,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,MAAmB;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QACvC,IAAI,KAAa,CAAC;QAElB,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YACrC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;QAC9B,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,MAAM,CAAC;QAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E,GAAG,CACD,GAAW,EACX,MAA8C;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CACF,GAAW,EACX,IAAc,EACd,MAAuD;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CACD,GAAW,EACX,IAAc,EACd,MAAuD;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CACH,GAAW,EACX,IAAc,EACd,MAAuD;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CACJ,GAAW,EACX,MAA8C;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CACF,GAAW,EACX,MAA8C;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CACL,GAAW,EACX,MAA8C;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAI,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,MAAsB;QAC3B,OAAO,IAAI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Custom error class for zipfetch
3
+ */
4
+ import type { RequestConfig, ZipResponse } from './types.js';
5
+ export declare class ZipError extends Error {
6
+ config: RequestConfig;
7
+ response?: ZipResponse;
8
+ status?: number;
9
+ code?: string;
10
+ constructor(message: string, config: RequestConfig, response?: ZipResponse);
11
+ static timeout(config: RequestConfig): ZipError;
12
+ static network(config: RequestConfig, originalError: Error): ZipError;
13
+ static abort(config: RequestConfig): ZipError;
14
+ }
15
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,WAAW;IAQ1E,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ;IAM/C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,GAAG,QAAQ;IAMrE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ;CAK9C"}
package/dist/error.js ADDED
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Custom error class for zipfetch
3
+ */
4
+ export class ZipError extends Error {
5
+ config;
6
+ response;
7
+ status;
8
+ code;
9
+ constructor(message, config, response) {
10
+ super(message);
11
+ this.name = 'ZipError';
12
+ this.config = config;
13
+ this.response = response;
14
+ this.status = response?.status;
15
+ }
16
+ static timeout(config) {
17
+ const error = new ZipError('Request timeout', config);
18
+ error.code = 'TIMEOUT';
19
+ return error;
20
+ }
21
+ static network(config, originalError) {
22
+ const error = new ZipError(`Network error: ${originalError.message}`, config);
23
+ error.code = 'NETWORK';
24
+ return error;
25
+ }
26
+ static abort(config) {
27
+ const error = new ZipError('Request aborted', config);
28
+ error.code = 'ABORT';
29
+ return error;
30
+ }
31
+ }
32
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAgB;IACtB,QAAQ,CAAe;IACvB,MAAM,CAAU;IAChB,IAAI,CAAU;IAEd,YAAY,OAAe,EAAE,MAAqB,EAAE,QAAsB;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAqB;QAClC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAqB,EAAE,aAAoB;QACxD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,kBAAkB,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAqB;QAChC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * zipfetch - Ultra-fast, lightweight HTTP client built on native fetch
3
+ * Features: retries, interceptors, caching, rate limiting, timeout
4
+ */
5
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
6
+ export interface ZipFetchConfig {
7
+ baseURL?: string;
8
+ timeout?: number;
9
+ headers?: Record<string, string>;
10
+ retry?: RetryConfig;
11
+ cache?: CacheConfig;
12
+ rateLimit?: RateLimitConfig;
13
+ }
14
+ export interface RetryConfig {
15
+ attempts?: number;
16
+ delay?: number;
17
+ backoff?: 'linear' | 'exponential';
18
+ retryOn?: number[] | ((response: Response) => boolean);
19
+ }
20
+ export interface CacheConfig {
21
+ enabled?: boolean;
22
+ ttl?: number;
23
+ methods?: HttpMethod[];
24
+ }
25
+ export interface RateLimitConfig {
26
+ requests: number;
27
+ interval: number;
28
+ }
29
+ export interface RequestConfig extends Omit<RequestInit, 'body' | 'cache'> {
30
+ url?: string;
31
+ baseURL?: string;
32
+ params?: Record<string, string | number | boolean | undefined>;
33
+ data?: unknown;
34
+ timeout?: number;
35
+ retry?: RetryConfig;
36
+ useCache?: boolean;
37
+ onUploadProgress?: (progress: ProgressEvent) => void;
38
+ onDownloadProgress?: (progress: ProgressEvent) => void;
39
+ }
40
+ export interface ZipResponse<T = unknown> {
41
+ data: T;
42
+ status: number;
43
+ statusText: string;
44
+ headers: Headers;
45
+ config: RequestConfig;
46
+ request: Request;
47
+ }
48
+ export interface ProgressEvent {
49
+ loaded: number;
50
+ total: number;
51
+ percent: number;
52
+ }
53
+ export type RequestInterceptor = (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;
54
+ export type ResponseInterceptor<T = unknown> = (response: ZipResponse<T>) => ZipResponse<T> | Promise<ZipResponse<T>>;
55
+ export type ErrorInterceptor = (error: ZipError) => ZipError | Promise<ZipError>;
56
+ export declare class ZipError extends Error {
57
+ config: RequestConfig;
58
+ response?: ZipResponse;
59
+ status?: number;
60
+ code?: string;
61
+ constructor(message: string, config: RequestConfig, response?: ZipResponse);
62
+ static timeout(config: RequestConfig): ZipError;
63
+ static network(config: RequestConfig, originalError: Error): ZipError;
64
+ static abort(config: RequestConfig): ZipError;
65
+ }
66
+ declare class ZipFetch {
67
+ private config;
68
+ private cache;
69
+ private rateLimiter?;
70
+ private requestInterceptors;
71
+ private responseInterceptors;
72
+ private errorInterceptors;
73
+ constructor(config?: ZipFetchConfig);
74
+ interceptors: {
75
+ request: {
76
+ use: (interceptor: RequestInterceptor) => number;
77
+ eject: (index: number) => void;
78
+ };
79
+ response: {
80
+ use: (interceptor: ResponseInterceptor) => number;
81
+ eject: (index: number) => void;
82
+ };
83
+ error: {
84
+ use: (interceptor: ErrorInterceptor) => number;
85
+ eject: (index: number) => void;
86
+ };
87
+ };
88
+ request<T = unknown>(config: RequestConfig): Promise<ZipResponse<T>>;
89
+ private executeRequest;
90
+ private shouldRetry;
91
+ private delay;
92
+ get<T = unknown>(url: string, config?: Omit<RequestConfig, 'url' | 'method'>): Promise<ZipResponse<T>>;
93
+ post<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'url' | 'method' | 'data'>): Promise<ZipResponse<T>>;
94
+ put<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'url' | 'method' | 'data'>): Promise<ZipResponse<T>>;
95
+ patch<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'url' | 'method' | 'data'>): Promise<ZipResponse<T>>;
96
+ delete<T = unknown>(url: string, config?: Omit<RequestConfig, 'url' | 'method'>): Promise<ZipResponse<T>>;
97
+ head<T = unknown>(url: string, config?: Omit<RequestConfig, 'url' | 'method'>): Promise<ZipResponse<T>>;
98
+ options<T = unknown>(url: string, config?: Omit<RequestConfig, 'url' | 'method'>): Promise<ZipResponse<T>>;
99
+ clearCache(): void;
100
+ create(config: ZipFetchConfig): ZipFetch;
101
+ }
102
+ declare const zipfetch: ZipFetch;
103
+ export declare const request: <T = unknown>(config: RequestConfig) => Promise<ZipResponse<T>>;
104
+ export declare const get: <T = unknown>(url: string, config?: Omit<RequestConfig, "url" | "method">) => Promise<ZipResponse<T>>;
105
+ export declare const post: <T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, "url" | "method" | "data">) => Promise<ZipResponse<T>>;
106
+ export declare const put: <T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, "url" | "method" | "data">) => Promise<ZipResponse<T>>;
107
+ export declare const patch: <T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, "url" | "method" | "data">) => Promise<ZipResponse<T>>;
108
+ export declare const del: <T = unknown>(url: string, config?: Omit<RequestConfig, "url" | "method">) => Promise<ZipResponse<T>>;
109
+ export declare const head: <T = unknown>(url: string, config?: Omit<RequestConfig, "url" | "method">) => Promise<ZipResponse<T>>;
110
+ export declare const options: <T = unknown>(url: string, config?: Omit<RequestConfig, "url" | "method">) => Promise<ZipResponse<T>>;
111
+ export declare const interceptors: {
112
+ request: {
113
+ use: (interceptor: RequestInterceptor) => number;
114
+ eject: (index: number) => void;
115
+ };
116
+ response: {
117
+ use: (interceptor: ResponseInterceptor) => number;
118
+ eject: (index: number) => void;
119
+ };
120
+ error: {
121
+ use: (interceptor: ErrorInterceptor) => number;
122
+ eject: (index: number) => void;
123
+ };
124
+ };
125
+ export declare const clearCache: () => void;
126
+ export declare function create(config: ZipFetchConfig): ZipFetch;
127
+ export { ZipFetch };
128
+ export default zipfetch;
129
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IACrD,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACnG,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACtH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAMjF,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,WAAW;IAQ1E,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ;IAM/C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,GAAG,QAAQ;IAMrE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ;CAK9C;AA8FD,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,iBAAiB,CAA0B;gBAEvC,MAAM,GAAE,cAAmB;IAkBvC,YAAY;;+BAEW,kBAAkB;2BAItB,MAAM;;;+BAKF,mBAAmB;2BAIvB,MAAM;;;+BAKF,gBAAgB;2BAIpB,MAAM;;MAIvB;IAMI,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YA8F5D,cAAc;IA+F5B,OAAO,CAAC,WAAW;YAcL,KAAK;IAqBnB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAItG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIhI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI/H,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIjI,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIzG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIvG,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAQ1G,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ;CAGzC;AAMD,QAAA,MAAM,QAAQ,UAAiB,CAAC;AAGhC,eAAO,MAAM,OAAO,GAhRJ,CAAC,oBAAoB,aAAa,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAgRrB,CAAC;AACvD,eAAO,MAAM,GAAG,GAjDV,CAAC,iBAAiB,MAAM,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAiDzD,CAAC;AAC/C,eAAO,MAAM,IAAI,GA9CV,CAAC,iBAAiB,MAAM,SAAS,OAAO,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CA8CjF,CAAC;AACjD,eAAO,MAAM,GAAG,GA3CV,CAAC,iBAAiB,MAAM,SAAS,OAAO,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CA2ClF,CAAC;AAC/C,eAAO,MAAM,KAAK,GAxCV,CAAC,iBAAiB,MAAM,SAAS,OAAO,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAwChF,CAAC;AACnD,eAAO,MAAM,GAAG,GArCP,CAAC,iBAAiB,MAAM,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAqCzD,CAAC;AAClD,eAAO,MAAM,IAAI,GAlCV,CAAC,iBAAiB,MAAM,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAkCxD,CAAC;AACjD,eAAO,MAAM,OAAO,GA/BV,CAAC,iBAAiB,MAAM,WAAW,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CA+BrD,CAAC;AACvD,eAAO,MAAM,YAAY;;2BAxTA,kBAAkB;uBAItB,MAAM;;;2BAKF,mBAAmB;uBAIvB,MAAM;;;2BAKF,gBAAgB;uBAIpB,MAAM;;CAkSsB,CAAC;AAClD,eAAO,MAAM,UAAU,QAzBP,IAyB4C,CAAC;AAG7D,wBAAgB,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAEvD;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC;AAGpB,eAAe,QAAQ,CAAC"}