@byndyusoft-ui/http-client 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +479 -0
  2. package/dist/cjs/adapters/FetchAdapter.cjs +218 -0
  3. package/dist/cjs/adapters/XhrAdapter.cjs +357 -0
  4. package/dist/cjs/asserts/assertNonBlankString.cjs +11 -0
  5. package/dist/cjs/asserts/assertValidAdapter.cjs +15 -0
  6. package/dist/cjs/asserts/assertValidBaseUrl.cjs +10 -0
  7. package/dist/cjs/asserts/assertValidBody.cjs +17 -0
  8. package/dist/cjs/asserts/assertValidFetchAdapterOptions.cjs +70 -0
  9. package/dist/cjs/asserts/assertValidHeader.cjs +18 -0
  10. package/dist/cjs/asserts/assertValidHeaders.cjs +17 -0
  11. package/dist/cjs/asserts/assertValidHttpClientOptions.cjs +60 -0
  12. package/dist/cjs/asserts/assertValidMethod.cjs +13 -0
  13. package/dist/cjs/asserts/assertValidParam.cjs +23 -0
  14. package/dist/cjs/asserts/assertValidParams.cjs +17 -0
  15. package/dist/cjs/asserts/assertValidRequestConfig.cjs +55 -0
  16. package/dist/cjs/asserts/assertValidResponseType.cjs +13 -0
  17. package/dist/cjs/asserts/assertValidSignal.cjs +16 -0
  18. package/dist/cjs/asserts/assertValidTimeout.cjs +12 -0
  19. package/dist/cjs/asserts/assertValidUrl.cjs +10 -0
  20. package/dist/cjs/asserts/assertValidValidateStatus.cjs +13 -0
  21. package/dist/cjs/asserts/assertValidWithCredentials.cjs +12 -0
  22. package/dist/cjs/asserts/assertValidXhrAdapterOptions.cjs +39 -0
  23. package/dist/cjs/asserts/headerValueLineBreakPattern.cjs +5 -0
  24. package/dist/cjs/asserts/isRecord.cjs +11 -0
  25. package/dist/cjs/constants/httpMethods.cjs +13 -0
  26. package/dist/cjs/constants/httpResponseTypes.cjs +11 -0
  27. package/dist/cjs/constants/httpStatusCodes.cjs +68 -0
  28. package/dist/cjs/constants/requestBuilderErrorCodes.cjs +26 -0
  29. package/dist/cjs/core/HttpClient.cjs +141 -0
  30. package/dist/cjs/core/HttpRequestBuilder.cjs +129 -0
  31. package/dist/cjs/errors/AbortError.cjs +12 -0
  32. package/dist/cjs/errors/HttpClientError.cjs +18 -0
  33. package/dist/cjs/errors/HttpResponseError.cjs +26 -0
  34. package/dist/cjs/errors/NetworkError.cjs +12 -0
  35. package/dist/cjs/errors/ParseError.cjs +20 -0
  36. package/dist/cjs/errors/RequestBuilderError.cjs +18 -0
  37. package/dist/cjs/errors/RequestPreparationError.cjs +13 -0
  38. package/dist/cjs/errors/TimeoutError.cjs +18 -0
  39. package/dist/cjs/index.cjs +45 -0
  40. package/dist/cjs/utilities/buildUrl.cjs +94 -0
  41. package/dist/cjs/utilities/getErrorMessage.cjs +8 -0
  42. package/dist/cjs/utilities/isStatusAccepted.cjs +8 -0
  43. package/dist/cjs/utilities/mergeHeaders.cjs +30 -0
  44. package/dist/cjs/utilities/mergeParams.cjs +37 -0
  45. package/dist/cjs/utilities/prepareRequestBody.cjs +43 -0
  46. package/dist/esm/adapters/FetchAdapter.js +216 -0
  47. package/dist/esm/adapters/XhrAdapter.js +355 -0
  48. package/dist/esm/asserts/assertNonBlankString.js +9 -0
  49. package/dist/esm/asserts/assertValidAdapter.js +13 -0
  50. package/dist/esm/asserts/assertValidBaseUrl.js +8 -0
  51. package/dist/esm/asserts/assertValidBody.js +15 -0
  52. package/dist/esm/asserts/assertValidFetchAdapterOptions.js +68 -0
  53. package/dist/esm/asserts/assertValidHeader.js +16 -0
  54. package/dist/esm/asserts/assertValidHeaders.js +15 -0
  55. package/dist/esm/asserts/assertValidHttpClientOptions.js +58 -0
  56. package/dist/esm/asserts/assertValidMethod.js +11 -0
  57. package/dist/esm/asserts/assertValidParam.js +21 -0
  58. package/dist/esm/asserts/assertValidParams.js +15 -0
  59. package/dist/esm/asserts/assertValidRequestConfig.js +53 -0
  60. package/dist/esm/asserts/assertValidResponseType.js +11 -0
  61. package/dist/esm/asserts/assertValidSignal.js +14 -0
  62. package/dist/esm/asserts/assertValidTimeout.js +10 -0
  63. package/dist/esm/asserts/assertValidUrl.js +8 -0
  64. package/dist/esm/asserts/assertValidValidateStatus.js +11 -0
  65. package/dist/esm/asserts/assertValidWithCredentials.js +10 -0
  66. package/dist/esm/asserts/assertValidXhrAdapterOptions.js +37 -0
  67. package/dist/esm/asserts/headerValueLineBreakPattern.js +3 -0
  68. package/dist/esm/asserts/isRecord.js +9 -0
  69. package/dist/esm/constants/httpMethods.js +11 -0
  70. package/dist/esm/constants/httpResponseTypes.js +9 -0
  71. package/dist/esm/constants/httpStatusCodes.js +66 -0
  72. package/dist/esm/constants/requestBuilderErrorCodes.js +24 -0
  73. package/dist/esm/core/HttpClient.js +139 -0
  74. package/dist/esm/core/HttpRequestBuilder.js +127 -0
  75. package/dist/esm/errors/AbortError.js +9 -0
  76. package/dist/esm/errors/HttpClientError.js +15 -0
  77. package/dist/esm/errors/HttpResponseError.js +23 -0
  78. package/dist/esm/errors/NetworkError.js +9 -0
  79. package/dist/esm/errors/ParseError.js +17 -0
  80. package/dist/esm/errors/RequestBuilderError.js +15 -0
  81. package/dist/esm/errors/RequestPreparationError.js +10 -0
  82. package/dist/esm/errors/TimeoutError.js +15 -0
  83. package/dist/esm/index.js +16 -0
  84. package/dist/esm/utilities/buildUrl.js +92 -0
  85. package/dist/esm/utilities/getErrorMessage.js +6 -0
  86. package/dist/esm/utilities/isStatusAccepted.js +6 -0
  87. package/dist/esm/utilities/mergeHeaders.js +27 -0
  88. package/dist/esm/utilities/mergeParams.js +35 -0
  89. package/dist/esm/utilities/prepareRequestBody.js +41 -0
  90. package/dist/index.d.ts +354 -0
  91. package/package.json +53 -0
@@ -0,0 +1,354 @@
1
+ declare const HTTP_METHODS: {
2
+ readonly GET: "GET";
3
+ readonly HEAD: "HEAD";
4
+ readonly POST: "POST";
5
+ readonly PUT: "PUT";
6
+ readonly DELETE: "DELETE";
7
+ readonly OPTIONS: "OPTIONS";
8
+ readonly PATCH: "PATCH";
9
+ };
10
+
11
+ declare const HTTP_STATUS_CODES: {
12
+ readonly CONTINUE: 100;
13
+ readonly SWITCHING_PROTOCOLS: 101;
14
+ readonly PROCESSING: 102;
15
+ readonly EARLY_HINTS: 103;
16
+ readonly OK: 200;
17
+ readonly CREATED: 201;
18
+ readonly ACCEPTED: 202;
19
+ readonly NON_AUTHORITATIVE_INFORMATION: 203;
20
+ readonly NO_CONTENT: 204;
21
+ readonly RESET_CONTENT: 205;
22
+ readonly PARTIAL_CONTENT: 206;
23
+ readonly MULTI_STATUS: 207;
24
+ readonly ALREADY_REPORTED: 208;
25
+ readonly IM_USED: 226;
26
+ readonly MULTIPLE_CHOICES: 300;
27
+ readonly MOVED_PERMANENTLY: 301;
28
+ readonly FOUND: 302;
29
+ readonly SEE_OTHER: 303;
30
+ readonly NOT_MODIFIED: 304;
31
+ readonly USE_PROXY: 305;
32
+ readonly TEMPORARY_REDIRECT: 307;
33
+ readonly PERMANENT_REDIRECT: 308;
34
+ readonly BAD_REQUEST: 400;
35
+ readonly UNAUTHORIZED: 401;
36
+ readonly PAYMENT_REQUIRED: 402;
37
+ readonly FORBIDDEN: 403;
38
+ readonly NOT_FOUND: 404;
39
+ readonly METHOD_NOT_ALLOWED: 405;
40
+ readonly NOT_ACCEPTABLE: 406;
41
+ readonly PROXY_AUTHENTICATION_REQUIRED: 407;
42
+ readonly REQUEST_TIMEOUT: 408;
43
+ readonly CONFLICT: 409;
44
+ readonly GONE: 410;
45
+ readonly LENGTH_REQUIRED: 411;
46
+ readonly PRECONDITION_FAILED: 412;
47
+ readonly PAYLOAD_TOO_LARGE: 413;
48
+ readonly URI_TOO_LONG: 414;
49
+ readonly UNSUPPORTED_MEDIA_TYPE: 415;
50
+ readonly RANGE_NOT_SATISFIABLE: 416;
51
+ readonly EXPECTATION_FAILED: 417;
52
+ readonly IM_A_TEAPOT: 418;
53
+ readonly MISDIRECTED_REQUEST: 421;
54
+ readonly UNPROCESSABLE_ENTITY: 422;
55
+ readonly LOCKED: 423;
56
+ readonly FAILED_DEPENDENCY: 424;
57
+ readonly TOO_EARLY: 425;
58
+ readonly UPGRADE_REQUIRED: 426;
59
+ readonly PRECONDITION_REQUIRED: 428;
60
+ readonly TOO_MANY_REQUESTS: 429;
61
+ readonly REQUEST_HEADER_FIELDS_TOO_LARGE: 431;
62
+ readonly UNAVAILABLE_FOR_LEGAL_REASONS: 451;
63
+ readonly INTERNAL_SERVER_ERROR: 500;
64
+ readonly NOT_IMPLEMENTED: 501;
65
+ readonly BAD_GATEWAY: 502;
66
+ readonly SERVICE_UNAVAILABLE: 503;
67
+ readonly GATEWAY_TIMEOUT: 504;
68
+ readonly HTTP_VERSION_NOT_SUPPORTED: 505;
69
+ readonly VARIANT_ALSO_NEGOTIATES: 506;
70
+ readonly INSUFFICIENT_STORAGE: 507;
71
+ readonly LOOP_DETECTED: 508;
72
+ readonly NOT_EXTENDED: 510;
73
+ readonly NETWORK_AUTHENTICATION_REQUIRED: 511;
74
+ };
75
+
76
+ declare const HTTP_RESPONSE_TYPES: {
77
+ readonly ARRAY_BUFFER: "arrayBuffer";
78
+ readonly BLOB: "blob";
79
+ readonly JSON: "json";
80
+ readonly STREAM: "stream";
81
+ readonly TEXT: "text";
82
+ };
83
+
84
+ declare const REQUEST_BUILDER_ERROR_CODES: {
85
+ readonly INVALID_BASE_URL: "INVALID_BASE_URL";
86
+ readonly INVALID_BEARER_TOKEN: "INVALID_BEARER_TOKEN";
87
+ readonly INVALID_ADAPTER: "INVALID_ADAPTER";
88
+ readonly INVALID_BODY: "INVALID_BODY";
89
+ readonly INVALID_CONFIG: "INVALID_CONFIG";
90
+ readonly INVALID_EXECUTOR: "INVALID_EXECUTOR";
91
+ readonly INVALID_FETCH_ADAPTER_OPTIONS: "INVALID_FETCH_ADAPTER_OPTIONS";
92
+ readonly INVALID_HEADER: "INVALID_HEADER";
93
+ readonly INVALID_HEADERS: "INVALID_HEADERS";
94
+ readonly INVALID_HOOK: "INVALID_HOOK";
95
+ readonly INVALID_METHOD: "INVALID_METHOD";
96
+ readonly INVALID_PARAM: "INVALID_PARAM";
97
+ readonly INVALID_PARAMS: "INVALID_PARAMS";
98
+ readonly INVALID_RESPONSE_TYPE: "INVALID_RESPONSE_TYPE";
99
+ readonly INVALID_SIGNAL: "INVALID_SIGNAL";
100
+ readonly INVALID_TIMEOUT: "INVALID_TIMEOUT";
101
+ readonly INVALID_URL: "INVALID_URL";
102
+ readonly INVALID_VALIDATE_STATUS: "INVALID_VALIDATE_STATUS";
103
+ readonly INVALID_WITH_CREDENTIALS: "INVALID_WITH_CREDENTIALS";
104
+ readonly INVALID_XHR_ADAPTER_OPTIONS: "INVALID_XHR_ADAPTER_OPTIONS";
105
+ };
106
+
107
+ type THttpMethod = (typeof HTTP_METHODS)[keyof typeof HTTP_METHODS];
108
+
109
+ /** Any valid HTTP response status, including non-standard codes returned by proxies or servers. */
110
+ type THttpStatusCode = number;
111
+
112
+ type THttpHeaders = Record<string, string>;
113
+
114
+ type THttpParamPrimitive = string | number | boolean;
115
+ /** A single query value or a list. `null` / `undefined` omit the key (or list item) when the request is sent. */
116
+ type THttpParamValue = THttpParamPrimitive | null | undefined | Array<THttpParamPrimitive | null | undefined>;
117
+ type THttpParams = Record<string, THttpParamValue>;
118
+
119
+ type THttpResponseType = (typeof HTTP_RESPONSE_TYPES)[keyof typeof HTTP_RESPONSE_TYPES];
120
+
121
+ /** Determines whether an HTTP response status should be treated as successful. */
122
+ type TValidateStatus = (status: number) => boolean;
123
+
124
+ interface IHttpRequestConfig<TData = unknown> {
125
+ readonly url: string;
126
+ readonly method: THttpMethod;
127
+ readonly baseUrl?: string;
128
+ readonly headers?: THttpHeaders;
129
+ readonly params?: THttpParams;
130
+ readonly data?: TData;
131
+ readonly signal?: AbortSignal;
132
+ readonly timeout?: number;
133
+ readonly validateStatus?: TValidateStatus;
134
+ readonly withCredentials?: boolean;
135
+ readonly responseType?: THttpResponseType;
136
+ }
137
+
138
+ interface IHttpResponse<T = unknown> {
139
+ data?: T;
140
+ status: THttpStatusCode;
141
+ statusText: string;
142
+ headers: THttpHeaders;
143
+ config: IHttpRequestConfig;
144
+ }
145
+
146
+ interface IHttpClientAdapter {
147
+ request<T>(config: IHttpRequestConfig): Promise<IHttpResponse<T>>;
148
+ }
149
+
150
+ /**
151
+ * Called once per request after merging with the client's default configuration,
152
+ * immediately before the adapter is called.
153
+ * The returned config continues through the pipeline. A thrown error is passed to onRequestError.
154
+ */
155
+ type THttpRequestHook = (config: IHttpRequestConfig) => IHttpRequestConfig | Promise<IHttpRequestConfig>;
156
+ /** A config that continues the request, or nothing, in which case the original error is rethrown. */
157
+ type THttpRequestErrorHookResult = IHttpRequestConfig | void;
158
+ /** Called only when onRequest throws or rejects. */
159
+ type THttpRequestErrorHook = (error: unknown) => THttpRequestErrorHookResult | Promise<THttpRequestErrorHookResult>;
160
+ /**
161
+ * Called once per request when the adapter resolves successfully (2xx).
162
+ * The returned response is passed to the caller. A thrown error is passed to onResponseError.
163
+ */
164
+ type THttpResponseHook = (response: IHttpResponse) => IHttpResponse | Promise<IHttpResponse>;
165
+ /** A recovery response (onResponse is not called for it again), or nothing, in which case the original error is rethrown. */
166
+ type THttpResponseErrorHookResult = IHttpResponse | void;
167
+ /**
168
+ * Called when the adapter rejects or when onResponse throws.
169
+ */
170
+ type THttpResponseErrorHook = (error: unknown) => THttpResponseErrorHookResult | Promise<THttpResponseErrorHookResult>;
171
+
172
+ interface IHttpClientOptions {
173
+ /** Uses FetchAdapter when omitted. */
174
+ adapter?: IHttpClientAdapter;
175
+ baseUrl?: string;
176
+ headers?: THttpHeaders;
177
+ params?: THttpParams;
178
+ timeout?: number;
179
+ /** Determines whether a response status should be treated as successful. */
180
+ validateStatus?: TValidateStatus;
181
+ /** Sends cookies and HTTP credentials with cross-origin requests. */
182
+ withCredentials?: boolean;
183
+ onRequest?: THttpRequestHook;
184
+ onRequestError?: THttpRequestErrorHook;
185
+ onResponse?: THttpResponseHook;
186
+ onResponseError?: THttpResponseErrorHook;
187
+ }
188
+
189
+ /** Request modes that can be explicitly set for a programmatic Fetch request. */
190
+ type TFetchAdapterMode = Exclude<RequestMode, 'navigate'>;
191
+ /** Settings that are supported only by the Fetch transport. */
192
+ interface IFetchAdapterOptions {
193
+ cache?: RequestCache;
194
+ credentials?: RequestCredentials;
195
+ integrity?: string;
196
+ keepalive?: boolean;
197
+ mode?: TFetchAdapterMode;
198
+ redirect?: RequestRedirect;
199
+ referrer?: string;
200
+ referrerPolicy?: ReferrerPolicy;
201
+ }
202
+
203
+ type THttpRequestBody = string | Blob | ArrayBuffer | ArrayBufferView | FormData | URLSearchParams;
204
+
205
+ type THttpRequestExecutor = <T>(config: IHttpRequestConfig) => Promise<IHttpResponse<T>>;
206
+
207
+ type TRequestBuilderErrorCode = (typeof REQUEST_BUILDER_ERROR_CODES)[keyof typeof REQUEST_BUILDER_ERROR_CODES];
208
+
209
+ /** Settings that are supported only by the XMLHttpRequest transport. */
210
+ interface IXhrAdapterOptions {
211
+ mimeType?: string;
212
+ responseType?: THttpResponseType;
213
+ timeout?: number;
214
+ withCredentials?: boolean;
215
+ onDownloadProgress?: (event: ProgressEvent, config: Readonly<IHttpRequestConfig>) => void;
216
+ onUploadProgress?: (event: ProgressEvent, config: Readonly<IHttpRequestConfig>) => void;
217
+ }
218
+
219
+ /**
220
+ * Builds request configs immutably. Every configuration method returns a new builder instance.
221
+ */
222
+ declare class HttpRequestBuilder<TResponse = unknown> {
223
+ private readonly executor;
224
+ private config;
225
+ constructor(executor: THttpRequestExecutor, method: THttpMethod, url: string);
226
+ private withConfig;
227
+ build(): Readonly<IHttpRequestConfig>;
228
+ baseUrl(value: string): HttpRequestBuilder<TResponse>;
229
+ header(key: string, value: string): HttpRequestBuilder<TResponse>;
230
+ headers(headers: THttpHeaders): HttpRequestBuilder<TResponse>;
231
+ param(key: string, value: THttpParamValue): HttpRequestBuilder<TResponse>;
232
+ params(params: THttpParams): HttpRequestBuilder<TResponse>;
233
+ body(data: unknown): HttpRequestBuilder<TResponse>;
234
+ signal(signal: AbortSignal): HttpRequestBuilder<TResponse>;
235
+ /** A zero timeout disables the request timeout, including a timeout inherited from the client config. */
236
+ timeout(timeout: number): HttpRequestBuilder<TResponse>;
237
+ /** Determines whether a response status should be treated as successful. */
238
+ validateStatus(validateStatus: NonNullable<IHttpRequestConfig['validateStatus']>): HttpRequestBuilder<TResponse>;
239
+ /** Includes credentials in cross-origin requests. */
240
+ withCredentials(withCredentials: boolean): HttpRequestBuilder<TResponse>;
241
+ bearer(token: string): HttpRequestBuilder<TResponse>;
242
+ asJson<T>(): HttpRequestBuilder<T>;
243
+ asText(): HttpRequestBuilder<string>;
244
+ asBlob(): HttpRequestBuilder<Blob>;
245
+ asArrayBuffer(): HttpRequestBuilder<ArrayBuffer>;
246
+ asStream(): HttpRequestBuilder<ReadableStream<Uint8Array>>;
247
+ execute(): Promise<IHttpResponse<TResponse>>;
248
+ }
249
+
250
+ declare class HttpClient {
251
+ private readonly adapter;
252
+ private readonly defaultConfig;
253
+ private onRequestHook?;
254
+ private onRequestErrorHook?;
255
+ private onResponseHook?;
256
+ private onResponseErrorHook?;
257
+ constructor(options: IHttpClientOptions);
258
+ /** Creates an independent client with the current defaults and hooks, using the provided adapter. */
259
+ withAdapter(adapter: IHttpClientAdapter): HttpClient;
260
+ /** Sets the onRequest hook, replacing the hook configured through constructor options. Returns this client for chaining. */
261
+ onRequest(hook: THttpRequestHook): this;
262
+ /** Sets the onRequestError hook, replacing the hook configured through constructor options. Returns this client for chaining. */
263
+ onRequestError(hook: THttpRequestErrorHook): this;
264
+ /** Sets the onResponse hook, replacing the hook configured through constructor options. Returns this client for chaining. */
265
+ onResponse(hook: THttpResponseHook): this;
266
+ /** Sets the onResponseError hook, replacing the hook configured through constructor options. Returns this client for chaining. */
267
+ onResponseError(hook: THttpResponseErrorHook): this;
268
+ private request;
269
+ get(url: string): HttpRequestBuilder;
270
+ head(url: string): HttpRequestBuilder;
271
+ post(url: string): HttpRequestBuilder;
272
+ put(url: string): HttpRequestBuilder;
273
+ delete(url: string): HttpRequestBuilder;
274
+ options(url: string): HttpRequestBuilder;
275
+ patch(url: string): HttpRequestBuilder;
276
+ private executeRequest;
277
+ }
278
+
279
+ declare class FetchAdapter implements IHttpClientAdapter {
280
+ private readonly options;
281
+ constructor(options?: IFetchAdapterOptions);
282
+ request<T>(config: IHttpRequestConfig): Promise<IHttpResponse<T>>;
283
+ }
284
+
285
+ declare class XhrAdapter implements IHttpClientAdapter {
286
+ private readonly options;
287
+ constructor(options?: IXhrAdapterOptions);
288
+ request<T>(config: IHttpRequestConfig): Promise<IHttpResponse<T>>;
289
+ }
290
+
291
+ interface IHttpClientErrorOptions extends ErrorOptions {
292
+ config?: IHttpRequestConfig;
293
+ }
294
+ /** Base class for all HTTP client errors. Supports catching any client error with a single instanceof check. */
295
+ declare class HttpClientError extends Error {
296
+ readonly config?: IHttpRequestConfig;
297
+ constructor(message: string, options?: IHttpClientErrorOptions);
298
+ }
299
+ declare function isHttpClientError(error: unknown): error is HttpClientError;
300
+
301
+ declare class AbortError extends HttpClientError {
302
+ }
303
+ declare function isAbortError(error: unknown): error is AbortError;
304
+
305
+ /** Indicates that the server completed the request with a non-2xx status. */
306
+ declare class HttpResponseError<T = unknown> extends HttpClientError {
307
+ readonly status: THttpStatusCode;
308
+ readonly statusText: string;
309
+ readonly headers: THttpHeaders;
310
+ readonly config: IHttpRequestConfig;
311
+ readonly data: T | undefined;
312
+ constructor(message: string, status: THttpStatusCode, statusText: string, headers: THttpHeaders, config: IHttpRequestConfig, data?: T, options?: ErrorOptions);
313
+ }
314
+ declare function isHttpResponseError(error: unknown): error is HttpResponseError;
315
+
316
+ declare class NetworkError extends HttpClientError {
317
+ }
318
+ declare function isNetworkError(error: unknown): error is NetworkError;
319
+
320
+ interface IParseErrorOptions extends IHttpClientErrorOptions {
321
+ responseType?: THttpResponseType;
322
+ raw?: string;
323
+ }
324
+ /** Indicates that a successful response could not be parsed in the requested format. */
325
+ declare class ParseError extends HttpClientError {
326
+ readonly responseType?: THttpResponseType;
327
+ readonly raw?: string;
328
+ constructor(message: string, options?: IParseErrorOptions);
329
+ }
330
+ declare function isParseError(error: unknown): error is ParseError;
331
+
332
+ declare class RequestBuilderError extends HttpClientError {
333
+ readonly code: TRequestBuilderErrorCode;
334
+ constructor(message: string, code?: TRequestBuilderErrorCode);
335
+ }
336
+ declare function isRequestBuilderError(error: unknown): error is RequestBuilderError;
337
+
338
+ /** Indicates that an adapter could not prepare a request before sending it. */
339
+ declare class RequestPreparationError extends HttpClientError {
340
+ }
341
+ declare function isRequestPreparationError(error: unknown): error is RequestPreparationError;
342
+
343
+ interface ITimeoutErrorOptions extends IHttpClientErrorOptions {
344
+ timeout?: number;
345
+ }
346
+ /** Indicates that the request exceeded the configured timeout. */
347
+ declare class TimeoutError extends HttpClientError {
348
+ readonly timeout?: number;
349
+ constructor(message: string, options?: ITimeoutErrorOptions);
350
+ }
351
+ declare function isTimeoutError(error: unknown): error is TimeoutError;
352
+
353
+ export { AbortError, FetchAdapter, HTTP_METHODS, HTTP_RESPONSE_TYPES, HTTP_STATUS_CODES, HttpClient, HttpClientError, HttpRequestBuilder, HttpResponseError, NetworkError, ParseError, REQUEST_BUILDER_ERROR_CODES, RequestBuilderError, RequestPreparationError, TimeoutError, XhrAdapter, isAbortError, isHttpClientError, isHttpResponseError, isNetworkError, isParseError, isRequestBuilderError, isRequestPreparationError, isTimeoutError };
354
+ export type { IFetchAdapterOptions, IHttpClientAdapter, IHttpClientErrorOptions, IHttpClientOptions, IHttpRequestConfig, IHttpResponse, IParseErrorOptions, ITimeoutErrorOptions, IXhrAdapterOptions, TFetchAdapterMode, THttpHeaders, THttpMethod, THttpParamPrimitive, THttpParamValue, THttpParams, THttpRequestBody, THttpRequestErrorHook, THttpRequestErrorHookResult, THttpRequestExecutor, THttpRequestHook, THttpResponseErrorHook, THttpResponseErrorHookResult, THttpResponseHook, THttpResponseType, THttpStatusCode, TRequestBuilderErrorCode, TValidateStatus };
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@byndyusoft-ui/http-client",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "Byndyusoft UI HTTP Client Service",
5
+ "keywords": [
6
+ "byndyusoft",
7
+ "byndyusoft-ui",
8
+ "http-client"
9
+ ],
10
+ "author": "Byndyusoft Frontend Developer <frontend@byndyusoft.com>",
11
+ "homepage": "https://github.com/Byndyusoft/ui/tree/master/services/http-client#readme",
12
+ "license": "Apache-2.0",
13
+ "type": "module",
14
+ "main": "./dist/cjs/index.cjs",
15
+ "module": "./dist/esm/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/esm/index.js",
21
+ "require": "./dist/cjs/index.cjs"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "sideEffects": false,
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/Byndyusoft/ui.git"
35
+ },
36
+ "scripts": {
37
+ "build": "rimraf dist && tsc --project tsconfig.build.json && rollup --config && rimraf dist/declarations && npm run test:package",
38
+ "clean": "rimraf dist && rimraf .turbo && rimraf node_modules && rimraf package-lock.json",
39
+ "lint": "eslint src --config ../../eslint.config.js",
40
+ "test": "vitest run --config vitest.config.mjs --typecheck",
41
+ "test:package": "node scripts/verify-package.mjs"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/Byndyusoft/ui/issues"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public",
48
+ "tag": "alpha"
49
+ },
50
+ "devDependencies": {
51
+ "msw": "^2.4.9"
52
+ }
53
+ }