@zimic/fetch 1.0.6-canary.3 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -37
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -37
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var http = require('@zimic/http');
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
+
// src/client/errors/FetchResponseError.ts
|
|
7
6
|
var FetchResponseError = class extends Error {
|
|
8
7
|
constructor(request, response) {
|
|
9
8
|
super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);
|
|
@@ -11,9 +10,6 @@ var FetchResponseError = class extends Error {
|
|
|
11
10
|
this.response = response;
|
|
12
11
|
this.name = "FetchResponseError";
|
|
13
12
|
}
|
|
14
|
-
static {
|
|
15
|
-
__name(this, "FetchResponseError");
|
|
16
|
-
}
|
|
17
13
|
toObject({
|
|
18
14
|
includeRequestBody = false,
|
|
19
15
|
includeResponseBody = false
|
|
@@ -93,41 +89,25 @@ Learn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`
|
|
|
93
89
|
};
|
|
94
90
|
var FetchResponseError_default = FetchResponseError;
|
|
95
91
|
|
|
96
|
-
// ../zimic-utils/dist/chunk-
|
|
97
|
-
var __defProp2 = Object.defineProperty;
|
|
98
|
-
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
|
99
|
-
|
|
100
|
-
// ../zimic-utils/dist/chunk-FPJJAH7P.mjs
|
|
92
|
+
// ../zimic-utils/dist/chunk-46M3OXFU.mjs
|
|
101
93
|
function getExtraPatternsToEscape() {
|
|
102
94
|
return /([.(){}+$])/g;
|
|
103
95
|
}
|
|
104
|
-
__name(getExtraPatternsToEscape, "getExtraPatternsToEscape");
|
|
105
|
-
__name2(getExtraPatternsToEscape, "getExtraPatternsToEscape");
|
|
106
96
|
function getURIEncodedBackSlashPattern() {
|
|
107
97
|
return /%5C/g;
|
|
108
98
|
}
|
|
109
|
-
__name(getURIEncodedBackSlashPattern, "getURIEncodedBackSlashPattern");
|
|
110
|
-
__name2(getURIEncodedBackSlashPattern, "getURIEncodedBackSlashPattern");
|
|
111
99
|
function getPathParamPattern() {
|
|
112
100
|
return /(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)/gu;
|
|
113
101
|
}
|
|
114
|
-
__name(getPathParamPattern, "getPathParamPattern");
|
|
115
|
-
__name2(getPathParamPattern, "getPathParamPattern");
|
|
116
102
|
function getRepeatingPathParamPattern() {
|
|
117
103
|
return /(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\\+/gu;
|
|
118
104
|
}
|
|
119
|
-
__name(getRepeatingPathParamPattern, "getRepeatingPathParamPattern");
|
|
120
|
-
__name2(getRepeatingPathParamPattern, "getRepeatingPathParamPattern");
|
|
121
105
|
function getOptionalPathParamPattern() {
|
|
122
106
|
return /(?<leadingSlash>\/)?(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\?(?<trailingSlash>\/)?/gu;
|
|
123
107
|
}
|
|
124
|
-
__name(getOptionalPathParamPattern, "getOptionalPathParamPattern");
|
|
125
|
-
__name2(getOptionalPathParamPattern, "getOptionalPathParamPattern");
|
|
126
108
|
function getOptionalRepeatingPathParamPattern() {
|
|
127
109
|
return /(?<leadingSlash>\/)?(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\*(?<trailingSlash>\/)?/gu;
|
|
128
110
|
}
|
|
129
|
-
__name(getOptionalRepeatingPathParamPattern, "getOptionalRepeatingPathParamPattern");
|
|
130
|
-
__name2(getOptionalRepeatingPathParamPattern, "getOptionalRepeatingPathParamPattern");
|
|
131
111
|
function createParametrizedPathPattern(path) {
|
|
132
112
|
const replacedURL = encodeURI(path).replace(/^\/+/g, "").replace(/\/+$/g, "").replace(getExtraPatternsToEscape(), "\\$1").replace(getURIEncodedBackSlashPattern(), "\\").replace(
|
|
133
113
|
getOptionalRepeatingPathParamPattern(),
|
|
@@ -176,8 +156,6 @@ function createParametrizedPathPattern(path) {
|
|
|
176
156
|
});
|
|
177
157
|
return new RegExp(`^/?${replacedURL}/?$`);
|
|
178
158
|
}
|
|
179
|
-
__name(createParametrizedPathPattern, "createParametrizedPathPattern");
|
|
180
|
-
__name2(createParametrizedPathPattern, "createParametrizedPathPattern");
|
|
181
159
|
var createParametrizedPathPattern_default = createParametrizedPathPattern;
|
|
182
160
|
|
|
183
161
|
// ../zimic-utils/dist/url/excludeURLParams.mjs
|
|
@@ -188,8 +166,6 @@ function excludeURLParams(url) {
|
|
|
188
166
|
url.password = "";
|
|
189
167
|
return url;
|
|
190
168
|
}
|
|
191
|
-
__name(excludeURLParams, "excludeURLParams");
|
|
192
|
-
__name2(excludeURLParams, "excludeURLParams");
|
|
193
169
|
var excludeURLParams_default = excludeURLParams;
|
|
194
170
|
|
|
195
171
|
// ../zimic-utils/dist/url/joinURL.mjs
|
|
@@ -207,15 +183,10 @@ function joinURL(...parts) {
|
|
|
207
183
|
return partAsString;
|
|
208
184
|
}).filter((part) => part.length > 0).join("/");
|
|
209
185
|
}
|
|
210
|
-
__name(joinURL, "joinURL");
|
|
211
|
-
__name2(joinURL, "joinURL");
|
|
212
186
|
var joinURL_default = joinURL;
|
|
213
187
|
|
|
214
188
|
// src/client/FetchClient.ts
|
|
215
189
|
var FetchClient = class {
|
|
216
|
-
static {
|
|
217
|
-
__name(this, "FetchClient");
|
|
218
|
-
}
|
|
219
190
|
fetch;
|
|
220
191
|
constructor({ onRequest, onResponse, ...defaults }) {
|
|
221
192
|
this.fetch = this.createFetchFunction();
|
|
@@ -230,7 +201,7 @@ var FetchClient = class {
|
|
|
230
201
|
this.fetch.onResponse = onResponse;
|
|
231
202
|
}
|
|
232
203
|
createFetchFunction() {
|
|
233
|
-
const fetch =
|
|
204
|
+
const fetch = async (input, init) => {
|
|
234
205
|
const request = await this.createFetchRequest(input, init);
|
|
235
206
|
const requestClone = request.clone();
|
|
236
207
|
const rawResponse = await globalThis.fetch(
|
|
@@ -239,7 +210,7 @@ var FetchClient = class {
|
|
|
239
210
|
);
|
|
240
211
|
const response = await this.createFetchResponse(request, rawResponse);
|
|
241
212
|
return response;
|
|
242
|
-
}
|
|
213
|
+
};
|
|
243
214
|
Object.setPrototypeOf(fetch, this);
|
|
244
215
|
return fetch;
|
|
245
216
|
}
|
|
@@ -295,9 +266,6 @@ var FetchClient = class {
|
|
|
295
266
|
}
|
|
296
267
|
createRequestClass(defaults) {
|
|
297
268
|
class Request2 extends globalThis.Request {
|
|
298
|
-
static {
|
|
299
|
-
__name(this, "Request");
|
|
300
|
-
}
|
|
301
269
|
path;
|
|
302
270
|
constructor(input, init) {
|
|
303
271
|
const initWithDefaults = { ...defaults, ...init };
|
|
@@ -360,7 +328,6 @@ function createFetch(options) {
|
|
|
360
328
|
const { fetch } = new FetchClient_default(options);
|
|
361
329
|
return fetch;
|
|
362
330
|
}
|
|
363
|
-
__name(createFetch, "createFetch");
|
|
364
331
|
var factory_default = createFetch;
|
|
365
332
|
|
|
366
333
|
exports.FetchResponseError = FetchResponseError_default;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/errors/FetchResponseError.ts","../../zimic-utils/dist/chunk-2D3UJWOA.mjs","../../zimic-utils/src/url/createParametrizedPathPattern.ts","../../zimic-utils/src/url/excludeURLParams.ts","../../zimic-utils/src/url/joinURL.ts","../src/client/FetchClient.ts","../src/client/factory.ts"],"names":["HttpHeaders","__defProp","__name","Request","HttpSearchParams"],"mappings":"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","file":"index.js","sourcesContent":["import { HttpHeaders, HttpHeadersSchema, HttpSchema, HttpSchemaMethod, HttpSchemaPath } from '@zimic/http';\nimport { PossiblePromise } from '@zimic/utils/types';\n\nimport { FetchRequest, FetchRequestObject, FetchResponse, FetchResponseObject } from '../types/requests';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\nexport interface FetchResponseErrorObjectOptions {\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeRequestBody?: boolean;\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeResponseBody?: boolean;\n}\n\nexport namespace FetchResponseErrorObjectOptions {\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, including the body of\n * the request and/or response.\n */\n export type WithBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody: true } | { includeResponseBody: true });\n\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, excluding the body of\n * the request and/or response.\n */\n export type WithoutBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody?: false } | { includeResponseBody?: false });\n}\n\n/**\n * A plain object representation of a {@link FetchResponseError `FetchResponseError`}, compatible with JSON. It is useful\n * for serialization, debugging, and logging purposes.\n *\n * @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference}\n */\nexport interface FetchResponseErrorObject {\n name: string;\n message: string;\n request: FetchRequestObject;\n response: FetchResponseObject;\n}\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error `FetchResponseError` API reference} */\nclass FetchResponseError<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n> extends Error {\n constructor(\n public request: FetchRequest<Schema, Method, Path>,\n public response: FetchResponse<Schema, Method, Path, true, 'manual'>,\n ) {\n super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);\n this.name = 'FetchResponseError';\n }\n\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n toObject(options: FetchResponseErrorObjectOptions.WithBody): Promise<FetchResponseErrorObject>;\n toObject(options?: FetchResponseErrorObjectOptions.WithoutBody): FetchResponseErrorObject;\n toObject(options?: FetchResponseErrorObjectOptions): PossiblePromise<FetchResponseErrorObject>;\n toObject({\n includeRequestBody = false,\n includeResponseBody = false,\n }: FetchResponseErrorObjectOptions = {}): PossiblePromise<FetchResponseErrorObject> {\n const partialObject = {\n name: this.name,\n message: this.message,\n } satisfies Partial<FetchResponseErrorObject>;\n\n if (!includeRequestBody && !includeResponseBody) {\n return {\n ...partialObject,\n request: this.requestToObject({ includeBody: false }),\n response: this.responseToObject({ includeBody: false }),\n };\n }\n\n return Promise.all([\n Promise.resolve(this.requestToObject({ includeBody: includeRequestBody })),\n Promise.resolve(this.responseToObject({ includeBody: includeResponseBody })),\n ]).then(([request, response]) => ({ ...partialObject, request, response }));\n }\n\n private requestToObject(options: { includeBody: true }): Promise<FetchRequestObject>;\n private requestToObject(options: { includeBody: false }): FetchRequestObject;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject>;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject> {\n const request = this.request;\n\n const requestObject: FetchRequestObject = {\n url: request.url,\n path: request.path,\n method: request.method,\n headers: this.convertHeadersToObject(request),\n cache: request.cache,\n destination: request.destination,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n };\n\n if (!options.includeBody) {\n return requestObject;\n }\n\n return this.withIncludedBodyIfAvailable('request', requestObject);\n }\n\n private responseToObject(options: { includeBody: true }): Promise<FetchResponseObject>;\n private responseToObject(options: { includeBody: false }): FetchResponseObject;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject>;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject> {\n const response = this.response;\n\n const responseObject: FetchResponseObject = {\n url: response.url,\n type: response.type,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n headers: this.convertHeadersToObject(response),\n redirected: response.redirected,\n };\n\n if (!options.includeBody) {\n return responseObject;\n }\n\n return this.withIncludedBodyIfAvailable('response', responseObject);\n }\n\n private convertHeadersToObject(\n resource: FetchRequest<Schema, Method, Path> | FetchResponse<Schema, Method, Path, true, 'manual'>,\n ): HttpHeadersSchema {\n return HttpHeaders.prototype.toObject.call(resource.headers) as HttpHeadersSchema;\n }\n\n private withIncludedBodyIfAvailable(\n resourceType: 'request',\n resourceObject: FetchRequestObject,\n ): PossiblePromise<FetchRequestObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'response',\n resourceObject: FetchResponseObject,\n ): PossiblePromise<FetchResponseObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'request' | 'response',\n resourceObject: FetchRequestObject | FetchResponseObject,\n ): PossiblePromise<FetchRequestObject | FetchResponseObject> {\n const resource = this[resourceType];\n\n if (resource.bodyUsed) {\n console.warn(\n `[@zimic/fetch] Could not include the ${resourceType} body because it is already used. ` +\n 'If you access the body before calling `error.toObject()`, consider reading it from a cloned ' +\n `${resourceType}.\\n\\nLearn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`,\n );\n return resourceObject;\n }\n\n return resource.text().then((body: string) => {\n resourceObject.body = body.length > 0 ? body : null;\n return resourceObject;\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFetchRequestError = FetchResponseError<any, any, any>;\n\nexport default FetchResponseError;\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\nexport { __commonJS, __name, __toESM };\n//# sourceMappingURL=chunk-2D3UJWOA.mjs.map\n//# sourceMappingURL=chunk-2D3UJWOA.mjs.map","export function getExtraPatternsToEscape() {\n return /([.(){}+$])/g;\n}\n\nexport function getURIEncodedBackSlashPattern() {\n return /%5C/g;\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function getPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)/gu;\n}\n\nexport function getRepeatingPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\+/gu;\n}\n\nexport function getOptionalPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function getOptionalRepeatingPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createParametrizedPathPattern(path: string) {\n const replacedURL = encodeURI(path)\n .replace(/^\\/+/g, '')\n .replace(/\\/+$/g, '')\n .replace(getExtraPatternsToEscape(), '\\\\$1')\n .replace(getURIEncodedBackSlashPattern(), '\\\\')\n .replace(\n getOptionalRepeatingPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>.+?)?`;\n }\n },\n )\n .replace(getRepeatingPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>.+)`;\n })\n .replace(\n getOptionalPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>[^\\\\/]+?)?`;\n }\n },\n )\n .replace(getPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n });\n\n return new RegExp(`^/?${replacedURL}/?$`);\n}\n\nexport default createParametrizedPathPattern;\n","function excludeURLParams(url: URL) {\n url.hash = '';\n url.search = '';\n url.username = '';\n url.password = '';\n return url;\n}\n\nexport default excludeURLParams;\n","function joinURL(...parts: (URL | string)[]) {\n return parts\n .map((part, index) => {\n const isFirstPart = index === 0;\n const isLastPart = index === parts.length - 1;\n\n let partAsString = part.toString();\n\n if (!isFirstPart) {\n partAsString = partAsString.replace(/^\\//, '');\n }\n if (!isLastPart) {\n partAsString = partAsString.replace(/\\/$/, '');\n }\n\n return partAsString;\n })\n .filter((part) => part.length > 0)\n .join('/');\n}\n\nexport default joinURL;\n","import {\n HttpSchemaPath,\n HttpSchemaMethod,\n HttpSearchParams,\n LiteralHttpSchemaPathFromNonLiteral,\n HttpSchema,\n HttpHeaders,\n} from '@zimic/http';\nimport createParametrizedPathPattern from '@zimic/utils/url/createParametrizedPathPattern';\nimport excludeURLParams from '@zimic/utils/url/excludeURLParams';\nimport joinURL from '@zimic/utils/url/joinURL';\n\nimport FetchResponseError from './errors/FetchResponseError';\nimport { FetchInput, FetchOptions, Fetch, FetchDefaults } from './types/public';\nimport { FetchRequestConstructor, FetchRequestInit, FetchRequest, FetchResponse } from './types/requests';\n\nclass FetchClient<Schema extends HttpSchema> implements Omit<Fetch<Schema>, 'defaults' | 'loose' | 'Request'> {\n fetch: Fetch<Schema>;\n\n constructor({ onRequest, onResponse, ...defaults }: FetchOptions<Schema>) {\n this.fetch = this.createFetchFunction();\n\n this.fetch.defaults = {\n ...defaults,\n headers: defaults.headers ?? {},\n searchParams: defaults.searchParams ?? {},\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.fetch.loose = this.fetch as Fetch<any> as Fetch.Loose;\n\n this.fetch.Request = this.createRequestClass(this.fetch.defaults);\n this.fetch.onRequest = onRequest;\n this.fetch.onResponse = onResponse;\n }\n\n private createFetchFunction() {\n const fetch = async <\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) => {\n const request = await this.createFetchRequest<Method, Path>(input, init);\n const requestClone = request.clone();\n\n const rawResponse = await globalThis.fetch(\n // Optimize type checking by narrowing the type of request\n requestClone as Request,\n );\n const response = await this.createFetchResponse<\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >(request, rawResponse);\n\n return response;\n };\n\n Object.setPrototypeOf(fetch, this);\n\n return fetch as Fetch<Schema>;\n }\n\n private async createFetchRequest<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n let request = input instanceof Request ? input : new this.fetch.Request(input, init);\n\n if (this.fetch.onRequest) {\n const requestAfterInterceptor = await this.fetch.onRequest(\n // Optimize type checking by narrowing the type of request\n request as FetchRequest.Loose,\n );\n\n if (requestAfterInterceptor !== request) {\n const isFetchRequest = requestAfterInterceptor instanceof this.fetch.Request;\n\n request = isFetchRequest\n ? (requestAfterInterceptor as Request as typeof request)\n : new this.fetch.Request(requestAfterInterceptor as FetchInput<Schema, Method, Path>, init);\n }\n }\n\n return request;\n }\n\n private async createFetchResponse<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, rawResponse: Response) {\n let response = this.defineFetchResponseProperties<Method, Path>(fetchRequest, rawResponse);\n\n if (this.fetch.onResponse) {\n const responseAfterInterceptor = await this.fetch.onResponse(\n // Optimize type checking by narrowing the type of response\n response as FetchResponse.Loose,\n );\n\n const isFetchResponse =\n responseAfterInterceptor instanceof Response &&\n 'request' in responseAfterInterceptor &&\n responseAfterInterceptor.request instanceof this.fetch.Request;\n\n response = isFetchResponse\n ? (responseAfterInterceptor as typeof response)\n : this.defineFetchResponseProperties<Method, Path>(fetchRequest, responseAfterInterceptor);\n }\n\n return response;\n }\n\n private defineFetchResponseProperties<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, response: Response) {\n const fetchResponse = response as FetchResponse<Schema, Method, Path>;\n\n Object.defineProperty(fetchResponse, 'request', {\n value: fetchRequest,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n let responseError: FetchResponse.Loose['error'] | undefined;\n\n Object.defineProperty(fetchResponse, 'error', {\n get() {\n if (responseError === undefined) {\n responseError = fetchResponse.ok\n ? null\n : new FetchResponseError(\n fetchRequest,\n fetchResponse as FetchResponse<Schema, Method, Path, true, 'manual'>,\n );\n }\n return responseError;\n },\n enumerable: true,\n configurable: false,\n });\n\n return fetchResponse;\n }\n\n private createRequestClass(defaults: FetchDefaults) {\n class Request<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n > extends globalThis.Request {\n path: LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n\n constructor(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n const initWithDefaults = { ...defaults, ...init };\n\n const headersFromDefaults = new HttpHeaders(defaults.headers);\n const headersFromInit = new HttpHeaders((init satisfies RequestInit as RequestInit).headers);\n\n let url: URL;\n const baseURL = new URL(initWithDefaults.baseURL);\n\n if (input instanceof globalThis.Request) {\n // Optimize type checking by narrowing the type of input\n const request = input as globalThis.Request;\n\n // Optimize type checking by narrowing the type of headers\n const headersFromRequest = new HttpHeaders(input.headers as Headers);\n\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromRequest.toObject(),\n ...headersFromInit.toObject(),\n };\n\n super(request, initWithDefaults);\n\n url = new URL(input.url);\n } else {\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromInit.toObject(),\n };\n\n url = input instanceof URL ? new URL(input) : new URL(joinURL(baseURL, input));\n\n const searchParamsFromDefaults = new HttpSearchParams(defaults.searchParams);\n const searchParamsFromInit = new HttpSearchParams(initWithDefaults.searchParams);\n\n initWithDefaults.searchParams = {\n ...searchParamsFromDefaults.toObject(),\n ...searchParamsFromInit.toObject(),\n };\n\n url.search = new HttpSearchParams(initWithDefaults.searchParams).toString();\n\n super(url, initWithDefaults);\n }\n\n const baseURLWithoutTrailingSlash = baseURL.toString().replace(/\\/$/, '');\n\n this.path = excludeURLParams(url)\n .toString()\n .replace(baseURLWithoutTrailingSlash, '') as LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n }\n\n clone(): Request<Method, Path> {\n const rawClone = super.clone();\n\n return new Request<Method, Path>(\n rawClone as unknown as FetchInput<Schema, Method, Path>,\n rawClone as unknown as FetchRequestInit<\n Schema,\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >,\n );\n }\n }\n\n return Request as FetchRequestConstructor<Schema>;\n }\n\n isRequest<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n request: unknown,\n method: Method,\n path: Path,\n ): request is FetchRequest<Schema, Method, Path> {\n return (\n request instanceof Request &&\n request.method === method &&\n 'path' in request &&\n typeof request.path === 'string' &&\n createParametrizedPathPattern(path).test(request.path)\n );\n }\n\n isResponse<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n response: unknown,\n method: Method,\n path: Path,\n ): response is FetchResponse<Schema, Method, Path> {\n return (\n response instanceof Response &&\n 'request' in response &&\n this.isRequest(response.request, method, path) &&\n 'error' in response &&\n (response.error === null || response.error instanceof FetchResponseError)\n );\n }\n\n isResponseError<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n error: unknown,\n method: Method,\n path: Path,\n ): error is FetchResponseError<Schema, Method, Path> {\n return (\n error instanceof FetchResponseError &&\n this.isRequest(error.request, method, path) &&\n this.isResponse(error.response, method, path)\n );\n }\n}\n\nexport default FetchClient;\n","import { HttpSchema } from '@zimic/http';\n\nimport FetchClient from './FetchClient';\nimport { FetchOptions, Fetch } from './types/public';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/create-fetch `createFetch` API reference} */\nfunction createFetch<Schema extends HttpSchema>(options: FetchOptions<Schema>): Fetch<Schema> {\n const { fetch } = new FetchClient<Schema>(options);\n return fetch;\n}\n\nexport default createFetch;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/errors/FetchResponseError.ts","../../zimic-utils/src/url/createParametrizedPathPattern.ts","../../zimic-utils/src/url/excludeURLParams.ts","../../zimic-utils/src/url/joinURL.ts","../src/client/FetchClient.ts","../src/client/factory.ts"],"names":["HttpHeaders","Request","HttpSearchParams"],"mappings":"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","file":"index.js","sourcesContent":["import { HttpHeaders, HttpHeadersSchema, HttpSchema, HttpSchemaMethod, HttpSchemaPath } from '@zimic/http';\nimport { PossiblePromise } from '@zimic/utils/types';\n\nimport { FetchRequest, FetchRequestObject, FetchResponse, FetchResponseObject } from '../types/requests';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\nexport interface FetchResponseErrorObjectOptions {\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeRequestBody?: boolean;\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeResponseBody?: boolean;\n}\n\nexport namespace FetchResponseErrorObjectOptions {\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, including the body of\n * the request and/or response.\n */\n export type WithBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody: true } | { includeResponseBody: true });\n\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, excluding the body of\n * the request and/or response.\n */\n export type WithoutBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody?: false } | { includeResponseBody?: false });\n}\n\n/**\n * A plain object representation of a {@link FetchResponseError `FetchResponseError`}, compatible with JSON. It is useful\n * for serialization, debugging, and logging purposes.\n *\n * @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference}\n */\nexport interface FetchResponseErrorObject {\n name: string;\n message: string;\n request: FetchRequestObject;\n response: FetchResponseObject;\n}\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error `FetchResponseError` API reference} */\nclass FetchResponseError<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n> extends Error {\n constructor(\n public request: FetchRequest<Schema, Method, Path>,\n public response: FetchResponse<Schema, Method, Path, true, 'manual'>,\n ) {\n super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);\n this.name = 'FetchResponseError';\n }\n\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n toObject(options: FetchResponseErrorObjectOptions.WithBody): Promise<FetchResponseErrorObject>;\n toObject(options?: FetchResponseErrorObjectOptions.WithoutBody): FetchResponseErrorObject;\n toObject(options?: FetchResponseErrorObjectOptions): PossiblePromise<FetchResponseErrorObject>;\n toObject({\n includeRequestBody = false,\n includeResponseBody = false,\n }: FetchResponseErrorObjectOptions = {}): PossiblePromise<FetchResponseErrorObject> {\n const partialObject = {\n name: this.name,\n message: this.message,\n } satisfies Partial<FetchResponseErrorObject>;\n\n if (!includeRequestBody && !includeResponseBody) {\n return {\n ...partialObject,\n request: this.requestToObject({ includeBody: false }),\n response: this.responseToObject({ includeBody: false }),\n };\n }\n\n return Promise.all([\n Promise.resolve(this.requestToObject({ includeBody: includeRequestBody })),\n Promise.resolve(this.responseToObject({ includeBody: includeResponseBody })),\n ]).then(([request, response]) => ({ ...partialObject, request, response }));\n }\n\n private requestToObject(options: { includeBody: true }): Promise<FetchRequestObject>;\n private requestToObject(options: { includeBody: false }): FetchRequestObject;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject>;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject> {\n const request = this.request;\n\n const requestObject: FetchRequestObject = {\n url: request.url,\n path: request.path,\n method: request.method,\n headers: this.convertHeadersToObject(request),\n cache: request.cache,\n destination: request.destination,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n };\n\n if (!options.includeBody) {\n return requestObject;\n }\n\n return this.withIncludedBodyIfAvailable('request', requestObject);\n }\n\n private responseToObject(options: { includeBody: true }): Promise<FetchResponseObject>;\n private responseToObject(options: { includeBody: false }): FetchResponseObject;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject>;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject> {\n const response = this.response;\n\n const responseObject: FetchResponseObject = {\n url: response.url,\n type: response.type,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n headers: this.convertHeadersToObject(response),\n redirected: response.redirected,\n };\n\n if (!options.includeBody) {\n return responseObject;\n }\n\n return this.withIncludedBodyIfAvailable('response', responseObject);\n }\n\n private convertHeadersToObject(\n resource: FetchRequest<Schema, Method, Path> | FetchResponse<Schema, Method, Path, true, 'manual'>,\n ): HttpHeadersSchema {\n return HttpHeaders.prototype.toObject.call(resource.headers) as HttpHeadersSchema;\n }\n\n private withIncludedBodyIfAvailable(\n resourceType: 'request',\n resourceObject: FetchRequestObject,\n ): PossiblePromise<FetchRequestObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'response',\n resourceObject: FetchResponseObject,\n ): PossiblePromise<FetchResponseObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'request' | 'response',\n resourceObject: FetchRequestObject | FetchResponseObject,\n ): PossiblePromise<FetchRequestObject | FetchResponseObject> {\n const resource = this[resourceType];\n\n if (resource.bodyUsed) {\n console.warn(\n `[@zimic/fetch] Could not include the ${resourceType} body because it is already used. ` +\n 'If you access the body before calling `error.toObject()`, consider reading it from a cloned ' +\n `${resourceType}.\\n\\nLearn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`,\n );\n return resourceObject;\n }\n\n return resource.text().then((body: string) => {\n resourceObject.body = body.length > 0 ? body : null;\n return resourceObject;\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFetchRequestError = FetchResponseError<any, any, any>;\n\nexport default FetchResponseError;\n","export function getExtraPatternsToEscape() {\n return /([.(){}+$])/g;\n}\n\nexport function getURIEncodedBackSlashPattern() {\n return /%5C/g;\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function getPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)/gu;\n}\n\nexport function getRepeatingPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\+/gu;\n}\n\nexport function getOptionalPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function getOptionalRepeatingPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createParametrizedPathPattern(path: string) {\n const replacedURL = encodeURI(path)\n .replace(/^\\/+/g, '')\n .replace(/\\/+$/g, '')\n .replace(getExtraPatternsToEscape(), '\\\\$1')\n .replace(getURIEncodedBackSlashPattern(), '\\\\')\n .replace(\n getOptionalRepeatingPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>.+?)?`;\n }\n },\n )\n .replace(getRepeatingPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>.+)`;\n })\n .replace(\n getOptionalPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>[^\\\\/]+?)?`;\n }\n },\n )\n .replace(getPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n });\n\n return new RegExp(`^/?${replacedURL}/?$`);\n}\n\nexport default createParametrizedPathPattern;\n","function excludeURLParams(url: URL) {\n url.hash = '';\n url.search = '';\n url.username = '';\n url.password = '';\n return url;\n}\n\nexport default excludeURLParams;\n","function joinURL(...parts: (URL | string)[]) {\n return parts\n .map((part, index) => {\n const isFirstPart = index === 0;\n const isLastPart = index === parts.length - 1;\n\n let partAsString = part.toString();\n\n if (!isFirstPart) {\n partAsString = partAsString.replace(/^\\//, '');\n }\n if (!isLastPart) {\n partAsString = partAsString.replace(/\\/$/, '');\n }\n\n return partAsString;\n })\n .filter((part) => part.length > 0)\n .join('/');\n}\n\nexport default joinURL;\n","import {\n HttpSchemaPath,\n HttpSchemaMethod,\n HttpSearchParams,\n LiteralHttpSchemaPathFromNonLiteral,\n HttpSchema,\n HttpHeaders,\n} from '@zimic/http';\nimport createParametrizedPathPattern from '@zimic/utils/url/createParametrizedPathPattern';\nimport excludeURLParams from '@zimic/utils/url/excludeURLParams';\nimport joinURL from '@zimic/utils/url/joinURL';\n\nimport FetchResponseError from './errors/FetchResponseError';\nimport { FetchInput, FetchOptions, Fetch, FetchDefaults } from './types/public';\nimport { FetchRequestConstructor, FetchRequestInit, FetchRequest, FetchResponse } from './types/requests';\n\nclass FetchClient<Schema extends HttpSchema> implements Omit<Fetch<Schema>, 'defaults' | 'loose' | 'Request'> {\n fetch: Fetch<Schema>;\n\n constructor({ onRequest, onResponse, ...defaults }: FetchOptions<Schema>) {\n this.fetch = this.createFetchFunction();\n\n this.fetch.defaults = {\n ...defaults,\n headers: defaults.headers ?? {},\n searchParams: defaults.searchParams ?? {},\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.fetch.loose = this.fetch as Fetch<any> as Fetch.Loose;\n\n this.fetch.Request = this.createRequestClass(this.fetch.defaults);\n this.fetch.onRequest = onRequest;\n this.fetch.onResponse = onResponse;\n }\n\n private createFetchFunction() {\n const fetch = async <\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) => {\n const request = await this.createFetchRequest<Method, Path>(input, init);\n const requestClone = request.clone();\n\n const rawResponse = await globalThis.fetch(\n // Optimize type checking by narrowing the type of request\n requestClone as Request,\n );\n const response = await this.createFetchResponse<\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >(request, rawResponse);\n\n return response;\n };\n\n Object.setPrototypeOf(fetch, this);\n\n return fetch as Fetch<Schema>;\n }\n\n private async createFetchRequest<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n let request = input instanceof Request ? input : new this.fetch.Request(input, init);\n\n if (this.fetch.onRequest) {\n const requestAfterInterceptor = await this.fetch.onRequest(\n // Optimize type checking by narrowing the type of request\n request as FetchRequest.Loose,\n );\n\n if (requestAfterInterceptor !== request) {\n const isFetchRequest = requestAfterInterceptor instanceof this.fetch.Request;\n\n request = isFetchRequest\n ? (requestAfterInterceptor as Request as typeof request)\n : new this.fetch.Request(requestAfterInterceptor as FetchInput<Schema, Method, Path>, init);\n }\n }\n\n return request;\n }\n\n private async createFetchResponse<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, rawResponse: Response) {\n let response = this.defineFetchResponseProperties<Method, Path>(fetchRequest, rawResponse);\n\n if (this.fetch.onResponse) {\n const responseAfterInterceptor = await this.fetch.onResponse(\n // Optimize type checking by narrowing the type of response\n response as FetchResponse.Loose,\n );\n\n const isFetchResponse =\n responseAfterInterceptor instanceof Response &&\n 'request' in responseAfterInterceptor &&\n responseAfterInterceptor.request instanceof this.fetch.Request;\n\n response = isFetchResponse\n ? (responseAfterInterceptor as typeof response)\n : this.defineFetchResponseProperties<Method, Path>(fetchRequest, responseAfterInterceptor);\n }\n\n return response;\n }\n\n private defineFetchResponseProperties<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, response: Response) {\n const fetchResponse = response as FetchResponse<Schema, Method, Path>;\n\n Object.defineProperty(fetchResponse, 'request', {\n value: fetchRequest,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n let responseError: FetchResponse.Loose['error'] | undefined;\n\n Object.defineProperty(fetchResponse, 'error', {\n get() {\n if (responseError === undefined) {\n responseError = fetchResponse.ok\n ? null\n : new FetchResponseError(\n fetchRequest,\n fetchResponse as FetchResponse<Schema, Method, Path, true, 'manual'>,\n );\n }\n return responseError;\n },\n enumerable: true,\n configurable: false,\n });\n\n return fetchResponse;\n }\n\n private createRequestClass(defaults: FetchDefaults) {\n class Request<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n > extends globalThis.Request {\n path: LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n\n constructor(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n const initWithDefaults = { ...defaults, ...init };\n\n const headersFromDefaults = new HttpHeaders(defaults.headers);\n const headersFromInit = new HttpHeaders((init satisfies RequestInit as RequestInit).headers);\n\n let url: URL;\n const baseURL = new URL(initWithDefaults.baseURL);\n\n if (input instanceof globalThis.Request) {\n // Optimize type checking by narrowing the type of input\n const request = input as globalThis.Request;\n\n // Optimize type checking by narrowing the type of headers\n const headersFromRequest = new HttpHeaders(input.headers as Headers);\n\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromRequest.toObject(),\n ...headersFromInit.toObject(),\n };\n\n super(request, initWithDefaults);\n\n url = new URL(input.url);\n } else {\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromInit.toObject(),\n };\n\n url = input instanceof URL ? new URL(input) : new URL(joinURL(baseURL, input));\n\n const searchParamsFromDefaults = new HttpSearchParams(defaults.searchParams);\n const searchParamsFromInit = new HttpSearchParams(initWithDefaults.searchParams);\n\n initWithDefaults.searchParams = {\n ...searchParamsFromDefaults.toObject(),\n ...searchParamsFromInit.toObject(),\n };\n\n url.search = new HttpSearchParams(initWithDefaults.searchParams).toString();\n\n super(url, initWithDefaults);\n }\n\n const baseURLWithoutTrailingSlash = baseURL.toString().replace(/\\/$/, '');\n\n this.path = excludeURLParams(url)\n .toString()\n .replace(baseURLWithoutTrailingSlash, '') as LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n }\n\n clone(): Request<Method, Path> {\n const rawClone = super.clone();\n\n return new Request<Method, Path>(\n rawClone as unknown as FetchInput<Schema, Method, Path>,\n rawClone as unknown as FetchRequestInit<\n Schema,\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >,\n );\n }\n }\n\n return Request as FetchRequestConstructor<Schema>;\n }\n\n isRequest<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n request: unknown,\n method: Method,\n path: Path,\n ): request is FetchRequest<Schema, Method, Path> {\n return (\n request instanceof Request &&\n request.method === method &&\n 'path' in request &&\n typeof request.path === 'string' &&\n createParametrizedPathPattern(path).test(request.path)\n );\n }\n\n isResponse<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n response: unknown,\n method: Method,\n path: Path,\n ): response is FetchResponse<Schema, Method, Path> {\n return (\n response instanceof Response &&\n 'request' in response &&\n this.isRequest(response.request, method, path) &&\n 'error' in response &&\n (response.error === null || response.error instanceof FetchResponseError)\n );\n }\n\n isResponseError<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n error: unknown,\n method: Method,\n path: Path,\n ): error is FetchResponseError<Schema, Method, Path> {\n return (\n error instanceof FetchResponseError &&\n this.isRequest(error.request, method, path) &&\n this.isResponse(error.response, method, path)\n );\n }\n}\n\nexport default FetchClient;\n","import { HttpSchema } from '@zimic/http';\n\nimport FetchClient from './FetchClient';\nimport { FetchOptions, Fetch } from './types/public';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/create-fetch `createFetch` API reference} */\nfunction createFetch<Schema extends HttpSchema>(options: FetchOptions<Schema>): Fetch<Schema> {\n const { fetch } = new FetchClient<Schema>(options);\n return fetch;\n}\n\nexport default createFetch;\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { HttpHeaders, HttpSearchParams } from '@zimic/http';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
// src/client/errors/FetchResponseError.ts
|
|
5
4
|
var FetchResponseError = class extends Error {
|
|
6
5
|
constructor(request, response) {
|
|
7
6
|
super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);
|
|
@@ -9,9 +8,6 @@ var FetchResponseError = class extends Error {
|
|
|
9
8
|
this.response = response;
|
|
10
9
|
this.name = "FetchResponseError";
|
|
11
10
|
}
|
|
12
|
-
static {
|
|
13
|
-
__name(this, "FetchResponseError");
|
|
14
|
-
}
|
|
15
11
|
toObject({
|
|
16
12
|
includeRequestBody = false,
|
|
17
13
|
includeResponseBody = false
|
|
@@ -91,41 +87,25 @@ Learn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`
|
|
|
91
87
|
};
|
|
92
88
|
var FetchResponseError_default = FetchResponseError;
|
|
93
89
|
|
|
94
|
-
// ../zimic-utils/dist/chunk-
|
|
95
|
-
var __defProp2 = Object.defineProperty;
|
|
96
|
-
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
|
97
|
-
|
|
98
|
-
// ../zimic-utils/dist/chunk-FPJJAH7P.mjs
|
|
90
|
+
// ../zimic-utils/dist/chunk-46M3OXFU.mjs
|
|
99
91
|
function getExtraPatternsToEscape() {
|
|
100
92
|
return /([.(){}+$])/g;
|
|
101
93
|
}
|
|
102
|
-
__name(getExtraPatternsToEscape, "getExtraPatternsToEscape");
|
|
103
|
-
__name2(getExtraPatternsToEscape, "getExtraPatternsToEscape");
|
|
104
94
|
function getURIEncodedBackSlashPattern() {
|
|
105
95
|
return /%5C/g;
|
|
106
96
|
}
|
|
107
|
-
__name(getURIEncodedBackSlashPattern, "getURIEncodedBackSlashPattern");
|
|
108
|
-
__name2(getURIEncodedBackSlashPattern, "getURIEncodedBackSlashPattern");
|
|
109
97
|
function getPathParamPattern() {
|
|
110
98
|
return /(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)/gu;
|
|
111
99
|
}
|
|
112
|
-
__name(getPathParamPattern, "getPathParamPattern");
|
|
113
|
-
__name2(getPathParamPattern, "getPathParamPattern");
|
|
114
100
|
function getRepeatingPathParamPattern() {
|
|
115
101
|
return /(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\\+/gu;
|
|
116
102
|
}
|
|
117
|
-
__name(getRepeatingPathParamPattern, "getRepeatingPathParamPattern");
|
|
118
|
-
__name2(getRepeatingPathParamPattern, "getRepeatingPathParamPattern");
|
|
119
103
|
function getOptionalPathParamPattern() {
|
|
120
104
|
return /(?<leadingSlash>\/)?(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\?(?<trailingSlash>\/)?/gu;
|
|
121
105
|
}
|
|
122
|
-
__name(getOptionalPathParamPattern, "getOptionalPathParamPattern");
|
|
123
|
-
__name2(getOptionalPathParamPattern, "getOptionalPathParamPattern");
|
|
124
106
|
function getOptionalRepeatingPathParamPattern() {
|
|
125
107
|
return /(?<leadingSlash>\/)?(?<escape>\\)?:(?<identifier>[$_\p{ID_Start}][$\p{ID_Continue}]+)\*(?<trailingSlash>\/)?/gu;
|
|
126
108
|
}
|
|
127
|
-
__name(getOptionalRepeatingPathParamPattern, "getOptionalRepeatingPathParamPattern");
|
|
128
|
-
__name2(getOptionalRepeatingPathParamPattern, "getOptionalRepeatingPathParamPattern");
|
|
129
109
|
function createParametrizedPathPattern(path) {
|
|
130
110
|
const replacedURL = encodeURI(path).replace(/^\/+/g, "").replace(/\/+$/g, "").replace(getExtraPatternsToEscape(), "\\$1").replace(getURIEncodedBackSlashPattern(), "\\").replace(
|
|
131
111
|
getOptionalRepeatingPathParamPattern(),
|
|
@@ -174,8 +154,6 @@ function createParametrizedPathPattern(path) {
|
|
|
174
154
|
});
|
|
175
155
|
return new RegExp(`^/?${replacedURL}/?$`);
|
|
176
156
|
}
|
|
177
|
-
__name(createParametrizedPathPattern, "createParametrizedPathPattern");
|
|
178
|
-
__name2(createParametrizedPathPattern, "createParametrizedPathPattern");
|
|
179
157
|
var createParametrizedPathPattern_default = createParametrizedPathPattern;
|
|
180
158
|
|
|
181
159
|
// ../zimic-utils/dist/url/excludeURLParams.mjs
|
|
@@ -186,8 +164,6 @@ function excludeURLParams(url) {
|
|
|
186
164
|
url.password = "";
|
|
187
165
|
return url;
|
|
188
166
|
}
|
|
189
|
-
__name(excludeURLParams, "excludeURLParams");
|
|
190
|
-
__name2(excludeURLParams, "excludeURLParams");
|
|
191
167
|
var excludeURLParams_default = excludeURLParams;
|
|
192
168
|
|
|
193
169
|
// ../zimic-utils/dist/url/joinURL.mjs
|
|
@@ -205,15 +181,10 @@ function joinURL(...parts) {
|
|
|
205
181
|
return partAsString;
|
|
206
182
|
}).filter((part) => part.length > 0).join("/");
|
|
207
183
|
}
|
|
208
|
-
__name(joinURL, "joinURL");
|
|
209
|
-
__name2(joinURL, "joinURL");
|
|
210
184
|
var joinURL_default = joinURL;
|
|
211
185
|
|
|
212
186
|
// src/client/FetchClient.ts
|
|
213
187
|
var FetchClient = class {
|
|
214
|
-
static {
|
|
215
|
-
__name(this, "FetchClient");
|
|
216
|
-
}
|
|
217
188
|
fetch;
|
|
218
189
|
constructor({ onRequest, onResponse, ...defaults }) {
|
|
219
190
|
this.fetch = this.createFetchFunction();
|
|
@@ -228,7 +199,7 @@ var FetchClient = class {
|
|
|
228
199
|
this.fetch.onResponse = onResponse;
|
|
229
200
|
}
|
|
230
201
|
createFetchFunction() {
|
|
231
|
-
const fetch =
|
|
202
|
+
const fetch = async (input, init) => {
|
|
232
203
|
const request = await this.createFetchRequest(input, init);
|
|
233
204
|
const requestClone = request.clone();
|
|
234
205
|
const rawResponse = await globalThis.fetch(
|
|
@@ -237,7 +208,7 @@ var FetchClient = class {
|
|
|
237
208
|
);
|
|
238
209
|
const response = await this.createFetchResponse(request, rawResponse);
|
|
239
210
|
return response;
|
|
240
|
-
}
|
|
211
|
+
};
|
|
241
212
|
Object.setPrototypeOf(fetch, this);
|
|
242
213
|
return fetch;
|
|
243
214
|
}
|
|
@@ -293,9 +264,6 @@ var FetchClient = class {
|
|
|
293
264
|
}
|
|
294
265
|
createRequestClass(defaults) {
|
|
295
266
|
class Request2 extends globalThis.Request {
|
|
296
|
-
static {
|
|
297
|
-
__name(this, "Request");
|
|
298
|
-
}
|
|
299
267
|
path;
|
|
300
268
|
constructor(input, init) {
|
|
301
269
|
const initWithDefaults = { ...defaults, ...init };
|
|
@@ -358,7 +326,6 @@ function createFetch(options) {
|
|
|
358
326
|
const { fetch } = new FetchClient_default(options);
|
|
359
327
|
return fetch;
|
|
360
328
|
}
|
|
361
|
-
__name(createFetch, "createFetch");
|
|
362
329
|
var factory_default = createFetch;
|
|
363
330
|
|
|
364
331
|
export { FetchResponseError_default as FetchResponseError, factory_default as createFetch };
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/errors/FetchResponseError.ts","../../zimic-utils/dist/chunk-2D3UJWOA.mjs","../../zimic-utils/src/url/createParametrizedPathPattern.ts","../../zimic-utils/src/url/excludeURLParams.ts","../../zimic-utils/src/url/joinURL.ts","../src/client/FetchClient.ts","../src/client/factory.ts"],"names":["__defProp","__name","Request","HttpHeaders"],"mappings":"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","file":"index.mjs","sourcesContent":["import { HttpHeaders, HttpHeadersSchema, HttpSchema, HttpSchemaMethod, HttpSchemaPath } from '@zimic/http';\nimport { PossiblePromise } from '@zimic/utils/types';\n\nimport { FetchRequest, FetchRequestObject, FetchResponse, FetchResponseObject } from '../types/requests';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\nexport interface FetchResponseErrorObjectOptions {\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeRequestBody?: boolean;\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeResponseBody?: boolean;\n}\n\nexport namespace FetchResponseErrorObjectOptions {\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, including the body of\n * the request and/or response.\n */\n export type WithBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody: true } | { includeResponseBody: true });\n\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, excluding the body of\n * the request and/or response.\n */\n export type WithoutBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody?: false } | { includeResponseBody?: false });\n}\n\n/**\n * A plain object representation of a {@link FetchResponseError `FetchResponseError`}, compatible with JSON. It is useful\n * for serialization, debugging, and logging purposes.\n *\n * @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference}\n */\nexport interface FetchResponseErrorObject {\n name: string;\n message: string;\n request: FetchRequestObject;\n response: FetchResponseObject;\n}\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error `FetchResponseError` API reference} */\nclass FetchResponseError<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n> extends Error {\n constructor(\n public request: FetchRequest<Schema, Method, Path>,\n public response: FetchResponse<Schema, Method, Path, true, 'manual'>,\n ) {\n super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);\n this.name = 'FetchResponseError';\n }\n\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n toObject(options: FetchResponseErrorObjectOptions.WithBody): Promise<FetchResponseErrorObject>;\n toObject(options?: FetchResponseErrorObjectOptions.WithoutBody): FetchResponseErrorObject;\n toObject(options?: FetchResponseErrorObjectOptions): PossiblePromise<FetchResponseErrorObject>;\n toObject({\n includeRequestBody = false,\n includeResponseBody = false,\n }: FetchResponseErrorObjectOptions = {}): PossiblePromise<FetchResponseErrorObject> {\n const partialObject = {\n name: this.name,\n message: this.message,\n } satisfies Partial<FetchResponseErrorObject>;\n\n if (!includeRequestBody && !includeResponseBody) {\n return {\n ...partialObject,\n request: this.requestToObject({ includeBody: false }),\n response: this.responseToObject({ includeBody: false }),\n };\n }\n\n return Promise.all([\n Promise.resolve(this.requestToObject({ includeBody: includeRequestBody })),\n Promise.resolve(this.responseToObject({ includeBody: includeResponseBody })),\n ]).then(([request, response]) => ({ ...partialObject, request, response }));\n }\n\n private requestToObject(options: { includeBody: true }): Promise<FetchRequestObject>;\n private requestToObject(options: { includeBody: false }): FetchRequestObject;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject>;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject> {\n const request = this.request;\n\n const requestObject: FetchRequestObject = {\n url: request.url,\n path: request.path,\n method: request.method,\n headers: this.convertHeadersToObject(request),\n cache: request.cache,\n destination: request.destination,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n };\n\n if (!options.includeBody) {\n return requestObject;\n }\n\n return this.withIncludedBodyIfAvailable('request', requestObject);\n }\n\n private responseToObject(options: { includeBody: true }): Promise<FetchResponseObject>;\n private responseToObject(options: { includeBody: false }): FetchResponseObject;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject>;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject> {\n const response = this.response;\n\n const responseObject: FetchResponseObject = {\n url: response.url,\n type: response.type,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n headers: this.convertHeadersToObject(response),\n redirected: response.redirected,\n };\n\n if (!options.includeBody) {\n return responseObject;\n }\n\n return this.withIncludedBodyIfAvailable('response', responseObject);\n }\n\n private convertHeadersToObject(\n resource: FetchRequest<Schema, Method, Path> | FetchResponse<Schema, Method, Path, true, 'manual'>,\n ): HttpHeadersSchema {\n return HttpHeaders.prototype.toObject.call(resource.headers) as HttpHeadersSchema;\n }\n\n private withIncludedBodyIfAvailable(\n resourceType: 'request',\n resourceObject: FetchRequestObject,\n ): PossiblePromise<FetchRequestObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'response',\n resourceObject: FetchResponseObject,\n ): PossiblePromise<FetchResponseObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'request' | 'response',\n resourceObject: FetchRequestObject | FetchResponseObject,\n ): PossiblePromise<FetchRequestObject | FetchResponseObject> {\n const resource = this[resourceType];\n\n if (resource.bodyUsed) {\n console.warn(\n `[@zimic/fetch] Could not include the ${resourceType} body because it is already used. ` +\n 'If you access the body before calling `error.toObject()`, consider reading it from a cloned ' +\n `${resourceType}.\\n\\nLearn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`,\n );\n return resourceObject;\n }\n\n return resource.text().then((body: string) => {\n resourceObject.body = body.length > 0 ? body : null;\n return resourceObject;\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFetchRequestError = FetchResponseError<any, any, any>;\n\nexport default FetchResponseError;\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\nexport { __commonJS, __name, __toESM };\n//# sourceMappingURL=chunk-2D3UJWOA.mjs.map\n//# sourceMappingURL=chunk-2D3UJWOA.mjs.map","export function getExtraPatternsToEscape() {\n return /([.(){}+$])/g;\n}\n\nexport function getURIEncodedBackSlashPattern() {\n return /%5C/g;\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function getPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)/gu;\n}\n\nexport function getRepeatingPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\+/gu;\n}\n\nexport function getOptionalPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function getOptionalRepeatingPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createParametrizedPathPattern(path: string) {\n const replacedURL = encodeURI(path)\n .replace(/^\\/+/g, '')\n .replace(/\\/+$/g, '')\n .replace(getExtraPatternsToEscape(), '\\\\$1')\n .replace(getURIEncodedBackSlashPattern(), '\\\\')\n .replace(\n getOptionalRepeatingPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>.+?)?`;\n }\n },\n )\n .replace(getRepeatingPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>.+)`;\n })\n .replace(\n getOptionalPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>[^\\\\/]+?)?`;\n }\n },\n )\n .replace(getPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n });\n\n return new RegExp(`^/?${replacedURL}/?$`);\n}\n\nexport default createParametrizedPathPattern;\n","function excludeURLParams(url: URL) {\n url.hash = '';\n url.search = '';\n url.username = '';\n url.password = '';\n return url;\n}\n\nexport default excludeURLParams;\n","function joinURL(...parts: (URL | string)[]) {\n return parts\n .map((part, index) => {\n const isFirstPart = index === 0;\n const isLastPart = index === parts.length - 1;\n\n let partAsString = part.toString();\n\n if (!isFirstPart) {\n partAsString = partAsString.replace(/^\\//, '');\n }\n if (!isLastPart) {\n partAsString = partAsString.replace(/\\/$/, '');\n }\n\n return partAsString;\n })\n .filter((part) => part.length > 0)\n .join('/');\n}\n\nexport default joinURL;\n","import {\n HttpSchemaPath,\n HttpSchemaMethod,\n HttpSearchParams,\n LiteralHttpSchemaPathFromNonLiteral,\n HttpSchema,\n HttpHeaders,\n} from '@zimic/http';\nimport createParametrizedPathPattern from '@zimic/utils/url/createParametrizedPathPattern';\nimport excludeURLParams from '@zimic/utils/url/excludeURLParams';\nimport joinURL from '@zimic/utils/url/joinURL';\n\nimport FetchResponseError from './errors/FetchResponseError';\nimport { FetchInput, FetchOptions, Fetch, FetchDefaults } from './types/public';\nimport { FetchRequestConstructor, FetchRequestInit, FetchRequest, FetchResponse } from './types/requests';\n\nclass FetchClient<Schema extends HttpSchema> implements Omit<Fetch<Schema>, 'defaults' | 'loose' | 'Request'> {\n fetch: Fetch<Schema>;\n\n constructor({ onRequest, onResponse, ...defaults }: FetchOptions<Schema>) {\n this.fetch = this.createFetchFunction();\n\n this.fetch.defaults = {\n ...defaults,\n headers: defaults.headers ?? {},\n searchParams: defaults.searchParams ?? {},\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.fetch.loose = this.fetch as Fetch<any> as Fetch.Loose;\n\n this.fetch.Request = this.createRequestClass(this.fetch.defaults);\n this.fetch.onRequest = onRequest;\n this.fetch.onResponse = onResponse;\n }\n\n private createFetchFunction() {\n const fetch = async <\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) => {\n const request = await this.createFetchRequest<Method, Path>(input, init);\n const requestClone = request.clone();\n\n const rawResponse = await globalThis.fetch(\n // Optimize type checking by narrowing the type of request\n requestClone as Request,\n );\n const response = await this.createFetchResponse<\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >(request, rawResponse);\n\n return response;\n };\n\n Object.setPrototypeOf(fetch, this);\n\n return fetch as Fetch<Schema>;\n }\n\n private async createFetchRequest<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n let request = input instanceof Request ? input : new this.fetch.Request(input, init);\n\n if (this.fetch.onRequest) {\n const requestAfterInterceptor = await this.fetch.onRequest(\n // Optimize type checking by narrowing the type of request\n request as FetchRequest.Loose,\n );\n\n if (requestAfterInterceptor !== request) {\n const isFetchRequest = requestAfterInterceptor instanceof this.fetch.Request;\n\n request = isFetchRequest\n ? (requestAfterInterceptor as Request as typeof request)\n : new this.fetch.Request(requestAfterInterceptor as FetchInput<Schema, Method, Path>, init);\n }\n }\n\n return request;\n }\n\n private async createFetchResponse<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, rawResponse: Response) {\n let response = this.defineFetchResponseProperties<Method, Path>(fetchRequest, rawResponse);\n\n if (this.fetch.onResponse) {\n const responseAfterInterceptor = await this.fetch.onResponse(\n // Optimize type checking by narrowing the type of response\n response as FetchResponse.Loose,\n );\n\n const isFetchResponse =\n responseAfterInterceptor instanceof Response &&\n 'request' in responseAfterInterceptor &&\n responseAfterInterceptor.request instanceof this.fetch.Request;\n\n response = isFetchResponse\n ? (responseAfterInterceptor as typeof response)\n : this.defineFetchResponseProperties<Method, Path>(fetchRequest, responseAfterInterceptor);\n }\n\n return response;\n }\n\n private defineFetchResponseProperties<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, response: Response) {\n const fetchResponse = response as FetchResponse<Schema, Method, Path>;\n\n Object.defineProperty(fetchResponse, 'request', {\n value: fetchRequest,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n let responseError: FetchResponse.Loose['error'] | undefined;\n\n Object.defineProperty(fetchResponse, 'error', {\n get() {\n if (responseError === undefined) {\n responseError = fetchResponse.ok\n ? null\n : new FetchResponseError(\n fetchRequest,\n fetchResponse as FetchResponse<Schema, Method, Path, true, 'manual'>,\n );\n }\n return responseError;\n },\n enumerable: true,\n configurable: false,\n });\n\n return fetchResponse;\n }\n\n private createRequestClass(defaults: FetchDefaults) {\n class Request<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n > extends globalThis.Request {\n path: LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n\n constructor(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n const initWithDefaults = { ...defaults, ...init };\n\n const headersFromDefaults = new HttpHeaders(defaults.headers);\n const headersFromInit = new HttpHeaders((init satisfies RequestInit as RequestInit).headers);\n\n let url: URL;\n const baseURL = new URL(initWithDefaults.baseURL);\n\n if (input instanceof globalThis.Request) {\n // Optimize type checking by narrowing the type of input\n const request = input as globalThis.Request;\n\n // Optimize type checking by narrowing the type of headers\n const headersFromRequest = new HttpHeaders(input.headers as Headers);\n\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromRequest.toObject(),\n ...headersFromInit.toObject(),\n };\n\n super(request, initWithDefaults);\n\n url = new URL(input.url);\n } else {\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromInit.toObject(),\n };\n\n url = input instanceof URL ? new URL(input) : new URL(joinURL(baseURL, input));\n\n const searchParamsFromDefaults = new HttpSearchParams(defaults.searchParams);\n const searchParamsFromInit = new HttpSearchParams(initWithDefaults.searchParams);\n\n initWithDefaults.searchParams = {\n ...searchParamsFromDefaults.toObject(),\n ...searchParamsFromInit.toObject(),\n };\n\n url.search = new HttpSearchParams(initWithDefaults.searchParams).toString();\n\n super(url, initWithDefaults);\n }\n\n const baseURLWithoutTrailingSlash = baseURL.toString().replace(/\\/$/, '');\n\n this.path = excludeURLParams(url)\n .toString()\n .replace(baseURLWithoutTrailingSlash, '') as LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n }\n\n clone(): Request<Method, Path> {\n const rawClone = super.clone();\n\n return new Request<Method, Path>(\n rawClone as unknown as FetchInput<Schema, Method, Path>,\n rawClone as unknown as FetchRequestInit<\n Schema,\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >,\n );\n }\n }\n\n return Request as FetchRequestConstructor<Schema>;\n }\n\n isRequest<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n request: unknown,\n method: Method,\n path: Path,\n ): request is FetchRequest<Schema, Method, Path> {\n return (\n request instanceof Request &&\n request.method === method &&\n 'path' in request &&\n typeof request.path === 'string' &&\n createParametrizedPathPattern(path).test(request.path)\n );\n }\n\n isResponse<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n response: unknown,\n method: Method,\n path: Path,\n ): response is FetchResponse<Schema, Method, Path> {\n return (\n response instanceof Response &&\n 'request' in response &&\n this.isRequest(response.request, method, path) &&\n 'error' in response &&\n (response.error === null || response.error instanceof FetchResponseError)\n );\n }\n\n isResponseError<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n error: unknown,\n method: Method,\n path: Path,\n ): error is FetchResponseError<Schema, Method, Path> {\n return (\n error instanceof FetchResponseError &&\n this.isRequest(error.request, method, path) &&\n this.isResponse(error.response, method, path)\n );\n }\n}\n\nexport default FetchClient;\n","import { HttpSchema } from '@zimic/http';\n\nimport FetchClient from './FetchClient';\nimport { FetchOptions, Fetch } from './types/public';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/create-fetch `createFetch` API reference} */\nfunction createFetch<Schema extends HttpSchema>(options: FetchOptions<Schema>): Fetch<Schema> {\n const { fetch } = new FetchClient<Schema>(options);\n return fetch;\n}\n\nexport default createFetch;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/errors/FetchResponseError.ts","../../zimic-utils/src/url/createParametrizedPathPattern.ts","../../zimic-utils/src/url/excludeURLParams.ts","../../zimic-utils/src/url/joinURL.ts","../src/client/FetchClient.ts","../src/client/factory.ts"],"names":["Request","HttpHeaders"],"mappings":"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","file":"index.mjs","sourcesContent":["import { HttpHeaders, HttpHeadersSchema, HttpSchema, HttpSchemaMethod, HttpSchemaPath } from '@zimic/http';\nimport { PossiblePromise } from '@zimic/utils/types';\n\nimport { FetchRequest, FetchRequestObject, FetchResponse, FetchResponseObject } from '../types/requests';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\nexport interface FetchResponseErrorObjectOptions {\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeRequestBody?: boolean;\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n includeResponseBody?: boolean;\n}\n\nexport namespace FetchResponseErrorObjectOptions {\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, including the body of\n * the request and/or response.\n */\n export type WithBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody: true } | { includeResponseBody: true });\n\n /**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, excluding the body of\n * the request and/or response.\n */\n export type WithoutBody = FetchResponseErrorObjectOptions &\n ({ includeRequestBody?: false } | { includeResponseBody?: false });\n}\n\n/**\n * A plain object representation of a {@link FetchResponseError `FetchResponseError`}, compatible with JSON. It is useful\n * for serialization, debugging, and logging purposes.\n *\n * @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference}\n */\nexport interface FetchResponseErrorObject {\n name: string;\n message: string;\n request: FetchRequestObject;\n response: FetchResponseObject;\n}\n\n/** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error `FetchResponseError` API reference} */\nclass FetchResponseError<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n> extends Error {\n constructor(\n public request: FetchRequest<Schema, Method, Path>,\n public response: FetchResponse<Schema, Method, Path, true, 'manual'>,\n ) {\n super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);\n this.name = 'FetchResponseError';\n }\n\n /** @see {@link https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject `fetchResponseError.toObject()` API reference} */\n toObject(options: FetchResponseErrorObjectOptions.WithBody): Promise<FetchResponseErrorObject>;\n toObject(options?: FetchResponseErrorObjectOptions.WithoutBody): FetchResponseErrorObject;\n toObject(options?: FetchResponseErrorObjectOptions): PossiblePromise<FetchResponseErrorObject>;\n toObject({\n includeRequestBody = false,\n includeResponseBody = false,\n }: FetchResponseErrorObjectOptions = {}): PossiblePromise<FetchResponseErrorObject> {\n const partialObject = {\n name: this.name,\n message: this.message,\n } satisfies Partial<FetchResponseErrorObject>;\n\n if (!includeRequestBody && !includeResponseBody) {\n return {\n ...partialObject,\n request: this.requestToObject({ includeBody: false }),\n response: this.responseToObject({ includeBody: false }),\n };\n }\n\n return Promise.all([\n Promise.resolve(this.requestToObject({ includeBody: includeRequestBody })),\n Promise.resolve(this.responseToObject({ includeBody: includeResponseBody })),\n ]).then(([request, response]) => ({ ...partialObject, request, response }));\n }\n\n private requestToObject(options: { includeBody: true }): Promise<FetchRequestObject>;\n private requestToObject(options: { includeBody: false }): FetchRequestObject;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject>;\n private requestToObject(options: { includeBody: boolean }): PossiblePromise<FetchRequestObject> {\n const request = this.request;\n\n const requestObject: FetchRequestObject = {\n url: request.url,\n path: request.path,\n method: request.method,\n headers: this.convertHeadersToObject(request),\n cache: request.cache,\n destination: request.destination,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n };\n\n if (!options.includeBody) {\n return requestObject;\n }\n\n return this.withIncludedBodyIfAvailable('request', requestObject);\n }\n\n private responseToObject(options: { includeBody: true }): Promise<FetchResponseObject>;\n private responseToObject(options: { includeBody: false }): FetchResponseObject;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject>;\n private responseToObject(options: { includeBody: boolean }): PossiblePromise<FetchResponseObject> {\n const response = this.response;\n\n const responseObject: FetchResponseObject = {\n url: response.url,\n type: response.type,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n headers: this.convertHeadersToObject(response),\n redirected: response.redirected,\n };\n\n if (!options.includeBody) {\n return responseObject;\n }\n\n return this.withIncludedBodyIfAvailable('response', responseObject);\n }\n\n private convertHeadersToObject(\n resource: FetchRequest<Schema, Method, Path> | FetchResponse<Schema, Method, Path, true, 'manual'>,\n ): HttpHeadersSchema {\n return HttpHeaders.prototype.toObject.call(resource.headers) as HttpHeadersSchema;\n }\n\n private withIncludedBodyIfAvailable(\n resourceType: 'request',\n resourceObject: FetchRequestObject,\n ): PossiblePromise<FetchRequestObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'response',\n resourceObject: FetchResponseObject,\n ): PossiblePromise<FetchResponseObject>;\n private withIncludedBodyIfAvailable(\n resourceType: 'request' | 'response',\n resourceObject: FetchRequestObject | FetchResponseObject,\n ): PossiblePromise<FetchRequestObject | FetchResponseObject> {\n const resource = this[resourceType];\n\n if (resource.bodyUsed) {\n console.warn(\n `[@zimic/fetch] Could not include the ${resourceType} body because it is already used. ` +\n 'If you access the body before calling `error.toObject()`, consider reading it from a cloned ' +\n `${resourceType}.\\n\\nLearn more: https://zimic.dev/docs/fetch/api/fetch-response-error#errortoobject`,\n );\n return resourceObject;\n }\n\n return resource.text().then((body: string) => {\n resourceObject.body = body.length > 0 ? body : null;\n return resourceObject;\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFetchRequestError = FetchResponseError<any, any, any>;\n\nexport default FetchResponseError;\n","export function getExtraPatternsToEscape() {\n return /([.(){}+$])/g;\n}\n\nexport function getURIEncodedBackSlashPattern() {\n return /%5C/g;\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function getPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)/gu;\n}\n\nexport function getRepeatingPathParamPattern() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\+/gu;\n}\n\nexport function getOptionalPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function getOptionalRepeatingPathParamPattern() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createParametrizedPathPattern(path: string) {\n const replacedURL = encodeURI(path)\n .replace(/^\\/+/g, '')\n .replace(/\\/+$/g, '')\n .replace(getExtraPatternsToEscape(), '\\\\$1')\n .replace(getURIEncodedBackSlashPattern(), '\\\\')\n .replace(\n getOptionalRepeatingPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>.+?)?`;\n }\n },\n )\n .replace(getRepeatingPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>.+)`;\n })\n .replace(\n getOptionalPathParamPattern(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `:${identifier}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>[^\\\\/]+?)?`;\n }\n },\n )\n .replace(getPathParamPattern(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n });\n\n return new RegExp(`^/?${replacedURL}/?$`);\n}\n\nexport default createParametrizedPathPattern;\n","function excludeURLParams(url: URL) {\n url.hash = '';\n url.search = '';\n url.username = '';\n url.password = '';\n return url;\n}\n\nexport default excludeURLParams;\n","function joinURL(...parts: (URL | string)[]) {\n return parts\n .map((part, index) => {\n const isFirstPart = index === 0;\n const isLastPart = index === parts.length - 1;\n\n let partAsString = part.toString();\n\n if (!isFirstPart) {\n partAsString = partAsString.replace(/^\\//, '');\n }\n if (!isLastPart) {\n partAsString = partAsString.replace(/\\/$/, '');\n }\n\n return partAsString;\n })\n .filter((part) => part.length > 0)\n .join('/');\n}\n\nexport default joinURL;\n","import {\n HttpSchemaPath,\n HttpSchemaMethod,\n HttpSearchParams,\n LiteralHttpSchemaPathFromNonLiteral,\n HttpSchema,\n HttpHeaders,\n} from '@zimic/http';\nimport createParametrizedPathPattern from '@zimic/utils/url/createParametrizedPathPattern';\nimport excludeURLParams from '@zimic/utils/url/excludeURLParams';\nimport joinURL from '@zimic/utils/url/joinURL';\n\nimport FetchResponseError from './errors/FetchResponseError';\nimport { FetchInput, FetchOptions, Fetch, FetchDefaults } from './types/public';\nimport { FetchRequestConstructor, FetchRequestInit, FetchRequest, FetchResponse } from './types/requests';\n\nclass FetchClient<Schema extends HttpSchema> implements Omit<Fetch<Schema>, 'defaults' | 'loose' | 'Request'> {\n fetch: Fetch<Schema>;\n\n constructor({ onRequest, onResponse, ...defaults }: FetchOptions<Schema>) {\n this.fetch = this.createFetchFunction();\n\n this.fetch.defaults = {\n ...defaults,\n headers: defaults.headers ?? {},\n searchParams: defaults.searchParams ?? {},\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.fetch.loose = this.fetch as Fetch<any> as Fetch.Loose;\n\n this.fetch.Request = this.createRequestClass(this.fetch.defaults);\n this.fetch.onRequest = onRequest;\n this.fetch.onResponse = onResponse;\n }\n\n private createFetchFunction() {\n const fetch = async <\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) => {\n const request = await this.createFetchRequest<Method, Path>(input, init);\n const requestClone = request.clone();\n\n const rawResponse = await globalThis.fetch(\n // Optimize type checking by narrowing the type of request\n requestClone as Request,\n );\n const response = await this.createFetchResponse<\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >(request, rawResponse);\n\n return response;\n };\n\n Object.setPrototypeOf(fetch, this);\n\n return fetch as Fetch<Schema>;\n }\n\n private async createFetchRequest<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n >(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n let request = input instanceof Request ? input : new this.fetch.Request(input, init);\n\n if (this.fetch.onRequest) {\n const requestAfterInterceptor = await this.fetch.onRequest(\n // Optimize type checking by narrowing the type of request\n request as FetchRequest.Loose,\n );\n\n if (requestAfterInterceptor !== request) {\n const isFetchRequest = requestAfterInterceptor instanceof this.fetch.Request;\n\n request = isFetchRequest\n ? (requestAfterInterceptor as Request as typeof request)\n : new this.fetch.Request(requestAfterInterceptor as FetchInput<Schema, Method, Path>, init);\n }\n }\n\n return request;\n }\n\n private async createFetchResponse<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, rawResponse: Response) {\n let response = this.defineFetchResponseProperties<Method, Path>(fetchRequest, rawResponse);\n\n if (this.fetch.onResponse) {\n const responseAfterInterceptor = await this.fetch.onResponse(\n // Optimize type checking by narrowing the type of response\n response as FetchResponse.Loose,\n );\n\n const isFetchResponse =\n responseAfterInterceptor instanceof Response &&\n 'request' in responseAfterInterceptor &&\n responseAfterInterceptor.request instanceof this.fetch.Request;\n\n response = isFetchResponse\n ? (responseAfterInterceptor as typeof response)\n : this.defineFetchResponseProperties<Method, Path>(fetchRequest, responseAfterInterceptor);\n }\n\n return response;\n }\n\n private defineFetchResponseProperties<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.Literal<Schema, Method>,\n >(fetchRequest: FetchRequest<Schema, Method, Path>, response: Response) {\n const fetchResponse = response as FetchResponse<Schema, Method, Path>;\n\n Object.defineProperty(fetchResponse, 'request', {\n value: fetchRequest,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n let responseError: FetchResponse.Loose['error'] | undefined;\n\n Object.defineProperty(fetchResponse, 'error', {\n get() {\n if (responseError === undefined) {\n responseError = fetchResponse.ok\n ? null\n : new FetchResponseError(\n fetchRequest,\n fetchResponse as FetchResponse<Schema, Method, Path, true, 'manual'>,\n );\n }\n return responseError;\n },\n enumerable: true,\n configurable: false,\n });\n\n return fetchResponse;\n }\n\n private createRequestClass(defaults: FetchDefaults) {\n class Request<\n Method extends HttpSchemaMethod<Schema>,\n Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n > extends globalThis.Request {\n path: LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n\n constructor(\n input: FetchInput<Schema, Method, Path>,\n init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n ) {\n const initWithDefaults = { ...defaults, ...init };\n\n const headersFromDefaults = new HttpHeaders(defaults.headers);\n const headersFromInit = new HttpHeaders((init satisfies RequestInit as RequestInit).headers);\n\n let url: URL;\n const baseURL = new URL(initWithDefaults.baseURL);\n\n if (input instanceof globalThis.Request) {\n // Optimize type checking by narrowing the type of input\n const request = input as globalThis.Request;\n\n // Optimize type checking by narrowing the type of headers\n const headersFromRequest = new HttpHeaders(input.headers as Headers);\n\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromRequest.toObject(),\n ...headersFromInit.toObject(),\n };\n\n super(request, initWithDefaults);\n\n url = new URL(input.url);\n } else {\n initWithDefaults.headers = {\n ...headersFromDefaults.toObject(),\n ...headersFromInit.toObject(),\n };\n\n url = input instanceof URL ? new URL(input) : new URL(joinURL(baseURL, input));\n\n const searchParamsFromDefaults = new HttpSearchParams(defaults.searchParams);\n const searchParamsFromInit = new HttpSearchParams(initWithDefaults.searchParams);\n\n initWithDefaults.searchParams = {\n ...searchParamsFromDefaults.toObject(),\n ...searchParamsFromInit.toObject(),\n };\n\n url.search = new HttpSearchParams(initWithDefaults.searchParams).toString();\n\n super(url, initWithDefaults);\n }\n\n const baseURLWithoutTrailingSlash = baseURL.toString().replace(/\\/$/, '');\n\n this.path = excludeURLParams(url)\n .toString()\n .replace(baseURLWithoutTrailingSlash, '') as LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n }\n\n clone(): Request<Method, Path> {\n const rawClone = super.clone();\n\n return new Request<Method, Path>(\n rawClone as unknown as FetchInput<Schema, Method, Path>,\n rawClone as unknown as FetchRequestInit<\n Schema,\n Method,\n LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n >,\n );\n }\n }\n\n return Request as FetchRequestConstructor<Schema>;\n }\n\n isRequest<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n request: unknown,\n method: Method,\n path: Path,\n ): request is FetchRequest<Schema, Method, Path> {\n return (\n request instanceof Request &&\n request.method === method &&\n 'path' in request &&\n typeof request.path === 'string' &&\n createParametrizedPathPattern(path).test(request.path)\n );\n }\n\n isResponse<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n response: unknown,\n method: Method,\n path: Path,\n ): response is FetchResponse<Schema, Method, Path> {\n return (\n response instanceof Response &&\n 'request' in response &&\n this.isRequest(response.request, method, path) &&\n 'error' in response &&\n (response.error === null || response.error instanceof FetchResponseError)\n );\n }\n\n isResponseError<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n error: unknown,\n method: Method,\n path: Path,\n ): error is FetchResponseError<Schema, Method, Path> {\n return (\n error instanceof FetchResponseError &&\n this.isRequest(error.request, method, path) &&\n this.isResponse(error.response, method, path)\n );\n }\n}\n\nexport default FetchClient;\n","import { HttpSchema } from '@zimic/http';\n\nimport FetchClient from './FetchClient';\nimport { FetchOptions, Fetch } from './types/public';\n\n/** @see {@link https://zimic.dev/docs/fetch/api/create-fetch `createFetch` API reference} */\nfunction createFetch<Schema extends HttpSchema>(options: FetchOptions<Schema>): Fetch<Schema> {\n const { fetch } = new FetchClient<Schema>(options);\n return fetch;\n}\n\nexport default createFetch;\n"]}
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"api",
|
|
14
14
|
"static"
|
|
15
15
|
],
|
|
16
|
-
"version": "1.0.6
|
|
16
|
+
"version": "1.0.6",
|
|
17
17
|
"homepage": "https://zimic.dev/docs/fetch",
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
"typescript": "^5.9.2",
|
|
73
73
|
"vitest": "^3.2.4",
|
|
74
74
|
"@zimic/eslint-config-node": "0.0.0",
|
|
75
|
-
"@zimic/interceptor": "1.1.2-canary.
|
|
75
|
+
"@zimic/interceptor": "1.1.2-canary.2",
|
|
76
76
|
"@zimic/tsconfig": "0.0.0",
|
|
77
77
|
"@zimic/utils": "0.0.0",
|
|
78
78
|
"@zimic/lint-staged-config": "0.0.0"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
81
|
"typescript": ">=5.0.0",
|
|
82
|
-
"@zimic/http": "^1.1.0 || 1.1.2-canary.
|
|
82
|
+
"@zimic/http": "^1.1.0 || 1.1.2-canary.3"
|
|
83
83
|
},
|
|
84
84
|
"peerDependenciesMeta": {
|
|
85
85
|
"typescript": {
|