@vpmedia/simplify 1.58.0 → 1.60.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/CHANGELOG.md +35 -0
- package/package.json +2 -2
- package/src/const/http_status.js +75 -5
- package/src/const/http_status.test.js +7 -0
- package/src/index.js +31 -11
- package/src/logging/OpenTelemetryLogHandler.js +0 -1
- package/src/pagelifecycle/const.js +3 -0
- package/src/pagelifecycle/util.js +2 -1
- package/src/typecheck/TypeCheckError.js +10 -0
- package/src/typecheck/TypeChecker.js +91 -0
- package/src/typecheck/util.js +55 -0
- package/src/{util/typecheck.test.js → typecheck/util.test.js} +11 -2
- package/src/util/async.test.js +1 -1
- package/src/util/error.test.js +2 -2
- package/src/util/fetch.js +2 -2
- package/src/util/string.js +7 -0
- package/src/util/string.test.js +12 -1
- package/src/util/validate.js +1 -1
- package/types/const/http_status.d.ts +71 -5
- package/types/const/http_status.d.ts.map +1 -1
- package/types/index.d.ts +11 -10
- package/types/logging/OpenTelemetryLogHandler.d.ts.map +1 -1
- package/types/pagelifecycle/const.d.ts +2 -0
- package/types/pagelifecycle/const.d.ts.map +1 -1
- package/types/pagelifecycle/util.d.ts.map +1 -1
- package/types/typecheck/TypeCheckError.d.ts +8 -0
- package/types/typecheck/TypeCheckError.d.ts.map +1 -0
- package/types/{util/typecheck.d.ts → typecheck/TypeChecker.d.ts} +13 -14
- package/types/typecheck/TypeChecker.d.ts.map +1 -0
- package/types/typecheck/util.d.ts +4 -0
- package/types/typecheck/util.d.ts.map +1 -0
- package/types/util/string.d.ts +1 -0
- package/types/util/string.d.ts.map +1 -1
- package/types/util/validate.d.ts +1 -1
- package/types/util/validate.d.ts.map +1 -1
- package/src/pagelifecycle/event.js +0 -2
- package/src/util/typecheck.js +0 -114
- package/types/pagelifecycle/event.d.ts +0 -3
- package/types/pagelifecycle/event.d.ts.map +0 -1
- package/types/util/typecheck.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
## [1.60.0] - 2026-01-14
|
|
2
|
+
|
|
3
|
+
### 💼 Other
|
|
4
|
+
|
|
5
|
+
- *(deps)* Bump dependency versions
|
|
6
|
+
|
|
7
|
+
### 🚜 Refactor
|
|
8
|
+
|
|
9
|
+
- Adjusted exports and namespaces
|
|
10
|
+
|
|
11
|
+
### ⚙️ Miscellaneous Tasks
|
|
12
|
+
|
|
13
|
+
- Release
|
|
14
|
+
- Cleanup, improve typechecker class
|
|
15
|
+
- Improve isEnum validator jsdoc types
|
|
16
|
+
- Improve validators and type checker
|
|
17
|
+
- Apply naming conventions
|
|
18
|
+
- Adjust exception message format
|
|
19
|
+
- Cleanup
|
|
20
|
+
- *(release)* V1.60.0
|
|
21
|
+
## [1.59.0] - 2026-01-13
|
|
22
|
+
|
|
23
|
+
### 🚀 Features
|
|
24
|
+
|
|
25
|
+
- Updated http status codes and added map to get status names
|
|
26
|
+
|
|
27
|
+
### 🧪 Testing
|
|
28
|
+
|
|
29
|
+
- Fix flaky delayPromise test
|
|
30
|
+
|
|
31
|
+
### ⚙️ Miscellaneous Tasks
|
|
32
|
+
|
|
33
|
+
- Release
|
|
34
|
+
- Updated http status code names
|
|
35
|
+
- *(release)* V1.59.0
|
|
1
36
|
## [1.58.0] - 2026-01-13
|
|
2
37
|
|
|
3
38
|
### 💼 Other
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vpmedia/simplify",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.60.0",
|
|
4
4
|
"description": "@vpmedia/simplify",
|
|
5
5
|
"author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@commitlint/cli": "^20.3.1",
|
|
29
29
|
"@commitlint/config-conventional": "^20.3.1",
|
|
30
30
|
"@eslint/js": "^9.39.2",
|
|
31
|
-
"@types/node": "^25.0.
|
|
31
|
+
"@types/node": "^25.0.8",
|
|
32
32
|
"@vitest/coverage-v8": "^4.0.17",
|
|
33
33
|
"eslint": "^9.39.2",
|
|
34
34
|
"eslint-plugin-jsdoc": "^62.0.0",
|
package/src/const/http_status.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// @see https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
|
2
|
+
// @see https://www.rfc-editor.org/rfc/rfc9110
|
|
3
|
+
|
|
1
4
|
export const HTTP_100_CONTINUE = 100;
|
|
2
5
|
export const HTTP_101_SWITCHING_PROTOCOLS = 101;
|
|
3
6
|
export const HTTP_102_PROCESSING = 102;
|
|
@@ -34,23 +37,23 @@ export const HTTP_409_CONFLICT = 409;
|
|
|
34
37
|
export const HTTP_410_GONE = 410;
|
|
35
38
|
export const HTTP_411_LENGTH_REQUIRED = 411;
|
|
36
39
|
export const HTTP_412_PRECONDITION_FAILED = 412;
|
|
37
|
-
export const
|
|
38
|
-
export const
|
|
40
|
+
export const HTTP_413_CONTENT_TOO_LARGE = 413;
|
|
41
|
+
export const HTTP_414_URI_TOO_LONG = 414;
|
|
39
42
|
export const HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415;
|
|
40
|
-
export const
|
|
43
|
+
export const HTTP_416_RANGE_NOT_SATISFIABLE = 416;
|
|
41
44
|
export const HTTP_417_EXPECTATION_FAILED = 417;
|
|
42
45
|
export const HTTP_418_IM_A_TEAPOT = 418;
|
|
43
46
|
export const HTTP_421_MISDIRECTED_REQUEST = 421;
|
|
44
|
-
export const
|
|
47
|
+
export const HTTP_422_UNPROCESSABLE_CONTENT = 422;
|
|
45
48
|
export const HTTP_423_LOCKED = 423;
|
|
46
49
|
export const HTTP_424_FAILED_DEPENDENCY = 424;
|
|
47
50
|
export const HTTP_425_TOO_EARLY = 425;
|
|
48
51
|
export const HTTP_426_UPGRADE_REQUIRED = 426;
|
|
49
52
|
export const HTTP_428_PRECONDITION_REQUIRED = 428;
|
|
50
53
|
export const HTTP_429_TOO_MANY_REQUESTS = 429;
|
|
51
|
-
export const HTTP_499_CLIENT_CLOSED_CONNECTION = 499;
|
|
52
54
|
export const HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
|
|
53
55
|
export const HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451;
|
|
56
|
+
export const HTTP_499_CLIENT_CLOSED_CONNECTION = 499;
|
|
54
57
|
export const HTTP_500_INTERNAL_SERVER_ERROR = 500;
|
|
55
58
|
export const HTTP_501_NOT_IMPLEMENTED = 501;
|
|
56
59
|
export const HTTP_502_BAD_GATEWAY = 502;
|
|
@@ -62,3 +65,70 @@ export const HTTP_507_INSUFFICIENT_STORAGE = 507;
|
|
|
62
65
|
export const HTTP_508_LOOP_DETECTED = 508;
|
|
63
66
|
export const HTTP_510_NOT_EXTENDED = 510;
|
|
64
67
|
export const HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511;
|
|
68
|
+
|
|
69
|
+
export const HTTP_STATUS_MAP = {
|
|
70
|
+
[HTTP_100_CONTINUE]: 'HTTP_100_CONTINUE',
|
|
71
|
+
[HTTP_101_SWITCHING_PROTOCOLS]: 'HTTP_101_SWITCHING_PROTOCOLS',
|
|
72
|
+
[HTTP_102_PROCESSING]: 'HTTP_102_PROCESSING',
|
|
73
|
+
[HTTP_103_EARLY_HINTS]: 'HTTP_103_EARLY_HINTS',
|
|
74
|
+
[HTTP_200_OK]: 'HTTP_200_OK',
|
|
75
|
+
[HTTP_201_CREATED]: 'HTTP_201_CREATED',
|
|
76
|
+
[HTTP_202_ACCEPTED]: 'HTTP_202_ACCEPTED',
|
|
77
|
+
[HTTP_203_NON_AUTHORITATIVE_INFORMATION]: 'HTTP_203_NON_AUTHORITATIVE_INFORMATION',
|
|
78
|
+
[HTTP_204_NO_CONTENT]: 'HTTP_204_NO_CONTENT',
|
|
79
|
+
[HTTP_205_RESET_CONTENT]: 'HTTP_205_RESET_CONTENT',
|
|
80
|
+
[HTTP_206_PARTIAL_CONTENT]: 'HTTP_206_PARTIAL_CONTENT',
|
|
81
|
+
[HTTP_207_MULTI_STATUS]: 'HTTP_207_MULTI_STATUS',
|
|
82
|
+
[HTTP_208_ALREADY_REPORTED]: 'HTTP_208_ALREADY_REPORTED',
|
|
83
|
+
[HTTP_226_IM_USED]: 'HTTP_226_IM_USED',
|
|
84
|
+
[HTTP_300_MULTIPLE_CHOICES]: 'HTTP_300_MULTIPLE_CHOICES',
|
|
85
|
+
[HTTP_301_MOVED_PERMANENTLY]: 'HTTP_301_MOVED_PERMANENTLY',
|
|
86
|
+
[HTTP_302_FOUND]: 'HTTP_302_FOUND',
|
|
87
|
+
[HTTP_303_SEE_OTHER]: 'HTTP_303_SEE_OTHER',
|
|
88
|
+
[HTTP_304_NOT_MODIFIED]: 'HTTP_304_NOT_MODIFIED',
|
|
89
|
+
[HTTP_305_USE_PROXY]: 'HTTP_305_USE_PROXY',
|
|
90
|
+
[HTTP_306_RESERVED]: 'HTTP_306_RESERVED',
|
|
91
|
+
[HTTP_307_TEMPORARY_REDIRECT]: 'HTTP_307_TEMPORARY_REDIRECT',
|
|
92
|
+
[HTTP_308_PERMANENT_REDIRECT]: 'HTTP_308_PERMANENT_REDIRECT',
|
|
93
|
+
[HTTP_400_BAD_REQUEST]: 'HTTP_400_BAD_REQUEST',
|
|
94
|
+
[HTTP_401_UNAUTHORIZED]: 'HTTP_401_UNAUTHORIZED',
|
|
95
|
+
[HTTP_402_PAYMENT_REQUIRED]: 'HTTP_402_PAYMENT_REQUIRED',
|
|
96
|
+
[HTTP_403_FORBIDDEN]: 'HTTP_403_FORBIDDEN',
|
|
97
|
+
[HTTP_404_NOT_FOUND]: 'HTTP_404_NOT_FOUND',
|
|
98
|
+
[HTTP_405_METHOD_NOT_ALLOWED]: 'HTTP_405_METHOD_NOT_ALLOWED',
|
|
99
|
+
[HTTP_406_NOT_ACCEPTABLE]: 'HTTP_406_NOT_ACCEPTABLE',
|
|
100
|
+
[HTTP_407_PROXY_AUTHENTICATION_REQUIRED]: 'HTTP_407_PROXY_AUTHENTICATION_REQUIRED',
|
|
101
|
+
[HTTP_408_REQUEST_TIMEOUT]: 'HTTP_408_REQUEST_TIMEOUT',
|
|
102
|
+
[HTTP_409_CONFLICT]: 'HTTP_409_CONFLICT',
|
|
103
|
+
[HTTP_410_GONE]: 'HTTP_410_GONE',
|
|
104
|
+
[HTTP_411_LENGTH_REQUIRED]: 'HTTP_411_LENGTH_REQUIRED',
|
|
105
|
+
[HTTP_412_PRECONDITION_FAILED]: 'HTTP_412_PRECONDITION_FAILED',
|
|
106
|
+
[HTTP_413_CONTENT_TOO_LARGE]: 'HTTP_413_CONTENT_TOO_LARGE',
|
|
107
|
+
[HTTP_414_URI_TOO_LONG]: 'HTTP_414_URI_TOO_LONG',
|
|
108
|
+
[HTTP_415_UNSUPPORTED_MEDIA_TYPE]: 'HTTP_415_UNSUPPORTED_MEDIA_TYPE',
|
|
109
|
+
[HTTP_416_RANGE_NOT_SATISFIABLE]: 'HTTP_416_RANGE_NOT_SATISFIABLE',
|
|
110
|
+
[HTTP_417_EXPECTATION_FAILED]: 'HTTP_417_EXPECTATION_FAILED',
|
|
111
|
+
[HTTP_418_IM_A_TEAPOT]: 'HTTP_418_IM_A_TEAPOT',
|
|
112
|
+
[HTTP_421_MISDIRECTED_REQUEST]: 'HTTP_421_MISDIRECTED_REQUEST',
|
|
113
|
+
[HTTP_422_UNPROCESSABLE_CONTENT]: 'HTTP_422_UNPROCESSABLE_CONTENT',
|
|
114
|
+
[HTTP_423_LOCKED]: 'HTTP_423_LOCKED',
|
|
115
|
+
[HTTP_424_FAILED_DEPENDENCY]: 'HTTP_424_FAILED_DEPENDENCY',
|
|
116
|
+
[HTTP_425_TOO_EARLY]: 'HTTP_425_TOO_EARLY',
|
|
117
|
+
[HTTP_426_UPGRADE_REQUIRED]: 'HTTP_426_UPGRADE_REQUIRED',
|
|
118
|
+
[HTTP_428_PRECONDITION_REQUIRED]: 'HTTP_428_PRECONDITION_REQUIRED',
|
|
119
|
+
[HTTP_429_TOO_MANY_REQUESTS]: 'HTTP_429_TOO_MANY_REQUESTS',
|
|
120
|
+
[HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE]: 'HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE',
|
|
121
|
+
[HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS]: 'HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS',
|
|
122
|
+
[HTTP_499_CLIENT_CLOSED_CONNECTION]: 'HTTP_499_CLIENT_CLOSED_CONNECTION',
|
|
123
|
+
[HTTP_500_INTERNAL_SERVER_ERROR]: 'HTTP_500_INTERNAL_SERVER_ERROR',
|
|
124
|
+
[HTTP_501_NOT_IMPLEMENTED]: 'HTTP_501_NOT_IMPLEMENTED',
|
|
125
|
+
[HTTP_502_BAD_GATEWAY]: 'HTTP_502_BAD_GATEWAY',
|
|
126
|
+
[HTTP_503_SERVICE_UNAVAILABLE]: 'HTTP_503_SERVICE_UNAVAILABLE',
|
|
127
|
+
[HTTP_504_GATEWAY_TIMEOUT]: 'HTTP_504_GATEWAY_TIMEOUT',
|
|
128
|
+
[HTTP_505_HTTP_VERSION_NOT_SUPPORTED]: 'HTTP_505_HTTP_VERSION_NOT_SUPPORTED',
|
|
129
|
+
[HTTP_506_VARIANT_ALSO_NEGOTIATES]: 'HTTP_506_VARIANT_ALSO_NEGOTIATES',
|
|
130
|
+
[HTTP_507_INSUFFICIENT_STORAGE]: 'HTTP_507_INSUFFICIENT_STORAGE',
|
|
131
|
+
[HTTP_508_LOOP_DETECTED]: 'HTTP_508_LOOP_DETECTED',
|
|
132
|
+
[HTTP_510_NOT_EXTENDED]: 'HTTP_510_NOT_EXTENDED',
|
|
133
|
+
[HTTP_511_NETWORK_AUTHENTICATION_REQUIRED]: 'HTTP_511_NETWORK_AUTHENTICATION_REQUIRED',
|
|
134
|
+
};
|
package/src/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// core
|
|
2
1
|
export * from './const/http_status.js';
|
|
3
2
|
export { AbstractLogHandler } from './logging/AbstractLogHandler.js';
|
|
4
3
|
export { ConsoleLogHandler } from './logging/ConsoleLogHandler.js';
|
|
@@ -8,16 +7,37 @@ export { OpenTelemetryLogHandler } from './logging/OpenTelemetryLogHandler.js';
|
|
|
8
7
|
export { SentryLogHandler } from './logging/SentryLogHandler.js';
|
|
9
8
|
export { formatLogMessage, getLogLevelName } from './logging/util.js';
|
|
10
9
|
export * from './pagelifecycle/const.js';
|
|
11
|
-
export * from './pagelifecycle/event.js';
|
|
12
10
|
export * from './pagelifecycle/typedef.js';
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
export {
|
|
12
|
+
addPageLifecycleCallback,
|
|
13
|
+
getDocumentState,
|
|
14
|
+
getPageLifecycleEventEmitter,
|
|
15
|
+
getPageLifecycleState,
|
|
16
|
+
initPageLifecycle,
|
|
17
|
+
isPageLifecycleInitialized,
|
|
18
|
+
} from './pagelifecycle/util.js';
|
|
19
|
+
export { typeChecker } from './typecheck/TypeChecker.js';
|
|
20
|
+
export { TypeCheckError } from './typecheck/TypeCheckError.js';
|
|
21
|
+
export { typeCheck, typeCheckArray, typeCheckEnum } from './typecheck/util.js';
|
|
22
|
+
export { delayPromise, loadJSON } from './util/async.js';
|
|
23
|
+
export { getErrorDetails } from './util/error.js';
|
|
16
24
|
export { FetchError, fetchRetry, HTTP_0_ANY } from './util/fetch.js';
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
export {
|
|
26
|
+
addFloat,
|
|
27
|
+
deg2rad,
|
|
28
|
+
fixFloat,
|
|
29
|
+
fixFloatPrecision,
|
|
30
|
+
getRandomInt,
|
|
31
|
+
isEqual,
|
|
32
|
+
isGreater,
|
|
33
|
+
isGreaterOrEqual,
|
|
34
|
+
isInRange,
|
|
35
|
+
isLess,
|
|
36
|
+
isLessOrEqual,
|
|
37
|
+
subFloat,
|
|
38
|
+
} from './util/number.js';
|
|
39
|
+
export { purgeObject, deepMerge, getObjArrayPropSum, getObjValueByPath, setObjValueByPath } from './util/object.js';
|
|
40
|
+
export { getURLParam, sanitizeURLParam } from './util/query.js';
|
|
41
|
+
export { serverDataToState } from './util/state.js';
|
|
42
|
+
export { addLeadingZero, capitalize, getTypeFromValue, saveAsFile, underscoreToCamelCase } from './util/string.js';
|
|
23
43
|
export * from './util/validate.js';
|
|
@@ -9,3 +9,6 @@ export const DOCUMENT_STATE_FULLY_LOADED = 'fullyLoaded';
|
|
|
9
9
|
export const DOCUMENT_STATE_COMPLETE = 'complete';
|
|
10
10
|
export const DOCUMENT_STATE_INTERACTIVE = 'interactive';
|
|
11
11
|
export const DOCUMENT_STATE_LOADING = 'loading';
|
|
12
|
+
|
|
13
|
+
export const PAGE_LIFECYCLE_STATE_CHANGE_EVENT = 'pageLifecycleStateChange';
|
|
14
|
+
export const DOCUMENT_STATE_CHANGE_EVENT = 'documentStateChange';
|
|
@@ -8,15 +8,16 @@
|
|
|
8
8
|
import { EventEmitter } from 'eventemitter3';
|
|
9
9
|
import { Logger } from '../logging/Logger.js';
|
|
10
10
|
import {
|
|
11
|
+
DOCUMENT_STATE_CHANGE_EVENT,
|
|
11
12
|
DOCUMENT_STATE_DOM_LOADED,
|
|
12
13
|
DOCUMENT_STATE_FULLY_LOADED,
|
|
13
14
|
PAGE_LIFECYCLE_STATE_ACTIVE,
|
|
15
|
+
PAGE_LIFECYCLE_STATE_CHANGE_EVENT,
|
|
14
16
|
PAGE_LIFECYCLE_STATE_FROZEN,
|
|
15
17
|
PAGE_LIFECYCLE_STATE_HIDDEN,
|
|
16
18
|
PAGE_LIFECYCLE_STATE_PASSIVE,
|
|
17
19
|
PAGE_LIFECYCLE_STATE_TERMINATED,
|
|
18
20
|
} from './const.js';
|
|
19
|
-
import { DOCUMENT_STATE_CHANGE_EVENT, PAGE_LIFECYCLE_STATE_CHANGE_EVENT } from './event.js';
|
|
20
21
|
|
|
21
22
|
const logger = new Logger('pagelifecycle');
|
|
22
23
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { TypeCheckError } from './TypeCheckError.js';
|
|
2
|
+
import { Logger } from '../logging/Logger.js';
|
|
3
|
+
import { typeCheck, typeCheckArray, typeCheckEnum } from './util.js';
|
|
4
|
+
|
|
5
|
+
const logger = new Logger('typechecker');
|
|
6
|
+
|
|
7
|
+
class TypeChecker {
|
|
8
|
+
/** @type {TypeChecker} */
|
|
9
|
+
static #instance;
|
|
10
|
+
|
|
11
|
+
/** @type {boolean} */
|
|
12
|
+
#swallowErrors = false;
|
|
13
|
+
|
|
14
|
+
constructor() {
|
|
15
|
+
if (TypeChecker.#instance === undefined) {
|
|
16
|
+
TypeChecker.#instance = this;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Enable or disable swallowing of TypeCheckErrors.
|
|
22
|
+
* @param {boolean} value - Swallow errors flag.
|
|
23
|
+
*/
|
|
24
|
+
setSwallowErrors(value) {
|
|
25
|
+
this.#swallowErrors = Boolean(value);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Type check a single value.
|
|
30
|
+
* @template T
|
|
31
|
+
* @param {unknown} value - The value to check.
|
|
32
|
+
* @param {(value: unknown) => value is T} validator - The validator to check with.
|
|
33
|
+
* @returns {T} - The type checked value.
|
|
34
|
+
*/
|
|
35
|
+
check(value, validator) {
|
|
36
|
+
try {
|
|
37
|
+
return typeCheck(value, validator);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (this.#swallowErrors && error instanceof TypeCheckError) {
|
|
40
|
+
logger.exception('check', error);
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Type check an array of values.
|
|
50
|
+
* @template T
|
|
51
|
+
* @param {unknown[]} value - The value to check.
|
|
52
|
+
* @param {(value: unknown) => value is T} validator - The validator to check the array with.
|
|
53
|
+
* @returns {T[]} - The type checked value.
|
|
54
|
+
*/
|
|
55
|
+
checkArray(value, validator) {
|
|
56
|
+
try {
|
|
57
|
+
return typeCheckArray(value, validator);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
if (this.#swallowErrors && error instanceof TypeCheckError) {
|
|
60
|
+
logger.exception('checkArray', error);
|
|
61
|
+
// @ts-expect-error
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Type check an array of values.
|
|
70
|
+
* @template T
|
|
71
|
+
* @param {string | number} value - The value to check.
|
|
72
|
+
* @param {(string | number)[] | Set<string | number> | Record<string | number, string | number>} choices - Enum list.
|
|
73
|
+
* @returns {string | number} - The type checked value.
|
|
74
|
+
*/
|
|
75
|
+
checkEnum(value, choices) {
|
|
76
|
+
try {
|
|
77
|
+
return typeCheckEnum(value, choices);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if (this.#swallowErrors && error instanceof TypeCheckError) {
|
|
80
|
+
logger.exception('checkEnum', error);
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Export a single shared instance.
|
|
90
|
+
*/
|
|
91
|
+
export const typeChecker = new TypeChecker();
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { getTypeFromValue } from '../util/string.js';
|
|
2
|
+
import { isArrayOf, isEnum } from '../util/validate.js';
|
|
3
|
+
import { TypeCheckError } from './TypeCheckError.js';
|
|
4
|
+
|
|
5
|
+
const VALIDATOR_FALLBACK_NAME = '<anonymous>';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Type check a value using a validator.
|
|
9
|
+
* @template T
|
|
10
|
+
* @param {unknown} value - The value to check.
|
|
11
|
+
* @param {(value: unknown) => value is T} validator - The validator to check with.
|
|
12
|
+
* @returns {T} The type checked value.
|
|
13
|
+
* @throws {TypeCheckError}
|
|
14
|
+
*/
|
|
15
|
+
export const typeCheck = (value, validator) => {
|
|
16
|
+
if (!validator(value)) {
|
|
17
|
+
const validatorName = validator.name || VALIDATOR_FALLBACK_NAME;
|
|
18
|
+
const displayValue = getTypeFromValue(value);
|
|
19
|
+
throw new TypeCheckError(`Validation failed: ${validatorName} (${displayValue})`);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Type check a value using a validator.
|
|
26
|
+
* @template T
|
|
27
|
+
* @param {unknown[]} value - The value to check.
|
|
28
|
+
* @param {(value: unknown) => value is T} validator - The validator to check the array with.
|
|
29
|
+
* @returns {T[]} The type checked value.
|
|
30
|
+
* @throws {TypeCheckError}
|
|
31
|
+
*/
|
|
32
|
+
export const typeCheckArray = (value, validator) => {
|
|
33
|
+
if (!isArrayOf(value, validator)) {
|
|
34
|
+
const validatorName = validator.name || VALIDATOR_FALLBACK_NAME;
|
|
35
|
+
const displayValue = getTypeFromValue(value);
|
|
36
|
+
throw new TypeCheckError(`Validation failed: ${validatorName} (${displayValue})`);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Type check an enum.
|
|
43
|
+
* @param {string | number} value - The value to check.
|
|
44
|
+
* @param {(string | number)[] | Set<string | number> | Record<string | number, string | number>} choices - Enum list.
|
|
45
|
+
* @returns {string | number} The type checked value.
|
|
46
|
+
* @throws {TypeCheckError}
|
|
47
|
+
*/
|
|
48
|
+
export const typeCheckEnum = (value, choices) => {
|
|
49
|
+
if (!isEnum(value, choices)) {
|
|
50
|
+
const validatorName = 'isEnum';
|
|
51
|
+
const displayValue = getTypeFromValue(value);
|
|
52
|
+
throw new TypeCheckError(`Validation failed: ${validatorName} (${displayValue})`);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isNumber, isPositiveInteger } from '../util/validate.js';
|
|
2
|
+
import { TypeCheckError } from './TypeCheckError.js';
|
|
3
|
+
import { typeCheck, typeCheckArray, typeCheckEnum } from './util.js';
|
|
3
4
|
|
|
4
5
|
describe('typecheck', () => {
|
|
5
6
|
test('typeCheck', () => {
|
|
@@ -16,4 +17,12 @@ describe('typecheck', () => {
|
|
|
16
17
|
// @ts-expect-error
|
|
17
18
|
expect(() => typeCheckArray('string', isNumber)).toThrowError(TypeCheckError);
|
|
18
19
|
});
|
|
20
|
+
|
|
21
|
+
test('typeCheckEnum', () => {
|
|
22
|
+
expect(() => typeCheckEnum('AA', ['AA'])).not.toThrowError(TypeCheckError);
|
|
23
|
+
expect(() => typeCheckEnum('AA', ['BB'])).toThrowError(TypeCheckError);
|
|
24
|
+
expect(() => typeCheckEnum(null, ['BB'])).toThrowError(TypeCheckError);
|
|
25
|
+
// @ts-expect-error
|
|
26
|
+
expect(() => typeCheckEnum(['AA'], null)).toThrowError(TypeCheckError);
|
|
27
|
+
});
|
|
19
28
|
});
|
package/src/util/async.test.js
CHANGED
|
@@ -7,7 +7,7 @@ describe('delayPromise', () => {
|
|
|
7
7
|
const end = Date.now();
|
|
8
8
|
|
|
9
9
|
// Should resolve within a reasonable time frame
|
|
10
|
-
expect(end - start).toBeGreaterThanOrEqual(
|
|
10
|
+
expect(end - start).toBeGreaterThanOrEqual(9);
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
test('Handles zero delay correctly', async () => {
|
package/src/util/error.test.js
CHANGED
|
@@ -9,9 +9,9 @@ test('Tests getErrorDetails', () => {
|
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
test('Tests getErrorDetails with Error cause', () => {
|
|
12
|
-
const error = new
|
|
12
|
+
const error = new SyntaxError('Test error', { cause: new TypeError('Cause error') });
|
|
13
13
|
const errorDetails = getErrorDetails(error);
|
|
14
|
-
expect(errorDetails.type).toBe('
|
|
14
|
+
expect(errorDetails.type).toBe('SyntaxError');
|
|
15
15
|
expect(errorDetails.message).toBe('Test error');
|
|
16
16
|
expect(errorDetails.cause instanceof Error).toBe(true);
|
|
17
17
|
if (errorDetails.cause instanceof Error) {
|
package/src/util/fetch.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
HTTP_401_UNAUTHORIZED,
|
|
6
6
|
HTTP_403_FORBIDDEN,
|
|
7
7
|
HTTP_405_METHOD_NOT_ALLOWED,
|
|
8
|
-
|
|
8
|
+
HTTP_422_UNPROCESSABLE_CONTENT,
|
|
9
9
|
} from '../const/http_status.js';
|
|
10
10
|
import { Logger } from '../logging/Logger.js';
|
|
11
11
|
import { delayPromise } from './async.js';
|
|
@@ -49,7 +49,7 @@ export const fetchRetry = async (resource, fetchOptions, retryOptions) => {
|
|
|
49
49
|
HTTP_401_UNAUTHORIZED,
|
|
50
50
|
HTTP_403_FORBIDDEN,
|
|
51
51
|
HTTP_405_METHOD_NOT_ALLOWED,
|
|
52
|
-
|
|
52
|
+
HTTP_422_UNPROCESSABLE_CONTENT,
|
|
53
53
|
];
|
|
54
54
|
while (retryOptions.numTries > 0) {
|
|
55
55
|
logger.info('request', { resource, fetchOptions, retryOptions });
|
package/src/util/string.js
CHANGED
|
@@ -52,3 +52,10 @@ export const saveAsFile = (filename, text) => {
|
|
|
52
52
|
element.click();
|
|
53
53
|
element.remove();
|
|
54
54
|
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get type from value in human readable format.
|
|
58
|
+
* @param {unknown} value - The value to check.
|
|
59
|
+
* @returns {string} Type in human readable format.
|
|
60
|
+
*/
|
|
61
|
+
export const getTypeFromValue = (value) => Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
|
package/src/util/string.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable unicorn/no-useless-undefined */
|
|
2
2
|
|
|
3
|
-
import { underscoreToCamelCase, capitalize, addLeadingZero } from './string.js';
|
|
3
|
+
import { underscoreToCamelCase, capitalize, addLeadingZero, getTypeFromValue } from './string.js';
|
|
4
4
|
|
|
5
5
|
test('Tests add leading zero', () => {
|
|
6
6
|
expect(addLeadingZero(1)).toBe('01');
|
|
@@ -46,3 +46,14 @@ test('Converts underscore to camelCase', () => {
|
|
|
46
46
|
expect(underscoreToCamelCase('test_variable')).toBe('testVariable');
|
|
47
47
|
expect(underscoreToCamelCase('test_variable_name')).toBe('testVariableName');
|
|
48
48
|
});
|
|
49
|
+
|
|
50
|
+
test('getDisplayValue', () => {
|
|
51
|
+
expect(getTypeFromValue('test')).toBe('string');
|
|
52
|
+
expect(getTypeFromValue(() => null)).toBe('function');
|
|
53
|
+
expect(getTypeFromValue([])).toBe('array');
|
|
54
|
+
expect(getTypeFromValue({})).toBe('object');
|
|
55
|
+
expect(getTypeFromValue(new Date())).toBe('date');
|
|
56
|
+
expect(getTypeFromValue(null)).toBe('null');
|
|
57
|
+
expect(getTypeFromValue(true)).toBe('boolean');
|
|
58
|
+
expect(getTypeFromValue(undefined)).toBe('undefined');
|
|
59
|
+
});
|
package/src/util/validate.js
CHANGED
|
@@ -113,7 +113,7 @@ export const isInstance = (value, type) => isFunction(type) && value instanceof
|
|
|
113
113
|
/**
|
|
114
114
|
* Validates `value` as `enum`.
|
|
115
115
|
* @param {unknown} value - Input value.
|
|
116
|
-
* @param {
|
|
116
|
+
* @param {(string | number)[] | Set<string | number> | Record<string | number, string | number>} choices - Enum list.
|
|
117
117
|
* @returns {boolean} `true` if `value` is `enum` type.
|
|
118
118
|
*/
|
|
119
119
|
export const isEnum = (value, choices) => {
|
|
@@ -34,23 +34,23 @@ export const HTTP_409_CONFLICT: 409;
|
|
|
34
34
|
export const HTTP_410_GONE: 410;
|
|
35
35
|
export const HTTP_411_LENGTH_REQUIRED: 411;
|
|
36
36
|
export const HTTP_412_PRECONDITION_FAILED: 412;
|
|
37
|
-
export const
|
|
38
|
-
export const
|
|
37
|
+
export const HTTP_413_CONTENT_TOO_LARGE: 413;
|
|
38
|
+
export const HTTP_414_URI_TOO_LONG: 414;
|
|
39
39
|
export const HTTP_415_UNSUPPORTED_MEDIA_TYPE: 415;
|
|
40
|
-
export const
|
|
40
|
+
export const HTTP_416_RANGE_NOT_SATISFIABLE: 416;
|
|
41
41
|
export const HTTP_417_EXPECTATION_FAILED: 417;
|
|
42
42
|
export const HTTP_418_IM_A_TEAPOT: 418;
|
|
43
43
|
export const HTTP_421_MISDIRECTED_REQUEST: 421;
|
|
44
|
-
export const
|
|
44
|
+
export const HTTP_422_UNPROCESSABLE_CONTENT: 422;
|
|
45
45
|
export const HTTP_423_LOCKED: 423;
|
|
46
46
|
export const HTTP_424_FAILED_DEPENDENCY: 424;
|
|
47
47
|
export const HTTP_425_TOO_EARLY: 425;
|
|
48
48
|
export const HTTP_426_UPGRADE_REQUIRED: 426;
|
|
49
49
|
export const HTTP_428_PRECONDITION_REQUIRED: 428;
|
|
50
50
|
export const HTTP_429_TOO_MANY_REQUESTS: 429;
|
|
51
|
-
export const HTTP_499_CLIENT_CLOSED_CONNECTION: 499;
|
|
52
51
|
export const HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE: 431;
|
|
53
52
|
export const HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS: 451;
|
|
53
|
+
export const HTTP_499_CLIENT_CLOSED_CONNECTION: 499;
|
|
54
54
|
export const HTTP_500_INTERNAL_SERVER_ERROR: 500;
|
|
55
55
|
export const HTTP_501_NOT_IMPLEMENTED: 501;
|
|
56
56
|
export const HTTP_502_BAD_GATEWAY: 502;
|
|
@@ -62,4 +62,70 @@ export const HTTP_507_INSUFFICIENT_STORAGE: 507;
|
|
|
62
62
|
export const HTTP_508_LOOP_DETECTED: 508;
|
|
63
63
|
export const HTTP_510_NOT_EXTENDED: 510;
|
|
64
64
|
export const HTTP_511_NETWORK_AUTHENTICATION_REQUIRED: 511;
|
|
65
|
+
export const HTTP_STATUS_MAP: {
|
|
66
|
+
100: string;
|
|
67
|
+
101: string;
|
|
68
|
+
102: string;
|
|
69
|
+
103: string;
|
|
70
|
+
200: string;
|
|
71
|
+
201: string;
|
|
72
|
+
202: string;
|
|
73
|
+
203: string;
|
|
74
|
+
204: string;
|
|
75
|
+
205: string;
|
|
76
|
+
206: string;
|
|
77
|
+
207: string;
|
|
78
|
+
208: string;
|
|
79
|
+
226: string;
|
|
80
|
+
300: string;
|
|
81
|
+
301: string;
|
|
82
|
+
302: string;
|
|
83
|
+
303: string;
|
|
84
|
+
304: string;
|
|
85
|
+
305: string;
|
|
86
|
+
306: string;
|
|
87
|
+
307: string;
|
|
88
|
+
308: string;
|
|
89
|
+
400: string;
|
|
90
|
+
401: string;
|
|
91
|
+
402: string;
|
|
92
|
+
403: string;
|
|
93
|
+
404: string;
|
|
94
|
+
405: string;
|
|
95
|
+
406: string;
|
|
96
|
+
407: string;
|
|
97
|
+
408: string;
|
|
98
|
+
409: string;
|
|
99
|
+
410: string;
|
|
100
|
+
411: string;
|
|
101
|
+
412: string;
|
|
102
|
+
413: string;
|
|
103
|
+
414: string;
|
|
104
|
+
415: string;
|
|
105
|
+
416: string;
|
|
106
|
+
417: string;
|
|
107
|
+
418: string;
|
|
108
|
+
421: string;
|
|
109
|
+
422: string;
|
|
110
|
+
423: string;
|
|
111
|
+
424: string;
|
|
112
|
+
425: string;
|
|
113
|
+
426: string;
|
|
114
|
+
428: string;
|
|
115
|
+
429: string;
|
|
116
|
+
431: string;
|
|
117
|
+
451: string;
|
|
118
|
+
499: string;
|
|
119
|
+
500: string;
|
|
120
|
+
501: string;
|
|
121
|
+
502: string;
|
|
122
|
+
503: string;
|
|
123
|
+
504: string;
|
|
124
|
+
505: string;
|
|
125
|
+
506: string;
|
|
126
|
+
507: string;
|
|
127
|
+
508: string;
|
|
128
|
+
510: string;
|
|
129
|
+
511: string;
|
|
130
|
+
};
|
|
65
131
|
//# sourceMappingURL=http_status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http_status.d.ts","sourceRoot":"","sources":["../../src/const/http_status.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http_status.d.ts","sourceRoot":"","sources":["../../src/const/http_status.js"],"names":[],"mappings":"AAGA,gCAAiC,GAAG,CAAC;AACrC,2CAA4C,GAAG,CAAC;AAChD,kCAAmC,GAAG,CAAC;AACvC,mCAAoC,GAAG,CAAC;AACxC,0BAA2B,GAAG,CAAC;AAC/B,+BAAgC,GAAG,CAAC;AACpC,gCAAiC,GAAG,CAAC;AACrC,qDAAsD,GAAG,CAAC;AAC1D,kCAAmC,GAAG,CAAC;AACvC,qCAAsC,GAAG,CAAC;AAC1C,uCAAwC,GAAG,CAAC;AAC5C,oCAAqC,GAAG,CAAC;AACzC,wCAAyC,GAAG,CAAC;AAC7C,+BAAgC,GAAG,CAAC;AACpC,wCAAyC,GAAG,CAAC;AAC7C,yCAA0C,GAAG,CAAC;AAC9C,6BAA8B,GAAG,CAAC;AAClC,iCAAkC,GAAG,CAAC;AACtC,oCAAqC,GAAG,CAAC;AACzC,iCAAkC,GAAG,CAAC;AACtC,gCAAiC,GAAG,CAAC;AACrC,0CAA2C,GAAG,CAAC;AAC/C,0CAA2C,GAAG,CAAC;AAC/C,mCAAoC,GAAG,CAAC;AACxC,oCAAqC,GAAG,CAAC;AACzC,wCAAyC,GAAG,CAAC;AAC7C,iCAAkC,GAAG,CAAC;AACtC,iCAAkC,GAAG,CAAC;AACtC,0CAA2C,GAAG,CAAC;AAC/C,sCAAuC,GAAG,CAAC;AAC3C,qDAAsD,GAAG,CAAC;AAC1D,uCAAwC,GAAG,CAAC;AAC5C,gCAAiC,GAAG,CAAC;AACrC,4BAA6B,GAAG,CAAC;AACjC,uCAAwC,GAAG,CAAC;AAC5C,2CAA4C,GAAG,CAAC;AAChD,yCAA0C,GAAG,CAAC;AAC9C,oCAAqC,GAAG,CAAC;AACzC,8CAA+C,GAAG,CAAC;AACnD,6CAA8C,GAAG,CAAC;AAClD,0CAA2C,GAAG,CAAC;AAC/C,mCAAoC,GAAG,CAAC;AACxC,2CAA4C,GAAG,CAAC;AAChD,6CAA8C,GAAG,CAAC;AAClD,8BAA+B,GAAG,CAAC;AACnC,yCAA0C,GAAG,CAAC;AAC9C,iCAAkC,GAAG,CAAC;AACtC,wCAAyC,GAAG,CAAC;AAC7C,6CAA8C,GAAG,CAAC;AAClD,yCAA0C,GAAG,CAAC;AAC9C,uDAAwD,GAAG,CAAC;AAC5D,qDAAsD,GAAG,CAAC;AAC1D,gDAAiD,GAAG,CAAC;AACrD,6CAA8C,GAAG,CAAC;AAClD,uCAAwC,GAAG,CAAC;AAC5C,mCAAoC,GAAG,CAAC;AACxC,2CAA4C,GAAG,CAAC;AAChD,uCAAwC,GAAG,CAAC;AAC5C,kDAAmD,GAAG,CAAC;AACvD,+CAAgD,GAAG,CAAC;AACpD,4CAA6C,GAAG,CAAC;AACjD,qCAAsC,GAAG,CAAC;AAC1C,oCAAqC,GAAG,CAAC;AACzC,uDAAwD,GAAG,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEE"}
|
package/types/index.d.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
export * from "./const/http_status.js";
|
|
2
2
|
export * from "./logging/const.js";
|
|
3
3
|
export * from "./pagelifecycle/const.js";
|
|
4
|
-
export * from "./pagelifecycle/event.js";
|
|
5
4
|
export * from "./pagelifecycle/typedef.js";
|
|
6
|
-
export * from "./pagelifecycle/util.js";
|
|
7
|
-
export * from "./util/async.js";
|
|
8
|
-
export * from "./util/error.js";
|
|
9
|
-
export * from "./util/number.js";
|
|
10
|
-
export * from "./util/object.js";
|
|
11
|
-
export * from "./util/query.js";
|
|
12
|
-
export * from "./util/state.js";
|
|
13
|
-
export * from "./util/string.js";
|
|
14
|
-
export * from "./util/typecheck.js";
|
|
15
5
|
export * from "./util/validate.js";
|
|
16
6
|
export { AbstractLogHandler } from "./logging/AbstractLogHandler.js";
|
|
17
7
|
export { ConsoleLogHandler } from "./logging/ConsoleLogHandler.js";
|
|
18
8
|
export { Logger } from "./logging/Logger.js";
|
|
19
9
|
export { OpenTelemetryLogHandler } from "./logging/OpenTelemetryLogHandler.js";
|
|
20
10
|
export { SentryLogHandler } from "./logging/SentryLogHandler.js";
|
|
11
|
+
export { typeChecker } from "./typecheck/TypeChecker.js";
|
|
12
|
+
export { TypeCheckError } from "./typecheck/TypeCheckError.js";
|
|
13
|
+
export { getErrorDetails } from "./util/error.js";
|
|
14
|
+
export { serverDataToState } from "./util/state.js";
|
|
21
15
|
export { formatLogMessage, getLogLevelName } from "./logging/util.js";
|
|
16
|
+
export { addPageLifecycleCallback, getDocumentState, getPageLifecycleEventEmitter, getPageLifecycleState, initPageLifecycle, isPageLifecycleInitialized } from "./pagelifecycle/util.js";
|
|
17
|
+
export { typeCheck, typeCheckArray, typeCheckEnum } from "./typecheck/util.js";
|
|
18
|
+
export { delayPromise, loadJSON } from "./util/async.js";
|
|
22
19
|
export { FetchError, fetchRetry, HTTP_0_ANY } from "./util/fetch.js";
|
|
20
|
+
export { addFloat, deg2rad, fixFloat, fixFloatPrecision, getRandomInt, isEqual, isGreater, isGreaterOrEqual, isInRange, isLess, isLessOrEqual, subFloat } from "./util/number.js";
|
|
21
|
+
export { purgeObject, deepMerge, getObjArrayPropSum, getObjValueByPath, setObjValueByPath } from "./util/object.js";
|
|
22
|
+
export { getURLParam, sanitizeURLParam } from "./util/query.js";
|
|
23
|
+
export { addLeadingZero, capitalize, getTypeFromValue, saveAsFile, underscoreToCamelCase } from "./util/string.js";
|
|
23
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenTelemetryLogHandler.d.ts","sourceRoot":"","sources":["../../src/logging/OpenTelemetryLogHandler.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OpenTelemetryLogHandler.d.ts","sourceRoot":"","sources":["../../src/logging/OpenTelemetryLogHandler.js"],"names":[],"mappings":"AAEA;IACE;;;;OAIG;IACH,mBAHW,MAAM,WACN,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,EAK9K;IADC,kBAJkB,OAAO,aAAa,EAAE,MAAM,aAAa,MAAM,SAAS,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,SAAS,KAAK,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAIvJ;CAmBzB;mCA7BkC,yBAAyB"}
|
|
@@ -8,4 +8,6 @@ export const DOCUMENT_STATE_FULLY_LOADED: "fullyLoaded";
|
|
|
8
8
|
export const DOCUMENT_STATE_COMPLETE: "complete";
|
|
9
9
|
export const DOCUMENT_STATE_INTERACTIVE: "interactive";
|
|
10
10
|
export const DOCUMENT_STATE_LOADING: "loading";
|
|
11
|
+
export const PAGE_LIFECYCLE_STATE_CHANGE_EVENT: "pageLifecycleStateChange";
|
|
12
|
+
export const DOCUMENT_STATE_CHANGE_EVENT: "documentStateChange";
|
|
11
13
|
//# sourceMappingURL=const.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/const.js"],"names":[],"mappings":"AAAA,0CAA2C,QAAQ,CAAC;AACpD,0CAA2C,QAAQ,CAAC;AACpD,2CAA4C,SAAS,CAAC;AACtD,0CAA2C,QAAQ,CAAC;AACpD,8CAA+C,YAAY,CAAC;AAE5D,wCAAyC,WAAW,CAAC;AACrD,0CAA2C,aAAa,CAAC;AACzD,sCAAuC,UAAU,CAAC;AAClD,yCAA0C,aAAa,CAAC;AACxD,qCAAsC,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/const.js"],"names":[],"mappings":"AAAA,0CAA2C,QAAQ,CAAC;AACpD,0CAA2C,QAAQ,CAAC;AACpD,2CAA4C,SAAS,CAAC;AACtD,0CAA2C,QAAQ,CAAC;AACpD,8CAA+C,YAAY,CAAC;AAE5D,wCAAyC,WAAW,CAAC;AACrD,0CAA2C,aAAa,CAAC;AACzD,sCAAuC,UAAU,CAAC;AAClD,yCAA0C,aAAa,CAAC;AACxD,qCAAsC,SAAS,CAAC;AAEhD,gDAAiD,0BAA0B,CAAC;AAC5E,0CAA2C,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/util.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/util.js"],"names":[],"mappings":"AAkGO,0CAyBN;AAMM,yCAFM,MAAM,GAAG,IAAI,GAAG,SAAS,CAE8B;AAM7D,oCAFM,OAAO,cAAc,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAEV;AAMnD,gDAFM,YAAY,CAOxB;AAMM,8CAFM,OAAO,CAEyC;AAOtD,gDAHI,OAAO,cAAc,EAAE,aAAa,GAAG,OAAO,cAAc,EAAE,kBAAkB,YAChF,MAAM,IAAI,QAMpB;6BA5J4B,eAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeCheckError.d.ts","sourceRoot":"","sources":["../../src/typecheck/TypeCheckError.js"],"names":[],"mappings":"AAAA;IACE;;;OAGG;IACH,qBAFW,MAAM,EAKhB;CACF"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
export class TypeCheckError extends TypeError {
|
|
2
|
-
/**
|
|
3
|
-
* Creates a new `TypeCheckError` instance.
|
|
4
|
-
* @param {string} message - Error message.
|
|
5
|
-
*/
|
|
6
|
-
constructor(message: string);
|
|
7
|
-
}
|
|
8
|
-
export function typeCheck<T>(value: unknown, validator: (value: unknown) => value is T): T;
|
|
9
|
-
export function typeCheckArray<T>(value: unknown[], validator: (value: unknown) => value is T): T[];
|
|
10
1
|
/**
|
|
11
2
|
* Export a single shared instance.
|
|
12
3
|
*/
|
|
@@ -24,18 +15,26 @@ declare class TypeChecker {
|
|
|
24
15
|
* @template T
|
|
25
16
|
* @param {unknown} value - The value to check.
|
|
26
17
|
* @param {(value: unknown) => value is T} validator - The validator to check with.
|
|
27
|
-
* @returns {T
|
|
18
|
+
* @returns {T} - The type checked value.
|
|
28
19
|
*/
|
|
29
|
-
check<T>(value: unknown, validator: (value: unknown) => value is T): T
|
|
20
|
+
check<T>(value: unknown, validator: (value: unknown) => value is T): T;
|
|
30
21
|
/**
|
|
31
22
|
* Type check an array of values.
|
|
32
23
|
* @template T
|
|
33
24
|
* @param {unknown[]} value - The value to check.
|
|
34
25
|
* @param {(value: unknown) => value is T} validator - The validator to check the array with.
|
|
35
|
-
* @returns {T[]
|
|
26
|
+
* @returns {T[]} - The type checked value.
|
|
27
|
+
*/
|
|
28
|
+
checkArray<T>(value: unknown[], validator: (value: unknown) => value is T): T[];
|
|
29
|
+
/**
|
|
30
|
+
* Type check an array of values.
|
|
31
|
+
* @template T
|
|
32
|
+
* @param {string | number} value - The value to check.
|
|
33
|
+
* @param {(string | number)[] | Set<string | number> | Record<string | number, string | number>} choices - Enum list.
|
|
34
|
+
* @returns {string | number} - The type checked value.
|
|
36
35
|
*/
|
|
37
|
-
|
|
36
|
+
checkEnum<T>(value: string | number, choices: (string | number)[] | Set<string | number> | Record<string | number, string | number>): string | number;
|
|
38
37
|
#private;
|
|
39
38
|
}
|
|
40
39
|
export {};
|
|
41
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=TypeChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeChecker.d.ts","sourceRoot":"","sources":["../../src/typecheck/TypeChecker.js"],"names":[],"mappings":"AAuFA;;GAEG;AACH,sCAA6C;AApF7C;IACE,0BAA0B;IAC1B,+BADW,WAAW,CACL;IAWjB;;;OAGG;IACH,wBAFW,OAAO,QAIjB;IAED;;;;;;OAMG;IACH,MALa,CAAC,SACH,OAAO,aACP,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,CAab;IAED;;;;;;OAMG;IACH,WALa,CAAC,SACH,OAAO,EAAE,aACT,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,EAAE,CAaf;IAED;;;;;;OAMG;IACH,UALa,CAAC,SACH,MAAM,GAAG,MAAM,WACf,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACnF,MAAM,GAAG,MAAM,CAY3B;;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function typeCheck<T>(value: unknown, validator: (value: unknown) => value is T): T;
|
|
2
|
+
export function typeCheckArray<T>(value: unknown[], validator: (value: unknown) => value is T): T[];
|
|
3
|
+
export function typeCheckEnum(value: string | number, choices: (string | number)[] | Set<string | number> | Record<string | number, string | number>): string | number;
|
|
4
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/typecheck/util.js"],"names":[],"mappings":"AAcO,0BANM,CAAC,SACH,OAAO,aACP,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,CAUb;AAUM,+BANM,CAAC,SACH,OAAO,EAAE,aACT,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,EAAE,CAUf;AASM,qCALI,MAAM,GAAG,MAAM,WACf,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACnF,MAAM,GAAG,MAAM,CAU3B"}
|
package/types/util/string.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export function addLeadingZero(value: number | string | null | undefined, size?:
|
|
|
2
2
|
export function capitalize(value: string | null | undefined): string | null;
|
|
3
3
|
export function underscoreToCamelCase(value: string): string;
|
|
4
4
|
export function saveAsFile(filename: string, text: string): void;
|
|
5
|
+
export function getTypeFromValue(value: unknown): string;
|
|
5
6
|
//# sourceMappingURL=string.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/util/string.js"],"names":[],"mappings":"AAMO,sCAJI,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,SAClC,MAAM,GACJ,MAAM,GAAG,IAAI,CAWzB;AAOM,kCAHI,MAAM,GAAG,IAAI,GAAG,SAAS,GACvB,MAAM,GAAG,IAAI,CAWzB;AAOM,6CAHI,MAAM,GACJ,MAAM,CAEmF;AAO/F,qCAHI,MAAM,QACN,MAAM,QAUhB"}
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/util/string.js"],"names":[],"mappings":"AAMO,sCAJI,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,SAClC,MAAM,GACJ,MAAM,GAAG,IAAI,CAWzB;AAOM,kCAHI,MAAM,GAAG,IAAI,GAAG,SAAS,GACvB,MAAM,GAAG,IAAI,CAWzB;AAOM,6CAHI,MAAM,GACJ,MAAM,CAEmF;AAO/F,qCAHI,MAAM,QACN,MAAM,QAUhB;AAOM,wCAHI,OAAO,GACL,MAAM,CAEwF"}
|
package/types/util/validate.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export function isNullOrUndefined(value: unknown): value is null | undefined;
|
|
|
13
13
|
export function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
14
14
|
export function isFunction(value: unknown): value is (...args: any[]) => any;
|
|
15
15
|
export function isInstance<T>(value: unknown, type: new (...args: any[]) => T): value is T;
|
|
16
|
-
export function isEnum(value: unknown, choices:
|
|
16
|
+
export function isEnum(value: unknown, choices: (string | number)[] | Set<string | number> | Record<string | number, string | number>): boolean;
|
|
17
17
|
export function isArrayOf<T>(values: unknown[], validator: (value: unknown) => value is T): values is T[];
|
|
18
18
|
export function isPlainObjectOf<T>(record: Record<string | number, unknown>, validator: (value: unknown) => value is T): record is Record<string | number, T>;
|
|
19
19
|
export function refineValidator<T>(base: (value: unknown) => value is T, predicate: (value: T) => boolean, name?: string | null): (value: unknown) => value is T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/util/validate.js"],"names":[],"mappings":"AASO,iCAHI,OAAO,GACL,KAAK,IAAI,OAAO,CAEiC;AAOvD,gCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAE0D;AAO/E,wCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAE2C;AAOhE,2CAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAE+C;AAOpE,iCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAEkD;AAOvE,yCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAE6C;AAOlE,4CAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAEiD;AAOtE,gCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAEgC;AAQrD,wBAJM,CAAC,SACH,OAAO,GACL,KAAK,IAAI,CAAC,EAAE,CAE6B;AAO/C,8BAHI,OAAO,GACL,KAAK,IAAI,IAAI,CAEqB;AAOxC,mCAHI,OAAO,GACL,KAAK,IAAI,SAAS,CAE0B;AAOlD,yCAHI,OAAO,GACL,KAAK,IAAI,IAAI,GAAG,SAAS,CAEyC;AAOxE,qCAHI,OAAO,GACL,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEsD;AAO5F,kCAHI,OAAO,GACL,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAEmB;AASzD,2BALM,CAAC,SACH,OAAO,QACP,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GACvB,KAAK,IAAI,CAAC,CAE6D;AAQ7E,8BAJI,OAAO,WACP,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/util/validate.js"],"names":[],"mappings":"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"}
|
package/src/util/typecheck.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Logger } from '../logging/Logger.js';
|
|
2
|
-
import { isArrayOf } from './validate.js';
|
|
3
|
-
|
|
4
|
-
const logger = new Logger('typecheck');
|
|
5
|
-
|
|
6
|
-
export class TypeCheckError extends TypeError {
|
|
7
|
-
/**
|
|
8
|
-
* Creates a new `TypeCheckError` instance.
|
|
9
|
-
* @param {string} message - Error message.
|
|
10
|
-
*/
|
|
11
|
-
constructor(message) {
|
|
12
|
-
super(message);
|
|
13
|
-
this.name = 'TypeCheckError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Type check a value using a validator.
|
|
19
|
-
* @template T
|
|
20
|
-
* @param {unknown} value - The value to check.
|
|
21
|
-
* @param {(value: unknown) => value is T} validator - The validator to check with.
|
|
22
|
-
* @returns {T} The type checked value.
|
|
23
|
-
* @throws {TypeCheckError}
|
|
24
|
-
*/
|
|
25
|
-
export const typeCheck = (value, validator) => {
|
|
26
|
-
if (!validator(value)) {
|
|
27
|
-
const name = validator.name || '<anonymous>';
|
|
28
|
-
const display = typeof value === 'string' ? `"${value}"` : Object.prototype.toString.call(value);
|
|
29
|
-
throw new TypeCheckError(`Validation failed: ${name} (${display})`);
|
|
30
|
-
}
|
|
31
|
-
return value;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Type check a value using a validator.
|
|
36
|
-
* @template T
|
|
37
|
-
* @param {unknown[]} value - The value to check.
|
|
38
|
-
* @param {(value: unknown) => value is T} validator - The validator to check the array with.
|
|
39
|
-
* @returns {T[]} The type checked value.
|
|
40
|
-
* @throws {TypeCheckError}
|
|
41
|
-
*/
|
|
42
|
-
export const typeCheckArray = (value, validator) => {
|
|
43
|
-
if (!isArrayOf(value, validator)) {
|
|
44
|
-
const name = validator.name || '<anonymous>';
|
|
45
|
-
const display = typeof value === 'string' ? `"${value}"` : Object.prototype.toString.call(value);
|
|
46
|
-
throw new TypeCheckError(`Validation failed: ${name} (${display})`);
|
|
47
|
-
}
|
|
48
|
-
return value;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
class TypeChecker {
|
|
52
|
-
/** @type {TypeChecker} */
|
|
53
|
-
static #instance;
|
|
54
|
-
|
|
55
|
-
/** @type {boolean} */
|
|
56
|
-
#swallowErrors = false;
|
|
57
|
-
|
|
58
|
-
constructor() {
|
|
59
|
-
if (TypeChecker.#instance === undefined) {
|
|
60
|
-
TypeChecker.#instance = this;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Enable or disable swallowing of TypeCheckErrors.
|
|
66
|
-
* @param {boolean} value - Swallow errors flag.
|
|
67
|
-
*/
|
|
68
|
-
setSwallowErrors(value) {
|
|
69
|
-
this.#swallowErrors = Boolean(value);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Type check a single value.
|
|
74
|
-
* @template T
|
|
75
|
-
* @param {unknown} value - The value to check.
|
|
76
|
-
* @param {(value: unknown) => value is T} validator - The validator to check with.
|
|
77
|
-
* @returns {T | null} - The type checked value.
|
|
78
|
-
*/
|
|
79
|
-
check(value, validator) {
|
|
80
|
-
try {
|
|
81
|
-
return typeCheck(value, validator);
|
|
82
|
-
} catch (error) {
|
|
83
|
-
if (this.#swallowErrors && error instanceof TypeCheckError) {
|
|
84
|
-
logger.exception('check', error);
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
throw error;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Type check an array of values.
|
|
93
|
-
* @template T
|
|
94
|
-
* @param {unknown[]} value - The value to check.
|
|
95
|
-
* @param {(value: unknown) => value is T} validator - The validator to check the array with.
|
|
96
|
-
* @returns {T[] | null} - The type checked value.
|
|
97
|
-
*/
|
|
98
|
-
checkArray(value, validator) {
|
|
99
|
-
try {
|
|
100
|
-
return typeCheckArray(value, validator);
|
|
101
|
-
} catch (error) {
|
|
102
|
-
if (this.#swallowErrors && error instanceof TypeCheckError) {
|
|
103
|
-
logger.exception('checkArray', error);
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
throw error;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Export a single shared instance.
|
|
113
|
-
*/
|
|
114
|
-
export const typeChecker = new TypeChecker();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/event.js"],"names":[],"mappings":"AAAA,gDAAiD,0BAA0B,CAAC;AAC5E,0CAA2C,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../src/util/typecheck.js"],"names":[],"mappings":"AAKA;IACE;;;OAGG;IACH,qBAFW,MAAM,EAKhB;CACF;AAUM,0BANM,CAAC,SACH,OAAO,aACP,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,CAUb;AAUM,+BANM,CAAC,SACH,OAAO,EAAE,aACT,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,EAAE,CAUf;AA8DD;;GAEG;AACH,sCAA6C;AA/D7C;IACE,0BAA0B;IAC1B,+BADW,WAAW,CACL;IAWjB;;;OAGG;IACH,wBAFW,OAAO,QAIjB;IAED;;;;;;OAMG;IACH,MALa,CAAC,SACH,OAAO,aACP,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,GAAG,IAAI,CAYpB;IAED;;;;;;OAMG;IACH,WALa,CAAC,SACH,OAAO,EAAE,aACT,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAC5B,CAAC,EAAE,GAAG,IAAI,CAYtB;;CACF"}
|