@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,70 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var isRecord = require('./isRecord.cjs');
6
+
7
+ const FETCH_CACHE_VALUES = ['default', 'no-store', 'reload', 'no-cache', 'force-cache', 'only-if-cached'];
8
+ const FETCH_CREDENTIALS_VALUES = ['omit', 'same-origin', 'include'];
9
+ const FETCH_MODE_VALUES = ['cors', 'no-cors', 'same-origin'];
10
+ const FETCH_REDIRECT_VALUES = ['error', 'follow', 'manual'];
11
+ const FETCH_REFERRER_POLICY_VALUES = [
12
+ '',
13
+ 'no-referrer',
14
+ 'no-referrer-when-downgrade',
15
+ 'origin',
16
+ 'origin-when-cross-origin',
17
+ 'same-origin',
18
+ 'strict-origin',
19
+ 'strict-origin-when-cross-origin',
20
+ 'unsafe-url'
21
+ ];
22
+ function throwInvalidOptions(message) {
23
+ throw new RequestBuilderError.RequestBuilderError(message, requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_FETCH_ADAPTER_OPTIONS);
24
+ }
25
+ function assertValidEnum(value, values, name) {
26
+ if (typeof value !== 'string' || !values.includes(value)) {
27
+ throwInvalidOptions(`${name} must be a valid Fetch option`);
28
+ }
29
+ }
30
+ function assertValidString(value, name) {
31
+ if (typeof value !== 'string') {
32
+ throwInvalidOptions(`${name} must be a string`);
33
+ }
34
+ }
35
+ /** Validates options passed to the Fetch adapter constructor. */
36
+ function assertValidFetchAdapterOptions(options) {
37
+ if (!isRecord.isRecord(options)) {
38
+ throwInvalidOptions('Fetch adapter options must be an object');
39
+ }
40
+ const { cache, credentials, integrity, keepalive, mode, redirect, referrer, referrerPolicy } = options;
41
+ if (cache !== undefined) {
42
+ assertValidEnum(cache, FETCH_CACHE_VALUES, 'cache');
43
+ }
44
+ if (credentials !== undefined) {
45
+ assertValidEnum(credentials, FETCH_CREDENTIALS_VALUES, 'credentials');
46
+ }
47
+ if (integrity !== undefined) {
48
+ assertValidString(integrity, 'integrity');
49
+ }
50
+ if (keepalive !== undefined && typeof keepalive !== 'boolean') {
51
+ throwInvalidOptions('keepalive must be a boolean');
52
+ }
53
+ if (mode !== undefined) {
54
+ assertValidEnum(mode, FETCH_MODE_VALUES, 'mode');
55
+ }
56
+ if (cache === 'only-if-cached' && mode !== 'same-origin') {
57
+ throwInvalidOptions('cache "only-if-cached" requires mode "same-origin"');
58
+ }
59
+ if (redirect !== undefined) {
60
+ assertValidEnum(redirect, FETCH_REDIRECT_VALUES, 'redirect');
61
+ }
62
+ if (referrer !== undefined) {
63
+ assertValidString(referrer, 'referrer');
64
+ }
65
+ if (referrerPolicy !== undefined) {
66
+ assertValidEnum(referrerPolicy, FETCH_REFERRER_POLICY_VALUES, 'referrerPolicy');
67
+ }
68
+ }
69
+
70
+ exports.assertValidFetchAdapterOptions = assertValidFetchAdapterOptions;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertNonBlankString = require('./assertNonBlankString.cjs');
6
+ var headerValueLineBreakPattern = require('./headerValueLineBreakPattern.cjs');
7
+
8
+ function assertValidHeader(key, value) {
9
+ assertNonBlankString.assertNonBlankString(key, 'Header key must be a non-empty string', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_HEADER);
10
+ if (!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(key)) {
11
+ throw new RequestBuilderError.RequestBuilderError('Header key contains invalid characters', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_HEADER);
12
+ }
13
+ if (typeof value !== 'string' || headerValueLineBreakPattern.HEADER_VALUE_LINE_BREAK_PATTERN.test(value)) {
14
+ throw new RequestBuilderError.RequestBuilderError('Header value must be a string without line breaks', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_HEADER);
15
+ }
16
+ }
17
+
18
+ exports.assertValidHeader = assertValidHeader;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertValidHeader = require('./assertValidHeader.cjs');
6
+ var isRecord = require('./isRecord.cjs');
7
+
8
+ function assertValidHeaders(headers) {
9
+ if (!isRecord.isRecord(headers)) {
10
+ throw new RequestBuilderError.RequestBuilderError('Headers must be an object', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_HEADERS);
11
+ }
12
+ for (const [key, value] of Object.entries(headers)) {
13
+ assertValidHeader.assertValidHeader(key, value);
14
+ }
15
+ }
16
+
17
+ exports.assertValidHeaders = assertValidHeaders;
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertValidAdapter = require('./assertValidAdapter.cjs');
6
+ var assertValidBaseUrl = require('./assertValidBaseUrl.cjs');
7
+ var assertValidHeaders = require('./assertValidHeaders.cjs');
8
+ var assertValidParams = require('./assertValidParams.cjs');
9
+ var assertValidTimeout = require('./assertValidTimeout.cjs');
10
+ var assertValidWithCredentials = require('./assertValidWithCredentials.cjs');
11
+ var assertValidValidateStatus = require('./assertValidValidateStatus.cjs');
12
+ var isRecord = require('./isRecord.cjs');
13
+
14
+ function assertValidHook(hook, name) {
15
+ if (typeof hook !== 'function') {
16
+ throw new RequestBuilderError.RequestBuilderError(`${name} must be a function`, requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_HOOK);
17
+ }
18
+ }
19
+ /** Validates options passed to the HTTP client constructor. */
20
+ function assertValidHttpClientOptions(options) {
21
+ if (!isRecord.isRecord(options)) {
22
+ throw new RequestBuilderError.RequestBuilderError('Client options must be an object', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_CONFIG);
23
+ }
24
+ const { adapter, baseUrl, headers, params, timeout, validateStatus, withCredentials, onRequest, onRequestError, onResponse, onResponseError } = options;
25
+ if (adapter !== undefined) {
26
+ assertValidAdapter.assertValidAdapter(adapter);
27
+ }
28
+ if (baseUrl !== undefined) {
29
+ assertValidBaseUrl.assertValidBaseUrl(baseUrl);
30
+ }
31
+ if (headers !== undefined) {
32
+ assertValidHeaders.assertValidHeaders(headers);
33
+ }
34
+ if (params !== undefined) {
35
+ assertValidParams.assertValidParams(params);
36
+ }
37
+ if (timeout !== undefined) {
38
+ assertValidTimeout.assertValidTimeout(timeout);
39
+ }
40
+ if (validateStatus !== undefined) {
41
+ assertValidValidateStatus.assertValidValidateStatus(validateStatus);
42
+ }
43
+ if (withCredentials !== undefined) {
44
+ assertValidWithCredentials.assertValidWithCredentials(withCredentials);
45
+ }
46
+ if (onRequest !== undefined) {
47
+ assertValidHook(onRequest, 'onRequest');
48
+ }
49
+ if (onRequestError !== undefined) {
50
+ assertValidHook(onRequestError, 'onRequestError');
51
+ }
52
+ if (onResponse !== undefined) {
53
+ assertValidHook(onResponse, 'onResponse');
54
+ }
55
+ if (onResponseError !== undefined) {
56
+ assertValidHook(onResponseError, 'onResponseError');
57
+ }
58
+ }
59
+
60
+ exports.assertValidHttpClientOptions = assertValidHttpClientOptions;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var httpMethods = require('../constants/httpMethods.cjs');
4
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
5
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
6
+
7
+ function assertValidMethod(method) {
8
+ if (!Object.values(httpMethods.HTTP_METHODS).includes(method)) {
9
+ throw new RequestBuilderError.RequestBuilderError('Method must be a valid HTTP method', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_METHOD);
10
+ }
11
+ }
12
+
13
+ exports.assertValidMethod = assertValidMethod;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertNonBlankString = require('./assertNonBlankString.cjs');
6
+
7
+ function isValidParamPrimitive(value) {
8
+ return (typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value)));
9
+ }
10
+ function isValidParamValue(value) {
11
+ if (value === null || value === undefined || isValidParamPrimitive(value)) {
12
+ return true;
13
+ }
14
+ return (Array.isArray(value) && value.every(item => item === null || item === undefined || isValidParamPrimitive(item)));
15
+ }
16
+ function assertValidParam(key, value) {
17
+ assertNonBlankString.assertNonBlankString(key, 'Param key must be a non-empty string', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_PARAM);
18
+ if (!isValidParamValue(value)) {
19
+ throw new RequestBuilderError.RequestBuilderError('Param value must be a string, finite number, boolean, null, undefined, or an array of these values', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_PARAM);
20
+ }
21
+ }
22
+
23
+ exports.assertValidParam = assertValidParam;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertValidParam = require('./assertValidParam.cjs');
6
+ var isRecord = require('./isRecord.cjs');
7
+
8
+ function assertValidParams(params) {
9
+ if (!isRecord.isRecord(params)) {
10
+ throw new RequestBuilderError.RequestBuilderError('Params must be an object', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_PARAMS);
11
+ }
12
+ for (const [key, value] of Object.entries(params)) {
13
+ assertValidParam.assertValidParam(key, value);
14
+ }
15
+ }
16
+
17
+ exports.assertValidParams = assertValidParams;
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertValidBody = require('./assertValidBody.cjs');
6
+ var assertValidBaseUrl = require('./assertValidBaseUrl.cjs');
7
+ var assertValidHeaders = require('./assertValidHeaders.cjs');
8
+ var assertValidMethod = require('./assertValidMethod.cjs');
9
+ var assertValidParams = require('./assertValidParams.cjs');
10
+ var assertValidResponseType = require('./assertValidResponseType.cjs');
11
+ var assertValidSignal = require('./assertValidSignal.cjs');
12
+ var assertValidTimeout = require('./assertValidTimeout.cjs');
13
+ var assertValidUrl = require('./assertValidUrl.cjs');
14
+ var assertValidWithCredentials = require('./assertValidWithCredentials.cjs');
15
+ var assertValidValidateStatus = require('./assertValidValidateStatus.cjs');
16
+ var isRecord = require('./isRecord.cjs');
17
+
18
+ /** Validates a complete request config, including values returned by request hooks. */
19
+ function assertValidRequestConfig(config) {
20
+ if (!isRecord.isRecord(config)) {
21
+ throw new RequestBuilderError.RequestBuilderError('Request config must be an object', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_CONFIG);
22
+ }
23
+ const { method, url, baseUrl, headers, params, data, signal, timeout, validateStatus, withCredentials, responseType } = config;
24
+ assertValidMethod.assertValidMethod(method);
25
+ assertValidUrl.assertValidUrl(url);
26
+ if (baseUrl !== undefined) {
27
+ assertValidBaseUrl.assertValidBaseUrl(baseUrl);
28
+ }
29
+ if (headers !== undefined) {
30
+ assertValidHeaders.assertValidHeaders(headers);
31
+ }
32
+ if (params !== undefined) {
33
+ assertValidParams.assertValidParams(params);
34
+ }
35
+ if (signal !== undefined) {
36
+ assertValidSignal.assertValidSignal(signal);
37
+ }
38
+ if (timeout !== undefined) {
39
+ assertValidTimeout.assertValidTimeout(timeout);
40
+ }
41
+ if (validateStatus !== undefined) {
42
+ assertValidValidateStatus.assertValidValidateStatus(validateStatus);
43
+ }
44
+ if (withCredentials !== undefined) {
45
+ assertValidWithCredentials.assertValidWithCredentials(withCredentials);
46
+ }
47
+ if (responseType !== undefined) {
48
+ assertValidResponseType.assertValidResponseType(responseType);
49
+ }
50
+ if (Object.prototype.hasOwnProperty.call(config, 'data')) {
51
+ assertValidBody.assertValidBody(method, data);
52
+ }
53
+ }
54
+
55
+ exports.assertValidRequestConfig = assertValidRequestConfig;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var httpResponseTypes = require('../constants/httpResponseTypes.cjs');
4
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
5
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
6
+
7
+ function assertValidResponseType(responseType) {
8
+ if (!Object.values(httpResponseTypes.HTTP_RESPONSE_TYPES).includes(responseType)) {
9
+ throw new RequestBuilderError.RequestBuilderError('Response type must be a valid HTTP response type', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_RESPONSE_TYPE);
10
+ }
11
+ }
12
+
13
+ exports.assertValidResponseType = assertValidResponseType;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+
6
+ function assertValidSignal(signal) {
7
+ if (signal === null ||
8
+ typeof signal !== 'object' ||
9
+ typeof signal.aborted !== 'boolean' ||
10
+ typeof signal.addEventListener !== 'function' ||
11
+ typeof signal.removeEventListener !== 'function') {
12
+ throw new RequestBuilderError.RequestBuilderError('Signal must be an AbortSignal', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_SIGNAL);
13
+ }
14
+ }
15
+
16
+ exports.assertValidSignal = assertValidSignal;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+
6
+ function assertValidTimeout(timeout) {
7
+ if (typeof timeout !== 'number' || !Number.isFinite(timeout) || timeout < 0) {
8
+ throw new RequestBuilderError.RequestBuilderError('Timeout must be a finite non-negative number', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_TIMEOUT);
9
+ }
10
+ }
11
+
12
+ exports.assertValidTimeout = assertValidTimeout;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var assertNonBlankString = require('./assertNonBlankString.cjs');
5
+
6
+ function assertValidUrl(url) {
7
+ assertNonBlankString.assertNonBlankString(url, 'URL must be a non-empty string', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_URL);
8
+ }
9
+
10
+ exports.assertValidUrl = assertValidUrl;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+
6
+ /** Validates a custom HTTP response status predicate. */
7
+ function assertValidValidateStatus(value) {
8
+ if (typeof value !== 'function') {
9
+ throw new RequestBuilderError.RequestBuilderError('validateStatus must be a function', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_VALIDATE_STATUS);
10
+ }
11
+ }
12
+
13
+ exports.assertValidValidateStatus = assertValidValidateStatus;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+
6
+ function assertValidWithCredentials(withCredentials) {
7
+ if (typeof withCredentials !== 'boolean') {
8
+ throw new RequestBuilderError.RequestBuilderError('withCredentials must be a boolean', requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_WITH_CREDENTIALS);
9
+ }
10
+ }
11
+
12
+ exports.assertValidWithCredentials = assertValidWithCredentials;
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var requestBuilderErrorCodes = require('../constants/requestBuilderErrorCodes.cjs');
4
+ var RequestBuilderError = require('../errors/RequestBuilderError.cjs');
5
+ var assertValidResponseType = require('./assertValidResponseType.cjs');
6
+ var assertValidTimeout = require('./assertValidTimeout.cjs');
7
+ var assertValidWithCredentials = require('./assertValidWithCredentials.cjs');
8
+ var isRecord = require('./isRecord.cjs');
9
+
10
+ function throwInvalidOptions(message) {
11
+ throw new RequestBuilderError.RequestBuilderError(message, requestBuilderErrorCodes.REQUEST_BUILDER_ERROR_CODES.INVALID_XHR_ADAPTER_OPTIONS);
12
+ }
13
+ /** Validates options passed to the XMLHttpRequest adapter constructor. */
14
+ function assertValidXhrAdapterOptions(options) {
15
+ if (!isRecord.isRecord(options)) {
16
+ throwInvalidOptions('XHR adapter options must be an object');
17
+ }
18
+ const { mimeType, responseType, timeout, withCredentials, onDownloadProgress, onUploadProgress } = options;
19
+ if (mimeType !== undefined && (typeof mimeType !== 'string' || mimeType.trim().length === 0)) {
20
+ throwInvalidOptions('mimeType must be a non-empty string');
21
+ }
22
+ if (responseType !== undefined) {
23
+ assertValidResponseType.assertValidResponseType(responseType);
24
+ }
25
+ if (timeout !== undefined) {
26
+ assertValidTimeout.assertValidTimeout(timeout);
27
+ }
28
+ if (withCredentials !== undefined) {
29
+ assertValidWithCredentials.assertValidWithCredentials(withCredentials);
30
+ }
31
+ if (onDownloadProgress !== undefined && typeof onDownloadProgress !== 'function') {
32
+ throwInvalidOptions('onDownloadProgress must be a function');
33
+ }
34
+ if (onUploadProgress !== undefined && typeof onUploadProgress !== 'function') {
35
+ throwInvalidOptions('onUploadProgress must be a function');
36
+ }
37
+ }
38
+
39
+ exports.assertValidXhrAdapterOptions = assertValidXhrAdapterOptions;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ const HEADER_VALUE_LINE_BREAK_PATTERN = /[\r\n]/;
4
+
5
+ exports.HEADER_VALUE_LINE_BREAK_PATTERN = HEADER_VALUE_LINE_BREAK_PATTERN;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ function isRecord(value) {
4
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
5
+ return false;
6
+ }
7
+ const prototype = Object.getPrototypeOf(value);
8
+ return prototype === Object.prototype || prototype === null;
9
+ }
10
+
11
+ exports.isRecord = isRecord;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ const HTTP_METHODS = {
4
+ GET: 'GET',
5
+ HEAD: 'HEAD',
6
+ POST: 'POST',
7
+ PUT: 'PUT',
8
+ DELETE: 'DELETE',
9
+ OPTIONS: 'OPTIONS',
10
+ PATCH: 'PATCH'
11
+ };
12
+
13
+ exports.HTTP_METHODS = HTTP_METHODS;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const HTTP_RESPONSE_TYPES = {
4
+ ARRAY_BUFFER: 'arrayBuffer',
5
+ BLOB: 'blob',
6
+ JSON: 'json',
7
+ STREAM: 'stream',
8
+ TEXT: 'text'
9
+ };
10
+
11
+ exports.HTTP_RESPONSE_TYPES = HTTP_RESPONSE_TYPES;
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ const HTTP_STATUS_CODES = {
4
+ CONTINUE: 100,
5
+ SWITCHING_PROTOCOLS: 101,
6
+ PROCESSING: 102,
7
+ EARLY_HINTS: 103,
8
+ OK: 200,
9
+ CREATED: 201,
10
+ ACCEPTED: 202,
11
+ NON_AUTHORITATIVE_INFORMATION: 203,
12
+ NO_CONTENT: 204,
13
+ RESET_CONTENT: 205,
14
+ PARTIAL_CONTENT: 206,
15
+ MULTI_STATUS: 207,
16
+ ALREADY_REPORTED: 208,
17
+ IM_USED: 226,
18
+ MULTIPLE_CHOICES: 300,
19
+ MOVED_PERMANENTLY: 301,
20
+ FOUND: 302,
21
+ SEE_OTHER: 303,
22
+ NOT_MODIFIED: 304,
23
+ USE_PROXY: 305,
24
+ TEMPORARY_REDIRECT: 307,
25
+ PERMANENT_REDIRECT: 308,
26
+ BAD_REQUEST: 400,
27
+ UNAUTHORIZED: 401,
28
+ PAYMENT_REQUIRED: 402,
29
+ FORBIDDEN: 403,
30
+ NOT_FOUND: 404,
31
+ METHOD_NOT_ALLOWED: 405,
32
+ NOT_ACCEPTABLE: 406,
33
+ PROXY_AUTHENTICATION_REQUIRED: 407,
34
+ REQUEST_TIMEOUT: 408,
35
+ CONFLICT: 409,
36
+ GONE: 410,
37
+ LENGTH_REQUIRED: 411,
38
+ PRECONDITION_FAILED: 412,
39
+ PAYLOAD_TOO_LARGE: 413,
40
+ URI_TOO_LONG: 414,
41
+ UNSUPPORTED_MEDIA_TYPE: 415,
42
+ RANGE_NOT_SATISFIABLE: 416,
43
+ EXPECTATION_FAILED: 417,
44
+ IM_A_TEAPOT: 418,
45
+ MISDIRECTED_REQUEST: 421,
46
+ UNPROCESSABLE_ENTITY: 422,
47
+ LOCKED: 423,
48
+ FAILED_DEPENDENCY: 424,
49
+ TOO_EARLY: 425,
50
+ UPGRADE_REQUIRED: 426,
51
+ PRECONDITION_REQUIRED: 428,
52
+ TOO_MANY_REQUESTS: 429,
53
+ REQUEST_HEADER_FIELDS_TOO_LARGE: 431,
54
+ UNAVAILABLE_FOR_LEGAL_REASONS: 451,
55
+ INTERNAL_SERVER_ERROR: 500,
56
+ NOT_IMPLEMENTED: 501,
57
+ BAD_GATEWAY: 502,
58
+ SERVICE_UNAVAILABLE: 503,
59
+ GATEWAY_TIMEOUT: 504,
60
+ HTTP_VERSION_NOT_SUPPORTED: 505,
61
+ VARIANT_ALSO_NEGOTIATES: 506,
62
+ INSUFFICIENT_STORAGE: 507,
63
+ LOOP_DETECTED: 508,
64
+ NOT_EXTENDED: 510,
65
+ NETWORK_AUTHENTICATION_REQUIRED: 511
66
+ };
67
+
68
+ exports.HTTP_STATUS_CODES = HTTP_STATUS_CODES;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const REQUEST_BUILDER_ERROR_CODES = {
4
+ INVALID_BASE_URL: 'INVALID_BASE_URL',
5
+ INVALID_BEARER_TOKEN: 'INVALID_BEARER_TOKEN',
6
+ INVALID_ADAPTER: 'INVALID_ADAPTER',
7
+ INVALID_BODY: 'INVALID_BODY',
8
+ INVALID_CONFIG: 'INVALID_CONFIG',
9
+ INVALID_EXECUTOR: 'INVALID_EXECUTOR',
10
+ INVALID_FETCH_ADAPTER_OPTIONS: 'INVALID_FETCH_ADAPTER_OPTIONS',
11
+ INVALID_HEADER: 'INVALID_HEADER',
12
+ INVALID_HEADERS: 'INVALID_HEADERS',
13
+ INVALID_HOOK: 'INVALID_HOOK',
14
+ INVALID_METHOD: 'INVALID_METHOD',
15
+ INVALID_PARAM: 'INVALID_PARAM',
16
+ INVALID_PARAMS: 'INVALID_PARAMS',
17
+ INVALID_RESPONSE_TYPE: 'INVALID_RESPONSE_TYPE',
18
+ INVALID_SIGNAL: 'INVALID_SIGNAL',
19
+ INVALID_TIMEOUT: 'INVALID_TIMEOUT',
20
+ INVALID_URL: 'INVALID_URL',
21
+ INVALID_VALIDATE_STATUS: 'INVALID_VALIDATE_STATUS',
22
+ INVALID_WITH_CREDENTIALS: 'INVALID_WITH_CREDENTIALS',
23
+ INVALID_XHR_ADAPTER_OPTIONS: 'INVALID_XHR_ADAPTER_OPTIONS'
24
+ };
25
+
26
+ exports.REQUEST_BUILDER_ERROR_CODES = REQUEST_BUILDER_ERROR_CODES;