@naturalcycles/js-lib 14.252.0 → 14.252.1
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/error/assert.d.ts +2 -2
- package/dist/error/assert.js +6 -0
- package/dist/http/fetcher.js +19 -10
- package/dist-esm/error/assert.js +6 -1
- package/dist-esm/http/fetcher.js +19 -10
- package/package.json +1 -1
- package/src/error/assert.ts +21 -2
- package/src/http/fetcher.ts +17 -10
package/dist/error/assert.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Class } from '..';
|
|
1
|
+
import { BackendErrorResponseObject, Class, ErrorData, ErrorObject } from '..';
|
|
3
2
|
/**
|
|
4
3
|
* Evaluates the `condition` (casts it to Boolean).
|
|
5
4
|
* Expects it to be truthy, otherwise throws AppError.
|
|
@@ -40,6 +39,7 @@ export declare function _assertIsError<ERR extends Error = Error>(err: any, erro
|
|
|
40
39
|
*/
|
|
41
40
|
export declare function _assertErrorClassOrRethrow<ERR extends Error>(err: any, errorClass: Class<ERR>): asserts err is ERR;
|
|
42
41
|
export declare function _assertIsErrorObject<DATA_TYPE extends ErrorData = ErrorData>(obj: any): asserts obj is ErrorObject<DATA_TYPE>;
|
|
42
|
+
export declare function _assertIsBackendErrorResponseObject<DATA_TYPE extends ErrorData = ErrorData>(obj: any): asserts obj is BackendErrorResponseObject<DATA_TYPE>;
|
|
43
43
|
export declare function _assertIsString(v: any, message?: string): asserts v is string;
|
|
44
44
|
export declare function _assertIsNumber(v: any, message?: string): asserts v is number;
|
|
45
45
|
export declare function _assertTypeOf<T>(v: any, expectedType: string, message?: string): asserts v is T;
|
package/dist/error/assert.js
CHANGED
|
@@ -6,6 +6,7 @@ exports._assertDeepEquals = _assertDeepEquals;
|
|
|
6
6
|
exports._assertIsError = _assertIsError;
|
|
7
7
|
exports._assertErrorClassOrRethrow = _assertErrorClassOrRethrow;
|
|
8
8
|
exports._assertIsErrorObject = _assertIsErrorObject;
|
|
9
|
+
exports._assertIsBackendErrorResponseObject = _assertIsBackendErrorResponseObject;
|
|
9
10
|
exports._assertIsString = _assertIsString;
|
|
10
11
|
exports._assertIsNumber = _assertIsNumber;
|
|
11
12
|
exports._assertTypeOf = _assertTypeOf;
|
|
@@ -89,6 +90,11 @@ function _assertIsErrorObject(obj) {
|
|
|
89
90
|
throw new __1.AssertionError(`Expected to be ErrorObject, actual typeof: ${typeof obj}`);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
function _assertIsBackendErrorResponseObject(obj) {
|
|
94
|
+
if (!(0, __1._isBackendErrorResponseObject)(obj)) {
|
|
95
|
+
throw new __1.AssertionError(`Expected to be BackendErrorResponseObject, actual typeof: ${typeof obj}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
92
98
|
function _assertIsString(v, message) {
|
|
93
99
|
_assertTypeOf(v, 'string', message);
|
|
94
100
|
}
|
package/dist/http/fetcher.js
CHANGED
|
@@ -320,23 +320,32 @@ class Fetcher {
|
|
|
320
320
|
}
|
|
321
321
|
async onNotOkResponse(res) {
|
|
322
322
|
let cause;
|
|
323
|
+
// Try to fetch body and attach to res.body
|
|
324
|
+
// (but don't fail if it doesn't work)
|
|
325
|
+
if (!res.body && res.fetchResponse) {
|
|
326
|
+
try {
|
|
327
|
+
res.body = (0, json_util_1._jsonParseIfPossible)(await res.fetchResponse.text());
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// ignore body fetching/parsing errors at this point
|
|
331
|
+
}
|
|
332
|
+
}
|
|
323
333
|
if (res.err) {
|
|
324
334
|
// This is only possible on JSON.parse error, or CORS error,
|
|
325
335
|
// or `unexpected redirect`
|
|
326
336
|
// This check should go first, to avoid calling .text() twice (which will fail)
|
|
327
337
|
cause = (0, error_util_1._errorLikeToErrorObject)(res.err);
|
|
328
338
|
}
|
|
329
|
-
else if (res.
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
339
|
+
else if (res.body) {
|
|
340
|
+
cause = (0, error_util_1._anyToErrorObject)(res.body);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
cause = {
|
|
344
|
+
name: 'Error',
|
|
345
|
+
message: 'Fetch failed',
|
|
346
|
+
data: {},
|
|
347
|
+
};
|
|
334
348
|
}
|
|
335
|
-
cause ||= {
|
|
336
|
-
name: 'Error',
|
|
337
|
-
message: 'Fetch failed',
|
|
338
|
-
data: {},
|
|
339
|
-
};
|
|
340
349
|
let responseStatusCode = res.fetchResponse?.status || 0;
|
|
341
350
|
if (res.statusFamily === 2) {
|
|
342
351
|
// important to reset responseStatusCode to 0 in this case, as status 2xx can be misleading
|
package/dist-esm/error/assert.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _deepEquals, _isErrorObject, _stringify, AssertionError } from '..';
|
|
1
|
+
import { _deepEquals, _isBackendErrorResponseObject, _isErrorObject, _stringify, AssertionError, } from '..';
|
|
2
2
|
/**
|
|
3
3
|
* Evaluates the `condition` (casts it to Boolean).
|
|
4
4
|
* Expects it to be truthy, otherwise throws AppError.
|
|
@@ -78,6 +78,11 @@ export function _assertIsErrorObject(obj) {
|
|
|
78
78
|
throw new AssertionError(`Expected to be ErrorObject, actual typeof: ${typeof obj}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
export function _assertIsBackendErrorResponseObject(obj) {
|
|
82
|
+
if (!_isBackendErrorResponseObject(obj)) {
|
|
83
|
+
throw new AssertionError(`Expected to be BackendErrorResponseObject, actual typeof: ${typeof obj}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
81
86
|
export function _assertIsString(v, message) {
|
|
82
87
|
_assertTypeOf(v, 'string', message);
|
|
83
88
|
}
|
package/dist-esm/http/fetcher.js
CHANGED
|
@@ -312,23 +312,32 @@ export class Fetcher {
|
|
|
312
312
|
}
|
|
313
313
|
async onNotOkResponse(res) {
|
|
314
314
|
let cause;
|
|
315
|
+
// Try to fetch body and attach to res.body
|
|
316
|
+
// (but don't fail if it doesn't work)
|
|
317
|
+
if (!res.body && res.fetchResponse) {
|
|
318
|
+
try {
|
|
319
|
+
res.body = _jsonParseIfPossible(await res.fetchResponse.text());
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// ignore body fetching/parsing errors at this point
|
|
323
|
+
}
|
|
324
|
+
}
|
|
315
325
|
if (res.err) {
|
|
316
326
|
// This is only possible on JSON.parse error, or CORS error,
|
|
317
327
|
// or `unexpected redirect`
|
|
318
328
|
// This check should go first, to avoid calling .text() twice (which will fail)
|
|
319
329
|
cause = _errorLikeToErrorObject(res.err);
|
|
320
330
|
}
|
|
321
|
-
else if (res.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
331
|
+
else if (res.body) {
|
|
332
|
+
cause = _anyToErrorObject(res.body);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
cause = {
|
|
336
|
+
name: 'Error',
|
|
337
|
+
message: 'Fetch failed',
|
|
338
|
+
data: {},
|
|
339
|
+
};
|
|
326
340
|
}
|
|
327
|
-
cause || (cause = {
|
|
328
|
-
name: 'Error',
|
|
329
|
-
message: 'Fetch failed',
|
|
330
|
-
data: {},
|
|
331
|
-
});
|
|
332
341
|
let responseStatusCode = res.fetchResponse?.status || 0;
|
|
333
342
|
if (res.statusFamily === 2) {
|
|
334
343
|
// important to reset responseStatusCode to 0 in this case, as status 2xx can be misleading
|
package/package.json
CHANGED
package/src/error/assert.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
_deepEquals,
|
|
3
|
+
_isBackendErrorResponseObject,
|
|
4
|
+
_isErrorObject,
|
|
5
|
+
_stringify,
|
|
6
|
+
AssertionError,
|
|
7
|
+
BackendErrorResponseObject,
|
|
8
|
+
Class,
|
|
9
|
+
ErrorData,
|
|
10
|
+
ErrorObject,
|
|
11
|
+
} from '..'
|
|
3
12
|
|
|
4
13
|
/**
|
|
5
14
|
* Evaluates the `condition` (casts it to Boolean).
|
|
@@ -113,6 +122,16 @@ export function _assertIsErrorObject<DATA_TYPE extends ErrorData = ErrorData>(
|
|
|
113
122
|
}
|
|
114
123
|
}
|
|
115
124
|
|
|
125
|
+
export function _assertIsBackendErrorResponseObject<DATA_TYPE extends ErrorData = ErrorData>(
|
|
126
|
+
obj: any,
|
|
127
|
+
): asserts obj is BackendErrorResponseObject<DATA_TYPE> {
|
|
128
|
+
if (!_isBackendErrorResponseObject(obj)) {
|
|
129
|
+
throw new AssertionError(
|
|
130
|
+
`Expected to be BackendErrorResponseObject, actual typeof: ${typeof obj}`,
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
116
135
|
export function _assertIsString(v: any, message?: string): asserts v is string {
|
|
117
136
|
_assertTypeOf<string>(v, 'string', message)
|
|
118
137
|
}
|
package/src/http/fetcher.ts
CHANGED
|
@@ -416,24 +416,31 @@ export class Fetcher {
|
|
|
416
416
|
private async onNotOkResponse(res: FetcherResponse): Promise<void> {
|
|
417
417
|
let cause: ErrorObject
|
|
418
418
|
|
|
419
|
+
// Try to fetch body and attach to res.body
|
|
420
|
+
// (but don't fail if it doesn't work)
|
|
421
|
+
if (!res.body && res.fetchResponse) {
|
|
422
|
+
try {
|
|
423
|
+
res.body = _jsonParseIfPossible(await res.fetchResponse.text())
|
|
424
|
+
} catch {
|
|
425
|
+
// ignore body fetching/parsing errors at this point
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
419
429
|
if (res.err) {
|
|
420
430
|
// This is only possible on JSON.parse error, or CORS error,
|
|
421
431
|
// or `unexpected redirect`
|
|
422
432
|
// This check should go first, to avoid calling .text() twice (which will fail)
|
|
423
433
|
cause = _errorLikeToErrorObject(res.err)
|
|
424
|
-
} else if (res.
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
434
|
+
} else if (res.body) {
|
|
435
|
+
cause = _anyToErrorObject(res.body)
|
|
436
|
+
} else {
|
|
437
|
+
cause = {
|
|
438
|
+
name: 'Error',
|
|
439
|
+
message: 'Fetch failed',
|
|
440
|
+
data: {},
|
|
428
441
|
}
|
|
429
442
|
}
|
|
430
443
|
|
|
431
|
-
cause ||= {
|
|
432
|
-
name: 'Error',
|
|
433
|
-
message: 'Fetch failed',
|
|
434
|
-
data: {},
|
|
435
|
-
}
|
|
436
|
-
|
|
437
444
|
let responseStatusCode = res.fetchResponse?.status || 0
|
|
438
445
|
if (res.statusFamily === 2) {
|
|
439
446
|
// important to reset responseStatusCode to 0 in this case, as status 2xx can be misleading
|