@naturalcycles/js-lib 14.276.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cfg/frontend/tsconfig.json +3 -3
- package/dist/abort.js +1 -4
- package/dist/array/array.util.d.ts +1 -1
- package/dist/array/array.util.js +47 -88
- package/dist/array/range.d.ts +2 -2
- package/dist/array/range.js +7 -12
- package/dist/bot.js +6 -10
- package/dist/browser/adminService.d.ts +1 -1
- package/dist/browser/adminService.js +10 -14
- package/dist/browser/analytics.util.js +10 -15
- package/dist/browser/i18n/fetchTranslationLoader.d.ts +3 -3
- package/dist/browser/i18n/fetchTranslationLoader.js +1 -5
- package/dist/browser/i18n/translation.service.d.ts +1 -1
- package/dist/browser/i18n/translation.service.js +5 -10
- package/dist/browser/imageFitter.js +1 -5
- package/dist/browser/script.util.js +8 -12
- package/dist/browser/topbar.js +7 -10
- package/dist/datetime/dateInterval.d.ts +2 -2
- package/dist/datetime/dateInterval.js +7 -11
- package/dist/datetime/localDate.d.ts +3 -3
- package/dist/datetime/localDate.js +40 -44
- package/dist/datetime/localTime.d.ts +3 -3
- package/dist/datetime/localTime.js +36 -40
- package/dist/datetime/timeInterval.d.ts +2 -2
- package/dist/datetime/timeInterval.js +6 -10
- package/dist/datetime/wallTime.d.ts +3 -3
- package/dist/datetime/wallTime.js +5 -9
- package/dist/decorators/asyncMemo.decorator.d.ts +3 -3
- package/dist/decorators/asyncMemo.decorator.js +12 -17
- package/dist/decorators/createPromiseDecorator.js +3 -6
- package/dist/decorators/debounce.d.ts +1 -1
- package/dist/decorators/debounce.decorator.d.ts +1 -1
- package/dist/decorators/debounce.decorator.js +5 -9
- package/dist/decorators/debounce.js +2 -6
- package/dist/decorators/decorator.util.d.ts +1 -1
- package/dist/decorators/decorator.util.js +3 -8
- package/dist/decorators/logMethod.decorator.d.ts +1 -1
- package/dist/decorators/logMethod.decorator.js +11 -14
- package/dist/decorators/memo.decorator.d.ts +3 -3
- package/dist/decorators/memo.decorator.js +11 -16
- package/dist/decorators/memo.util.d.ts +2 -2
- package/dist/decorators/memo.util.js +11 -17
- package/dist/decorators/memoFn.d.ts +3 -3
- package/dist/decorators/memoFn.js +3 -6
- package/dist/decorators/memoFnAsync.d.ts +3 -3
- package/dist/decorators/memoFnAsync.js +5 -8
- package/dist/decorators/memoSimple.decorator.d.ts +1 -1
- package/dist/decorators/memoSimple.decorator.js +6 -10
- package/dist/decorators/retry.decorator.d.ts +1 -1
- package/dist/decorators/retry.decorator.js +3 -6
- package/dist/decorators/swarmSafe.decorator.js +3 -7
- package/dist/decorators/timeout.decorator.d.ts +1 -1
- package/dist/decorators/timeout.decorator.js +7 -10
- package/dist/define.d.ts +1 -1
- package/dist/define.js +11 -19
- package/dist/deviceIdService.js +7 -11
- package/dist/enum.util.d.ts +1 -1
- package/dist/enum.util.js +20 -42
- package/dist/env/buildInfo.d.ts +1 -1
- package/dist/env/buildInfo.js +3 -6
- package/dist/env.js +2 -6
- package/dist/error/assert.d.ts +3 -3
- package/dist/error/assert.js +30 -44
- package/dist/error/error.model.d.ts +2 -2
- package/dist/error/error.model.js +1 -2
- package/dist/error/error.util.d.ts +1 -1
- package/dist/error/error.util.js +25 -44
- package/dist/error/errorMode.js +2 -5
- package/dist/error/try.d.ts +2 -2
- package/dist/error/try.js +15 -23
- package/dist/error/tryCatch.d.ts +2 -2
- package/dist/error/tryCatch.js +6 -11
- package/dist/form.util.d.ts +1 -1
- package/dist/form.util.js +2 -6
- package/dist/http/fetcher.d.ts +3 -3
- package/dist/http/fetcher.js +48 -53
- package/dist/http/fetcher.model.d.ts +5 -5
- package/dist/http/fetcher.model.js +1 -2
- package/dist/http/http.model.js +1 -4
- package/dist/index.d.ts +96 -96
- package/dist/index.js +96 -99
- package/dist/is.util.d.ts +2 -2
- package/dist/is.util.js +12 -27
- package/dist/iter/asyncIterable2.d.ts +3 -3
- package/dist/iter/asyncIterable2.js +8 -12
- package/dist/iter/iterable2.d.ts +2 -2
- package/dist/iter/iterable2.js +8 -12
- package/dist/json-schema/from-data/generateJsonSchemaFromData.d.ts +1 -1
- package/dist/json-schema/from-data/generateJsonSchemaFromData.js +4 -7
- package/dist/json-schema/jsonSchema.cnst.d.ts +1 -1
- package/dist/json-schema/jsonSchema.cnst.js +1 -4
- package/dist/json-schema/jsonSchema.model.d.ts +1 -1
- package/dist/json-schema/jsonSchema.model.js +1 -2
- package/dist/json-schema/jsonSchema.util.d.ts +2 -2
- package/dist/json-schema/jsonSchema.util.js +5 -8
- package/dist/json-schema/jsonSchemaBuilder.d.ts +2 -2
- package/dist/json-schema/jsonSchemaBuilder.js +16 -25
- package/dist/json-schema/jsonSchemas.d.ts +2 -2
- package/dist/json-schema/jsonSchemas.js +5 -8
- package/dist/log/commonLogger.js +14 -21
- package/dist/math/accumulatingAverage.js +1 -5
- package/dist/math/math.util.js +11 -19
- package/dist/math/sma.js +1 -5
- package/dist/math/stack.util.js +11 -16
- package/dist/nanoid.js +2 -6
- package/dist/number/createDeterministicRandom.js +1 -4
- package/dist/number/number.util.d.ts +1 -1
- package/dist/number/number.util.js +9 -20
- package/dist/object/deepEquals.js +3 -8
- package/dist/object/map2.js +1 -5
- package/dist/object/object.util.d.ts +2 -2
- package/dist/object/object.util.js +40 -70
- package/dist/object/set2.js +1 -5
- package/dist/object/sortObject.d.ts +1 -1
- package/dist/object/sortObject.js +1 -4
- package/dist/object/sortObjectDeep.js +1 -4
- package/dist/polyfill.js +1 -4
- package/dist/promise/abortable.d.ts +1 -1
- package/dist/promise/abortable.js +2 -7
- package/dist/promise/pDefer.js +1 -4
- package/dist/promise/pDelay.d.ts +2 -2
- package/dist/promise/pDelay.js +4 -8
- package/dist/promise/pFilter.d.ts +1 -1
- package/dist/promise/pFilter.js +1 -4
- package/dist/promise/pHang.js +1 -4
- package/dist/promise/pMap.d.ts +2 -2
- package/dist/promise/pMap.js +17 -20
- package/dist/promise/pProps.js +1 -4
- package/dist/promise/pQueue.d.ts +2 -2
- package/dist/promise/pQueue.js +7 -11
- package/dist/promise/pRetry.d.ts +1 -1
- package/dist/promise/pRetry.js +8 -12
- package/dist/promise/pState.js +1 -4
- package/dist/promise/pTimeout.d.ts +3 -3
- package/dist/promise/pTimeout.js +7 -11
- package/dist/semver.d.ts +1 -1
- package/dist/semver.js +13 -18
- package/dist/string/case.js +9 -14
- package/dist/string/escape.js +2 -6
- package/dist/string/hash.util.d.ts +1 -1
- package/dist/string/hash.util.js +4 -10
- package/dist/string/json.util.d.ts +1 -1
- package/dist/string/json.util.js +5 -10
- package/dist/string/leven.js +1 -4
- package/dist/string/lodash/unicodeWords.js +1 -4
- package/dist/string/lodash/words.js +3 -6
- package/dist/string/pupa.d.ts +1 -1
- package/dist/string/pupa.js +4 -9
- package/dist/string/readingTime.d.ts +1 -1
- package/dist/string/readingTime.js +1 -4
- package/dist/string/regex.js +1 -4
- package/dist/string/safeJsonStringify.d.ts +1 -1
- package/dist/string/safeJsonStringify.js +1 -4
- package/dist/string/slugify.js +1 -4
- package/dist/string/string.util.js +15 -32
- package/dist/string/stringify.d.ts +1 -1
- package/dist/string/stringify.js +10 -14
- package/dist/string/url.util.d.ts +1 -1
- package/dist/string/url.util.js +2 -6
- package/dist/time/time.util.d.ts +1 -1
- package/dist/time/time.util.js +3 -8
- package/dist/typeFest.js +1 -2
- package/dist/types.d.ts +7 -3
- package/dist/types.js +21 -23
- package/dist/unit/size.util.js +5 -12
- package/dist/web.d.ts +1 -1
- package/dist/web.js +1 -5
- package/dist/zod/index.d.ts +2 -2
- package/dist/zod/index.js +4 -10
- package/dist/zod/zod.shared.schemas.js +36 -39
- package/dist/zod/zod.util.js +7 -14
- package/package.json +7 -8
- package/src/array/array.util.ts +3 -3
- package/src/array/range.ts +2 -2
- package/src/bot.ts +1 -1
- package/src/browser/adminService.ts +4 -4
- package/src/browser/analytics.util.ts +1 -1
- package/src/browser/i18n/fetchTranslationLoader.ts +3 -3
- package/src/browser/i18n/translation.service.ts +2 -2
- package/src/browser/script.util.ts +2 -2
- package/src/datetime/dateInterval.ts +3 -3
- package/src/datetime/localDate.ts +5 -5
- package/src/datetime/localTime.ts +6 -6
- package/src/datetime/timeInterval.ts +3 -3
- package/src/datetime/wallTime.ts +4 -4
- package/src/decorators/asyncMemo.decorator.ts +7 -7
- package/src/decorators/createPromiseDecorator.ts +1 -1
- package/src/decorators/debounce.decorator.ts +2 -2
- package/src/decorators/debounce.ts +1 -1
- package/src/decorators/decorator.util.ts +1 -1
- package/src/decorators/logMethod.decorator.ts +4 -4
- package/src/decorators/memo.decorator.ts +7 -7
- package/src/decorators/memo.util.ts +4 -4
- package/src/decorators/memoFn.ts +4 -4
- package/src/decorators/memoFnAsync.ts +5 -5
- package/src/decorators/memoSimple.decorator.ts +4 -4
- package/src/decorators/retry.decorator.ts +2 -2
- package/src/decorators/swarmSafe.decorator.ts +2 -2
- package/src/decorators/timeout.decorator.ts +4 -4
- package/src/define.ts +3 -3
- package/src/deviceIdService.ts +3 -3
- package/src/enum.util.ts +1 -1
- package/src/env/buildInfo.ts +2 -2
- package/src/error/assert.ts +7 -7
- package/src/error/error.model.ts +2 -2
- package/src/error/error.util.ts +5 -5
- package/src/error/try.ts +5 -5
- package/src/error/tryCatch.ts +3 -3
- package/src/form.util.ts +1 -1
- package/src/http/fetcher.model.ts +5 -5
- package/src/http/fetcher.ts +20 -15
- package/src/index.ts +96 -96
- package/src/is.util.ts +2 -2
- package/src/iter/asyncIterable2.ts +3 -3
- package/src/iter/iterable2.ts +2 -2
- package/src/json-schema/from-data/generateJsonSchemaFromData.ts +2 -2
- package/src/json-schema/jsonSchema.cnst.ts +1 -1
- package/src/json-schema/jsonSchema.model.ts +1 -1
- package/src/json-schema/jsonSchema.util.ts +4 -4
- package/src/json-schema/jsonSchemaBuilder.ts +5 -5
- package/src/json-schema/jsonSchemas.ts +2 -2
- package/src/math/math.util.ts +2 -2
- package/src/math/stack.util.ts +1 -1
- package/src/number/number.util.ts +1 -1
- package/src/object/object.util.ts +3 -3
- package/src/object/sortObject.ts +1 -1
- package/src/promise/abortable.ts +1 -1
- package/src/promise/pDelay.ts +3 -3
- package/src/promise/pFilter.ts +1 -1
- package/src/promise/pMap.ts +2 -2
- package/src/promise/pQueue.ts +4 -4
- package/src/promise/pRetry.ts +2 -2
- package/src/promise/pTimeout.ts +4 -4
- package/src/semver.ts +3 -3
- package/src/string/case.ts +2 -2
- package/src/string/hash.util.ts +1 -1
- package/src/string/json.util.ts +2 -2
- package/src/string/lodash/words.ts +1 -1
- package/src/string/pupa.ts +2 -2
- package/src/string/readingTime.ts +1 -1
- package/src/string/safeJsonStringify.ts +1 -1
- package/src/string/stringify.ts +4 -4
- package/src/string/url.util.ts +1 -1
- package/src/time/time.util.ts +1 -1
- package/src/types.ts +15 -3
- package/src/web.ts +1 -1
- package/src/zod/index.ts +2 -2
- package/src/zod/zod.util.ts +1 -1
- package/dist-esm/abort.js +0 -12
- package/dist-esm/array/array.util.js +0 -458
- package/dist-esm/array/range.js +0 -34
- package/dist-esm/bot.js +0 -130
- package/dist-esm/browser/adminService.js +0 -94
- package/dist-esm/browser/analytics.util.js +0 -54
- package/dist-esm/browser/i18n/fetchTranslationLoader.js +0 -13
- package/dist-esm/browser/i18n/translation.service.js +0 -56
- package/dist-esm/browser/imageFitter.js +0 -65
- package/dist-esm/browser/script.util.js +0 -46
- package/dist-esm/browser/topbar.js +0 -135
- package/dist-esm/datetime/dateInterval.js +0 -80
- package/dist-esm/datetime/localDate.js +0 -719
- package/dist-esm/datetime/localTime.js +0 -996
- package/dist-esm/datetime/timeInterval.js +0 -88
- package/dist-esm/datetime/wallTime.js +0 -70
- package/dist-esm/decorators/asyncMemo.decorator.js +0 -111
- package/dist-esm/decorators/createPromiseDecorator.js +0 -82
- package/dist-esm/decorators/debounce.decorator.js +0 -17
- package/dist-esm/decorators/debounce.js +0 -114
- package/dist-esm/decorators/decorator.util.js +0 -31
- package/dist-esm/decorators/logMethod.decorator.js +0 -85
- package/dist-esm/decorators/memo.decorator.js +0 -80
- package/dist-esm/decorators/memo.util.js +0 -97
- package/dist-esm/decorators/memoFn.js +0 -29
- package/dist-esm/decorators/memoFnAsync.js +0 -35
- package/dist-esm/decorators/memoSimple.decorator.js +0 -55
- package/dist-esm/decorators/retry.decorator.js +0 -9
- package/dist-esm/decorators/swarmSafe.decorator.js +0 -38
- package/dist-esm/decorators/timeout.decorator.js +0 -19
- package/dist-esm/define.js +0 -109
- package/dist-esm/deviceIdService.js +0 -105
- package/dist-esm/enum.util.js +0 -157
- package/dist-esm/env/buildInfo.js +0 -19
- package/dist-esm/env.js +0 -19
- package/dist-esm/error/assert.js +0 -122
- package/dist-esm/error/error.model.js +0 -1
- package/dist-esm/error/error.util.js +0 -337
- package/dist-esm/error/errorMode.js +0 -20
- package/dist-esm/error/try.js +0 -105
- package/dist-esm/error/tryCatch.js +0 -41
- package/dist-esm/form.util.js +0 -16
- package/dist-esm/http/fetcher.js +0 -704
- package/dist-esm/http/fetcher.model.js +0 -3
- package/dist-esm/http/http.model.js +0 -1
- package/dist-esm/index.js +0 -96
- package/dist-esm/is.util.js +0 -70
- package/dist-esm/iter/asyncIterable2.js +0 -103
- package/dist-esm/iter/iterable2.js +0 -87
- package/dist-esm/json-schema/from-data/generateJsonSchemaFromData.js +0 -86
- package/dist-esm/json-schema/jsonSchema.cnst.js +0 -38
- package/dist-esm/json-schema/jsonSchema.model.js +0 -1
- package/dist-esm/json-schema/jsonSchema.util.js +0 -27
- package/dist-esm/json-schema/jsonSchemaBuilder.js +0 -352
- package/dist-esm/json-schema/jsonSchemas.js +0 -6
- package/dist-esm/log/commonLogger.js +0 -78
- package/dist-esm/math/accumulatingAverage.js +0 -32
- package/dist-esm/math/math.util.js +0 -85
- package/dist-esm/math/sma.js +0 -43
- package/dist-esm/math/stack.util.js +0 -82
- package/dist-esm/nanoid.js +0 -57
- package/dist-esm/number/createDeterministicRandom.js +0 -18
- package/dist-esm/number/number.util.js +0 -109
- package/dist-esm/object/deepEquals.js +0 -170
- package/dist-esm/object/map2.js +0 -21
- package/dist-esm/object/object.util.js +0 -435
- package/dist-esm/object/set2.js +0 -15
- package/dist-esm/object/sortObject.js +0 -21
- package/dist-esm/object/sortObjectDeep.js +0 -17
- package/dist-esm/polyfill.js +0 -6
- package/dist-esm/promise/abortable.js +0 -31
- package/dist-esm/promise/pDefer.js +0 -17
- package/dist-esm/promise/pDelay.js +0 -37
- package/dist-esm/promise/pFilter.js +0 -5
- package/dist-esm/promise/pHang.js +0 -6
- package/dist-esm/promise/pMap.js +0 -174
- package/dist-esm/promise/pProps.js +0 -20
- package/dist-esm/promise/pQueue.js +0 -101
- package/dist-esm/promise/pRetry.js +0 -64
- package/dist-esm/promise/pState.js +0 -14
- package/dist-esm/promise/pTimeout.js +0 -64
- package/dist-esm/semver.js +0 -149
- package/dist-esm/string/case.js +0 -24
- package/dist-esm/string/escape.js +0 -49
- package/dist-esm/string/hash.util.js +0 -67
- package/dist-esm/string/json.util.js +0 -46
- package/dist-esm/string/leven.js +0 -77
- package/dist-esm/string/lodash/unicodeWords.js +0 -68
- package/dist-esm/string/lodash/words.js +0 -31
- package/dist-esm/string/pupa.js +0 -54
- package/dist-esm/string/readingTime.js +0 -102
- package/dist-esm/string/regex.js +0 -6
- package/dist-esm/string/safeJsonStringify.js +0 -39
- package/dist-esm/string/slugify.js +0 -66
- package/dist-esm/string/string.util.js +0 -99
- package/dist-esm/string/stringify.js +0 -133
- package/dist-esm/string/url.util.js +0 -42
- package/dist-esm/time/time.util.js +0 -61
- package/dist-esm/typeFest.js +0 -2
- package/dist-esm/types.js +0 -59
- package/dist-esm/unit/size.util.js +0 -43
- package/dist-esm/web.js +0 -40
- package/dist-esm/zod/index.js +0 -4
- package/dist-esm/zod/zod.shared.schemas.js +0 -92
- package/dist-esm/zod/zod.util.js +0 -52
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { _isBackendErrorResponseObject, _isErrorLike, _isErrorObject } from '../error/error.util';
|
|
2
|
-
import { _jsonParseIfPossible } from './json.util';
|
|
3
|
-
import { _safeJsonStringify } from './safeJsonStringify';
|
|
4
|
-
const supportsAggregateError = typeof globalThis.AggregateError === 'function';
|
|
5
|
-
let globalStringifyFunction = _safeJsonStringify;
|
|
6
|
-
/**
|
|
7
|
-
* Allows to set Global "stringifyFunction" that will be used to "pretty-print" objects
|
|
8
|
-
* in various cases.
|
|
9
|
-
*
|
|
10
|
-
* Used, for example, by _stringify() to pretty-print objects/arrays.
|
|
11
|
-
*
|
|
12
|
-
* Defaults to _safeJsonStringify.
|
|
13
|
-
*
|
|
14
|
-
* Node.js project can set it to _inspect, which allows to use `util.inspect`
|
|
15
|
-
* as pretty-printing function.
|
|
16
|
-
*
|
|
17
|
-
* It's recommended that this function is circular-reference-safe.
|
|
18
|
-
*/
|
|
19
|
-
export function setGlobalStringifyFunction(fn) {
|
|
20
|
-
globalStringifyFunction = fn;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Inspired by `_inspect` from nodejs-lib, which is based on util.inpect that is not available in the Browser.
|
|
24
|
-
* Potentially can do this (with extra 2Kb gz size): https://github.com/deecewan/browser-util-inspect
|
|
25
|
-
*
|
|
26
|
-
* Transforms ANY to human-readable string (via JSON.stringify pretty).
|
|
27
|
-
* Safe (no error throwing).
|
|
28
|
-
*
|
|
29
|
-
* Correctly prints Errors, AppErrors, ErrorObjects: error.message + \n + _stringify(error.data)
|
|
30
|
-
*
|
|
31
|
-
* Enforces max length (default to 1000, pass 0 to skip it).
|
|
32
|
-
*
|
|
33
|
-
* Logs numbers as-is, e.g: `6`.
|
|
34
|
-
* Logs strings as-is (without single quotes around, unlike default util.inspect behavior).
|
|
35
|
-
* Otherwise - just uses JSON.stringify().
|
|
36
|
-
*
|
|
37
|
-
* Returns 'empty_string' if empty string is passed.
|
|
38
|
-
* Returns 'undefined' if undefined is passed (default util.inspect behavior).
|
|
39
|
-
*/
|
|
40
|
-
export function _stringify(obj, opt = {}) {
|
|
41
|
-
if (obj === undefined)
|
|
42
|
-
return 'undefined';
|
|
43
|
-
if (obj === null)
|
|
44
|
-
return 'null';
|
|
45
|
-
if (typeof obj === 'function')
|
|
46
|
-
return 'function';
|
|
47
|
-
if (typeof obj === 'symbol')
|
|
48
|
-
return obj.toString();
|
|
49
|
-
let s;
|
|
50
|
-
// Parse JSON string, if possible
|
|
51
|
-
obj = _jsonParseIfPossible(obj); // in case it's e.g non-pretty JSON, or even a stringified ErrorObject
|
|
52
|
-
//
|
|
53
|
-
// HttpErrorResponse
|
|
54
|
-
//
|
|
55
|
-
if (_isBackendErrorResponseObject(obj)) {
|
|
56
|
-
return _stringify(obj.error, opt);
|
|
57
|
-
}
|
|
58
|
-
if (obj instanceof Error || _isErrorLike(obj)) {
|
|
59
|
-
const { includeErrorCause = true } = opt;
|
|
60
|
-
//
|
|
61
|
-
// Error or ErrorLike
|
|
62
|
-
//
|
|
63
|
-
// Omit "default" error name as non-informative
|
|
64
|
-
// UPD: no, it's still important to understand that we're dealing with Error and not just some string
|
|
65
|
-
// if (obj?.name === 'Error') {
|
|
66
|
-
// s = obj.message
|
|
67
|
-
// }
|
|
68
|
-
// if (_isErrorObject(obj) && _isHttpErrorObject(obj)) {
|
|
69
|
-
// // Printing (0) to avoid ambiguity
|
|
70
|
-
// s = `${obj.name}(${obj.data.backendResponseStatusCode}): ${obj.message}`
|
|
71
|
-
// }
|
|
72
|
-
s = [obj.name, obj.message].filter(Boolean).join(': ');
|
|
73
|
-
if (typeof obj.code === 'string') {
|
|
74
|
-
// Error that has no `data`, but has `code` property
|
|
75
|
-
s += `\ncode: ${obj.code}`;
|
|
76
|
-
}
|
|
77
|
-
if (opt.includeErrorData && _isErrorObject(obj) && Object.keys(obj.data).length) {
|
|
78
|
-
s += '\n' + _stringify(obj.data, opt);
|
|
79
|
-
}
|
|
80
|
-
if (opt.includeErrorStack && obj.stack) {
|
|
81
|
-
// Here we're using the previously-generated "title line" (e.g "Error: some_message"),
|
|
82
|
-
// concatenating it with the Stack (but without the title line of the Stack)
|
|
83
|
-
// This is to fix the rare error (happened with Got) where `err.message` was changed,
|
|
84
|
-
// but err.stack had "old" err.message
|
|
85
|
-
// This should "fix" that
|
|
86
|
-
const sLines = s.split('\n').length;
|
|
87
|
-
s = [s, ...obj.stack.split('\n').slice(sLines)].join('\n');
|
|
88
|
-
}
|
|
89
|
-
if (supportsAggregateError && obj instanceof AggregateError && obj.errors.length) {
|
|
90
|
-
s = [
|
|
91
|
-
s,
|
|
92
|
-
`${obj.errors.length} error(s):`,
|
|
93
|
-
...obj.errors.map((err, i) => `${i + 1}. ${_stringify(err, opt)}`),
|
|
94
|
-
].join('\n');
|
|
95
|
-
}
|
|
96
|
-
if (obj.cause && includeErrorCause) {
|
|
97
|
-
s = s + '\nCaused by: ' + _stringify(obj.cause, opt);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else if (typeof obj === 'string') {
|
|
101
|
-
//
|
|
102
|
-
// String
|
|
103
|
-
//
|
|
104
|
-
s = obj.trim() || 'empty_string';
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
//
|
|
108
|
-
// Other
|
|
109
|
-
//
|
|
110
|
-
if (obj instanceof Map) {
|
|
111
|
-
obj = Object.fromEntries(obj);
|
|
112
|
-
}
|
|
113
|
-
else if (obj instanceof Set) {
|
|
114
|
-
obj = [...obj];
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
const { stringifyFn = globalStringifyFunction } = opt;
|
|
118
|
-
s = stringifyFn(obj, undefined, 2);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
s = String(obj); // fallback
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Shouldn't happen, but some weird input parameters may return this
|
|
125
|
-
if (s === undefined)
|
|
126
|
-
return 'undefined';
|
|
127
|
-
// Handle maxLen
|
|
128
|
-
const { maxLen = 10000 } = opt;
|
|
129
|
-
if (maxLen && s.length > maxLen) {
|
|
130
|
-
s = s.slice(0, maxLen) + `... ${Math.ceil(s.length / 1024)} KB message truncated`;
|
|
131
|
-
}
|
|
132
|
-
return s;
|
|
133
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses `location.search` string (e.g `?a=1&b=2`) into a StringMap, e.g:
|
|
3
|
-
* `{ a: '1', b: '2' }`
|
|
4
|
-
*
|
|
5
|
-
* Pass `location.search` to it in the Frontend, or any other string on the Backend (where `location.search` is not available).
|
|
6
|
-
*
|
|
7
|
-
* Works both with and without leading `?` character.
|
|
8
|
-
*
|
|
9
|
-
* Yes, there's `URLSearchParams` existing in the Frontend (not in Node yet), but it's API is not
|
|
10
|
-
* as convenient. And the implementation here is super-small.
|
|
11
|
-
*
|
|
12
|
-
* Goal of this function is to produce exactly same output as URLSearchParams would.
|
|
13
|
-
*/
|
|
14
|
-
export function _parseQueryString(search) {
|
|
15
|
-
const qs = {};
|
|
16
|
-
search
|
|
17
|
-
.slice(search.startsWith('?') ? 1 : 0)
|
|
18
|
-
.split('&')
|
|
19
|
-
.forEach(p => {
|
|
20
|
-
const [k, v] = p.split('=');
|
|
21
|
-
if (!k)
|
|
22
|
-
return;
|
|
23
|
-
qs[decodeURIComponent(k)] = decodeURIComponent(v || '');
|
|
24
|
-
});
|
|
25
|
-
return qs;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* A wrapper around `new URL(href)`, but it returns `null` instead of throwing an error.
|
|
29
|
-
* While `URL.parse` exists, and behaves similarly, it's not widely supported.
|
|
30
|
-
*
|
|
31
|
-
* `null` was chosen instead of `undefined` in the return type union to make it easier to move to `URL.parse` if it ever becomes widely supported.
|
|
32
|
-
*/
|
|
33
|
-
export function _toUrlOrNull(url, base) {
|
|
34
|
-
if (typeof url !== 'string')
|
|
35
|
-
return null;
|
|
36
|
-
try {
|
|
37
|
-
return new URL(url, base || undefined);
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* using _ = blockTimer()
|
|
3
|
-
* // will log "took 1.234 sec" on dispose
|
|
4
|
-
*
|
|
5
|
-
* using _ = blockTimer('named')
|
|
6
|
-
* // will log "named took 1.234 sec" on dispose
|
|
7
|
-
*
|
|
8
|
-
* @experimental
|
|
9
|
-
*/
|
|
10
|
-
export function _blockTimer(name) {
|
|
11
|
-
const started = Date.now();
|
|
12
|
-
return {
|
|
13
|
-
[Symbol.dispose]() {
|
|
14
|
-
console.log(`${name ? name + ' ' : ''}took ${_since(started)}`);
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Returns time passed since `from` until `until` (default to Date.now())
|
|
20
|
-
*/
|
|
21
|
-
export function _since(from, until = Date.now()) {
|
|
22
|
-
return _ms(until - from);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns, e.g:
|
|
26
|
-
* 125 ms
|
|
27
|
-
* 1.125 sec
|
|
28
|
-
* 11 sec
|
|
29
|
-
* 1m12s
|
|
30
|
-
* 59m2s
|
|
31
|
-
* 1h3m12s
|
|
32
|
-
*/
|
|
33
|
-
export function _ms(millis) {
|
|
34
|
-
// <1 sec
|
|
35
|
-
if (millis < 1000)
|
|
36
|
-
return `${Math.round(millis)} ms`;
|
|
37
|
-
// < 5 sec
|
|
38
|
-
if (millis < 5000) {
|
|
39
|
-
const s = millis / 1000;
|
|
40
|
-
return `${Math.trunc(s) === s ? s : s.toFixed(3)} sec`;
|
|
41
|
-
}
|
|
42
|
-
const sec = Math.floor(millis / 1000) % 60;
|
|
43
|
-
const min = Math.floor(millis / (60 * 1000)) % 60;
|
|
44
|
-
const hrs = Math.floor(millis / (3600 * 1000));
|
|
45
|
-
// <1 hr
|
|
46
|
-
if (hrs === 0) {
|
|
47
|
-
// <1 min
|
|
48
|
-
if (min === 0)
|
|
49
|
-
return `${sec} sec`;
|
|
50
|
-
return `${min}m${sec}s`;
|
|
51
|
-
}
|
|
52
|
-
if (hrs < 24) {
|
|
53
|
-
return `${hrs}h${min}m`;
|
|
54
|
-
}
|
|
55
|
-
if (hrs < 48) {
|
|
56
|
-
return `${Math.round(hrs + min / 60)}h`;
|
|
57
|
-
}
|
|
58
|
-
// >= 48 hours
|
|
59
|
-
const days = Math.floor(hrs / 24);
|
|
60
|
-
return `${days} days`;
|
|
61
|
-
}
|
package/dist-esm/typeFest.js
DELETED
package/dist-esm/types.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Symbol to indicate END of Sequence.
|
|
3
|
-
*/
|
|
4
|
-
export const END = Symbol('END');
|
|
5
|
-
/**
|
|
6
|
-
* Symbol to indicate SKIP of item (e.g in AbortableMapper)
|
|
7
|
-
*/
|
|
8
|
-
export const SKIP = Symbol('SKIP');
|
|
9
|
-
/**
|
|
10
|
-
* Symbol to indicate cache miss.
|
|
11
|
-
* To distinguish from cache returning `undefined` or `null`.
|
|
12
|
-
*/
|
|
13
|
-
export const MISS = Symbol('MISS');
|
|
14
|
-
export const _passthroughMapper = item => item;
|
|
15
|
-
export const _passUndefinedMapper = () => undefined;
|
|
16
|
-
/**
|
|
17
|
-
* Function that does nothings and returns `undefined`.
|
|
18
|
-
*/
|
|
19
|
-
export const _noop = (..._args) => undefined;
|
|
20
|
-
export const _passthroughPredicate = () => true;
|
|
21
|
-
export const _passNothingPredicate = () => false;
|
|
22
|
-
/**
|
|
23
|
-
* Needed due to https://github.com/microsoft/TypeScript/issues/13778
|
|
24
|
-
* Only affects typings, no runtime effect.
|
|
25
|
-
*/
|
|
26
|
-
export const _stringMapValues = Object.values;
|
|
27
|
-
/**
|
|
28
|
-
* Needed due to https://github.com/microsoft/TypeScript/issues/13778
|
|
29
|
-
* Only affects typings, no runtime effect.
|
|
30
|
-
*/
|
|
31
|
-
export const _stringMapEntries = Object.entries;
|
|
32
|
-
/**
|
|
33
|
-
* Alias of `Object.keys`, but returns keys typed as `keyof T`, not as just `string`.
|
|
34
|
-
* This is how TypeScript should work, actually.
|
|
35
|
-
*/
|
|
36
|
-
export const _objectKeys = Object.keys;
|
|
37
|
-
/**
|
|
38
|
-
* Alias of `Object.entries`, but returns better-typed output.
|
|
39
|
-
*
|
|
40
|
-
* So e.g you can use _objectEntries(obj).map([k, v] => {})
|
|
41
|
-
* and `k` will be `keyof obj` instead of generic `string`.
|
|
42
|
-
*/
|
|
43
|
-
export const _objectEntries = Object.entries;
|
|
44
|
-
/**
|
|
45
|
-
* Utility function that helps to cast *existing variable* to needed type T.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* try {} catch (err) {
|
|
49
|
-
* // err is unknown here
|
|
50
|
-
* _typeCast<AppError>(err)
|
|
51
|
-
* // now err is of type AppError
|
|
52
|
-
* err.data = {} // can be done, because it was casted
|
|
53
|
-
* }
|
|
54
|
-
*/
|
|
55
|
-
export function _typeCast(v) { }
|
|
56
|
-
/**
|
|
57
|
-
* Type-safe Object.assign that checks that part is indeed a Partial<T>
|
|
58
|
-
*/
|
|
59
|
-
export const _objectAssign = Object.assign;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export function _gb(b) {
|
|
2
|
-
return Math.round(b / 1024 ** 3);
|
|
3
|
-
}
|
|
4
|
-
export function _mb(b) {
|
|
5
|
-
return Math.round(b / 1024 ** 2);
|
|
6
|
-
}
|
|
7
|
-
export function _kb(b) {
|
|
8
|
-
return Math.round(b / 1024);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Byte size to Human byte size string
|
|
12
|
-
*/
|
|
13
|
-
export function _hb(b = 0) {
|
|
14
|
-
if (b < 1024)
|
|
15
|
-
return `${Math.round(b)} byte(s)`;
|
|
16
|
-
if (b < 1024 ** 2)
|
|
17
|
-
return `${(b / 1024).toPrecision(3)} Kb`;
|
|
18
|
-
if (b < 1024 ** 3)
|
|
19
|
-
return `${(b / 1024 ** 2).toPrecision(3)} Mb`;
|
|
20
|
-
if (b < 1024 ** 4)
|
|
21
|
-
return `${(b / 1024 ** 3).toPrecision(3)} Gb`;
|
|
22
|
-
if (b < 1024 ** 5)
|
|
23
|
-
return `${(b / 1024 ** 4).toPrecision(3)} Tb`;
|
|
24
|
-
return `${Math.round(b / 1024 ** 4)} Tb`;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* hc stands for "human count", similar to "human bytes" `_hb` function.
|
|
28
|
-
* Helpful to print big numbers, as it adds `K` (kilo), `M` (mega), etc to make
|
|
29
|
-
* them more readable.
|
|
30
|
-
*/
|
|
31
|
-
export function _hc(c = 0) {
|
|
32
|
-
if (c < 10 ** 4)
|
|
33
|
-
return String(c);
|
|
34
|
-
if (c < 10 ** 6)
|
|
35
|
-
return (c / 10 ** 3).toPrecision(3) + ' K';
|
|
36
|
-
if (c < 10 ** 9)
|
|
37
|
-
return (c / 10 ** 6).toPrecision(3) + ' M'; // million
|
|
38
|
-
if (c < 10 ** 12)
|
|
39
|
-
return (c / 10 ** 9).toPrecision(3) + ' B'; // billion
|
|
40
|
-
if (c < 10 ** 15)
|
|
41
|
-
return (c / 10 ** 12).toPrecision(3) + ' T'; // trillion
|
|
42
|
-
return Math.round(c / 10 ** 12) + ' T';
|
|
43
|
-
}
|
package/dist-esm/web.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/// <reference lib="es2022" preserve="true" />
|
|
2
|
-
/// <reference lib="dom" preserve="true" />
|
|
3
|
-
/**
|
|
4
|
-
* Implements WebStorage API by using in-memory storage.
|
|
5
|
-
* Can be useful in SSR environment or unit tests.
|
|
6
|
-
*
|
|
7
|
-
* This is how localStorage can be mocked in Node:
|
|
8
|
-
*
|
|
9
|
-
* Object.assign(globalThis, {
|
|
10
|
-
* localStorage: new InMemoryWebStorage(),
|
|
11
|
-
* })
|
|
12
|
-
*
|
|
13
|
-
* @experimental
|
|
14
|
-
*/
|
|
15
|
-
export class InMemoryWebStorage {
|
|
16
|
-
constructor(data = {}) {
|
|
17
|
-
this.data = data;
|
|
18
|
-
}
|
|
19
|
-
// Not implementing "free property access" now for simplicity,
|
|
20
|
-
// but can be implemented with Proxy
|
|
21
|
-
// [ name: string ]: any
|
|
22
|
-
getItem(key) {
|
|
23
|
-
return this.data[key] ?? null;
|
|
24
|
-
}
|
|
25
|
-
setItem(key, value) {
|
|
26
|
-
this.data[key] = String(value);
|
|
27
|
-
}
|
|
28
|
-
removeItem(key) {
|
|
29
|
-
delete this.data[key];
|
|
30
|
-
}
|
|
31
|
-
key(index) {
|
|
32
|
-
return Object.keys(this.data)[index] ?? null;
|
|
33
|
-
}
|
|
34
|
-
clear() {
|
|
35
|
-
this.data = {};
|
|
36
|
-
}
|
|
37
|
-
get length() {
|
|
38
|
-
return Object.keys(this.data).length;
|
|
39
|
-
}
|
|
40
|
-
}
|
package/dist-esm/zod/index.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export const TS_2500 = 16725225600; // 2500-01-01
|
|
3
|
-
export const TS_2000 = 946684800; // 2000-01-01
|
|
4
|
-
export const zUnixTimestamp = z
|
|
5
|
-
.number()
|
|
6
|
-
.int()
|
|
7
|
-
.min(0)
|
|
8
|
-
.max(TS_2500, 'Must be a UnixTimestamp number')
|
|
9
|
-
.describe('UnixTimestamp');
|
|
10
|
-
export const zUnixTimestamp2000 = z
|
|
11
|
-
.number()
|
|
12
|
-
.int()
|
|
13
|
-
.min(TS_2000)
|
|
14
|
-
.max(TS_2500, 'Must be a UnixTimestamp number after 2000-01-01')
|
|
15
|
-
.describe('UnixTimestamp2000');
|
|
16
|
-
export const zUnixTimestampMillis = z
|
|
17
|
-
.number()
|
|
18
|
-
.int()
|
|
19
|
-
.min(0)
|
|
20
|
-
.max(TS_2500 * 1000, 'Must be a UnixTimestampMillis number')
|
|
21
|
-
.describe('UnixTimestampMillis');
|
|
22
|
-
export const zUnixTimestampMillis2000 = z
|
|
23
|
-
.number()
|
|
24
|
-
.int()
|
|
25
|
-
.min(TS_2000 * 1000)
|
|
26
|
-
.max(TS_2500 * 1000, 'Must be a UnixTimestampMillis number after 2000-01-01')
|
|
27
|
-
.describe('UnixTimestampMillis2000');
|
|
28
|
-
export const zSemVer = z
|
|
29
|
-
.string()
|
|
30
|
-
.regex(/^[0-9]+\.[0-9]+\.[0-9]+$/, 'Must be a SemVer string')
|
|
31
|
-
.describe('SemVer');
|
|
32
|
-
export const zIsoDateString = z
|
|
33
|
-
.string()
|
|
34
|
-
.refine(v => {
|
|
35
|
-
return /^\d{4}-\d{2}-\d{2}$/.test(v);
|
|
36
|
-
}, 'Must be an IsoDateString')
|
|
37
|
-
.describe('IsoDateString');
|
|
38
|
-
export const zEmail = z
|
|
39
|
-
.string()
|
|
40
|
-
.trim()
|
|
41
|
-
.email()
|
|
42
|
-
.transform(s => s.toLowerCase())
|
|
43
|
-
.describe('Email');
|
|
44
|
-
export const BASE62_REGEX = /^[a-zA-Z0-9]+$/;
|
|
45
|
-
export const BASE64_REGEX = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
46
|
-
export const BASE64URL_REGEX = /^[\w-/]+$/;
|
|
47
|
-
export const zBase62 = z
|
|
48
|
-
.string()
|
|
49
|
-
.regex(BASE62_REGEX, 'Must be a base62 string')
|
|
50
|
-
.describe('Base62String');
|
|
51
|
-
export const zBase64 = z
|
|
52
|
-
.string()
|
|
53
|
-
.regex(BASE64_REGEX, 'Must be a base64 string')
|
|
54
|
-
.describe('Base64String');
|
|
55
|
-
export const zBase64Url = z
|
|
56
|
-
.string()
|
|
57
|
-
.regex(BASE64URL_REGEX, 'Must be a base64url string')
|
|
58
|
-
.describe('Base64UrlString');
|
|
59
|
-
export const JWT_REGEX = /^[\w-]+\.[\w-]+\.[\w-]+$/;
|
|
60
|
-
export const zJwt = z.string().regex(JWT_REGEX, 'Must be a JWT string').describe('JWTString');
|
|
61
|
-
export const zId = z
|
|
62
|
-
.string()
|
|
63
|
-
.regex(/^[a-zA-Z0-9_]{6,64}$/, 'Must be an id string')
|
|
64
|
-
.describe('IdString');
|
|
65
|
-
export const zIdBase62 = z
|
|
66
|
-
.string()
|
|
67
|
-
.regex(/^[a-zA-Z0-9]{8,64}$/, 'Must be a base62 id string')
|
|
68
|
-
.describe('Base62Id');
|
|
69
|
-
export const zIdBase64 = z
|
|
70
|
-
.string()
|
|
71
|
-
.regex(/^[A-Za-z0-9+/]{6,62}={0,2}$/, 'Must be a base64 id string')
|
|
72
|
-
.describe('Base64Id');
|
|
73
|
-
export const zIdBase64Url = z
|
|
74
|
-
.string()
|
|
75
|
-
.regex(/^[\w-/]{8,64}$/, 'Must be a base64url id string')
|
|
76
|
-
.describe('Base64UrlId');
|
|
77
|
-
/**
|
|
78
|
-
* "Slug" - a valid URL, filename, etc.
|
|
79
|
-
*/
|
|
80
|
-
export const zSlug = z
|
|
81
|
-
.string()
|
|
82
|
-
.regex(/^[a-z0-9-]{1,255}$/, 'Must be a slug string')
|
|
83
|
-
.describe('Slug');
|
|
84
|
-
export const zBaseDBEntity = z
|
|
85
|
-
.object({
|
|
86
|
-
id: z.string(),
|
|
87
|
-
// created/updated are intentionally optional here
|
|
88
|
-
created: zUnixTimestamp2000.optional(),
|
|
89
|
-
updated: zUnixTimestamp2000.optional(),
|
|
90
|
-
})
|
|
91
|
-
.describe('BaseDBEntity');
|
|
92
|
-
// export const zSavedDBEntity = zBaseDBEntity.required().describe('SavedDBEntity')
|
package/dist-esm/zod/zod.util.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { ZodError } from 'zod';
|
|
2
|
-
import { _stringify } from '../string/stringify';
|
|
3
|
-
export function zIsValid(value, schema) {
|
|
4
|
-
const { success } = schema.safeParse(value);
|
|
5
|
-
return success;
|
|
6
|
-
}
|
|
7
|
-
export function zValidate(value, schema) {
|
|
8
|
-
const r = zSafeValidate(value, schema);
|
|
9
|
-
if (r.success) {
|
|
10
|
-
return r.data;
|
|
11
|
-
}
|
|
12
|
-
throw r.error;
|
|
13
|
-
}
|
|
14
|
-
export function zSafeValidate(value, schema) {
|
|
15
|
-
const r = schema.safeParse(value);
|
|
16
|
-
if (r.success) {
|
|
17
|
-
return r;
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
success: false,
|
|
21
|
-
error: new ZodValidationError(r.error.issues, value, schema),
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export class ZodValidationError extends ZodError {
|
|
25
|
-
constructor(issues, value, schema) {
|
|
26
|
-
super(issues);
|
|
27
|
-
this.value = value;
|
|
28
|
-
this.schema = schema;
|
|
29
|
-
}
|
|
30
|
-
get message() {
|
|
31
|
-
return this.annotate();
|
|
32
|
-
}
|
|
33
|
-
annotate() {
|
|
34
|
-
let objectTitle = this.schema.description;
|
|
35
|
-
if (typeof this.value === 'object' && this.value) {
|
|
36
|
-
const objectName = this.schema.description || this.value.constructor?.name;
|
|
37
|
-
const objectId = this.value['id'];
|
|
38
|
-
objectTitle = [objectName, objectId].filter(Boolean).join('.');
|
|
39
|
-
}
|
|
40
|
-
objectTitle || (objectTitle = 'data');
|
|
41
|
-
return [
|
|
42
|
-
`Invalid ${objectTitle}`,
|
|
43
|
-
'',
|
|
44
|
-
'Input:',
|
|
45
|
-
_stringify(this.value),
|
|
46
|
-
this.issues.length > 1 ? `\n${this.issues.length} issues:` : '',
|
|
47
|
-
...this.issues.slice(0, 100).map(i => {
|
|
48
|
-
return [i.path.join('.'), i.message].filter(Boolean).join(': ');
|
|
49
|
-
}),
|
|
50
|
-
].join('\n');
|
|
51
|
-
}
|
|
52
|
-
}
|