@vpmedia/simplify 1.73.0 → 1.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/const/http_status.d.ts +66 -0
  3. package/dist/const/http_status.d.ts.map +1 -0
  4. package/dist/const/http_status.js +133 -0
  5. package/dist/const/http_status.js.map +1 -0
  6. package/dist/index.d.ts +34 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/{src → dist}/index.js +3 -20
  9. package/dist/index.js.map +1 -0
  10. package/dist/logging/AbstractLogHandler.d.ts +17 -0
  11. package/dist/logging/AbstractLogHandler.d.ts.map +1 -0
  12. package/dist/logging/AbstractLogHandler.js +16 -0
  13. package/dist/logging/AbstractLogHandler.js.map +1 -0
  14. package/dist/logging/ConsoleLogHandler.d.ts +13 -0
  15. package/dist/logging/ConsoleLogHandler.d.ts.map +1 -0
  16. package/dist/logging/ConsoleLogHandler.js +41 -0
  17. package/dist/logging/ConsoleLogHandler.js.map +1 -0
  18. package/dist/logging/Logger.d.ts +19 -0
  19. package/dist/logging/Logger.d.ts.map +1 -0
  20. package/dist/logging/Logger.js +51 -0
  21. package/dist/logging/Logger.js.map +1 -0
  22. package/dist/logging/OpenTelemetryLogHandler.d.ts +15 -0
  23. package/dist/logging/OpenTelemetryLogHandler.d.ts.map +1 -0
  24. package/dist/logging/OpenTelemetryLogHandler.js +21 -0
  25. package/dist/logging/OpenTelemetryLogHandler.js.map +1 -0
  26. package/dist/logging/SentryLogHandler.d.ts +13 -0
  27. package/dist/logging/SentryLogHandler.d.ts.map +1 -0
  28. package/dist/logging/SentryLogHandler.js +36 -0
  29. package/dist/logging/SentryLogHandler.js.map +1 -0
  30. package/dist/logging/const.d.ts +14 -0
  31. package/dist/logging/const.d.ts.map +1 -0
  32. package/dist/logging/const.js +21 -0
  33. package/dist/logging/const.js.map +1 -0
  34. package/dist/logging/util.d.ts +14 -0
  35. package/dist/logging/util.d.ts.map +1 -0
  36. package/dist/logging/util.js +34 -0
  37. package/dist/logging/util.js.map +1 -0
  38. package/dist/pagelifecycle/const.d.ts +15 -0
  39. package/dist/pagelifecycle/const.d.ts.map +1 -0
  40. package/dist/pagelifecycle/const.js +27 -0
  41. package/dist/pagelifecycle/const.js.map +1 -0
  42. package/dist/pagelifecycle/typedef.d.ts +4 -0
  43. package/dist/pagelifecycle/typedef.d.ts.map +1 -0
  44. package/dist/pagelifecycle/typedef.js +2 -0
  45. package/dist/pagelifecycle/typedef.js.map +1 -0
  46. package/dist/pagelifecycle/util.d.ts +31 -0
  47. package/dist/pagelifecycle/util.d.ts.map +1 -0
  48. package/dist/pagelifecycle/util.js +117 -0
  49. package/dist/pagelifecycle/util.js.map +1 -0
  50. package/dist/typecheck/TypeCheckError.d.ts +11 -0
  51. package/dist/typecheck/TypeCheckError.d.ts.map +1 -0
  52. package/dist/typecheck/TypeCheckError.js +12 -0
  53. package/dist/typecheck/TypeCheckError.js.map +1 -0
  54. package/dist/typecheck/TypeChecker.d.ts +27 -0
  55. package/dist/typecheck/TypeChecker.d.ts.map +1 -0
  56. package/dist/typecheck/TypeChecker.js +69 -0
  57. package/dist/typecheck/TypeChecker.js.map +1 -0
  58. package/dist/typecheck/util.d.ts +17 -0
  59. package/dist/typecheck/util.d.ts.map +1 -0
  60. package/dist/typecheck/util.js +42 -0
  61. package/dist/typecheck/util.js.map +1 -0
  62. package/dist/util/async.d.ts +13 -0
  63. package/dist/util/async.d.ts.map +1 -0
  64. package/dist/util/async.js +39 -0
  65. package/dist/util/async.js.map +1 -0
  66. package/dist/util/error.d.ts +16 -0
  67. package/dist/util/error.d.ts.map +1 -0
  68. package/dist/util/error.js +27 -0
  69. package/dist/util/error.js.map +1 -0
  70. package/dist/util/event_emitter.d.ts +42 -0
  71. package/dist/util/event_emitter.d.ts.map +1 -0
  72. package/dist/util/event_emitter.js +127 -0
  73. package/dist/util/event_emitter.js.map +1 -0
  74. package/dist/util/fetch.d.ts +22 -0
  75. package/dist/util/fetch.d.ts.map +1 -0
  76. package/dist/util/fetch.js +75 -0
  77. package/dist/util/fetch.js.map +1 -0
  78. package/dist/util/number.d.ts +23 -0
  79. package/dist/util/number.d.ts.map +1 -0
  80. package/dist/util/number.js +52 -0
  81. package/dist/util/number.js.map +1 -0
  82. package/dist/util/object.d.ts +24 -0
  83. package/dist/util/object.d.ts.map +1 -0
  84. package/dist/util/object.js +83 -0
  85. package/dist/util/object.js.map +1 -0
  86. package/dist/util/query.d.ts +11 -0
  87. package/dist/util/query.d.ts.map +1 -0
  88. package/dist/util/query.js +24 -0
  89. package/dist/util/query.js.map +1 -0
  90. package/dist/util/state.d.ts +5 -0
  91. package/dist/util/state.d.ts.map +1 -0
  92. package/dist/util/state.js +19 -0
  93. package/dist/util/state.js.map +1 -0
  94. package/dist/util/string.d.ts +25 -0
  95. package/dist/util/string.d.ts.map +1 -0
  96. package/dist/util/string.js +59 -0
  97. package/dist/util/string.js.map +1 -0
  98. package/dist/util/uuid.d.ts +13 -0
  99. package/dist/util/uuid.d.ts.map +1 -0
  100. package/dist/util/uuid.js +27 -0
  101. package/dist/util/uuid.js.map +1 -0
  102. package/dist/util/validate.d.ts +106 -0
  103. package/dist/util/validate.d.ts.map +1 -0
  104. package/dist/util/validate.js +139 -0
  105. package/dist/util/validate.js.map +1 -0
  106. package/package.json +31 -16
  107. package/src/const/http_status.test.ts +7 -0
  108. package/src/const/{http_status.js → http_status.ts} +1 -1
  109. package/src/index.ts +51 -0
  110. package/src/logging/AbstractLogHandler.ts +31 -0
  111. package/src/logging/{ConsoleLogHandler.js → ConsoleLogHandler.ts} +15 -13
  112. package/src/logging/Logger.test.ts +69 -0
  113. package/src/logging/Logger.ts +77 -0
  114. package/src/logging/OpenTelemetryLogHandler.ts +40 -0
  115. package/src/logging/SentryLogHandler.ts +44 -0
  116. package/src/logging/{const.js → const.ts} +1 -1
  117. package/src/logging/util.test.ts +33 -0
  118. package/src/logging/util.ts +36 -0
  119. package/src/pagelifecycle/{const.js → const.ts} +2 -2
  120. package/src/pagelifecycle/typedef.ts +5 -0
  121. package/src/pagelifecycle/util.test.ts +99 -0
  122. package/src/pagelifecycle/{util.js → util.ts} +14 -27
  123. package/src/typecheck/{TypeCheckError.js → TypeCheckError.ts} +7 -3
  124. package/src/typecheck/TypeChecker.test.ts +70 -0
  125. package/src/typecheck/{TypeChecker.js → TypeChecker.ts} +10 -27
  126. package/src/typecheck/util.test.ts +36 -0
  127. package/src/typecheck/util.ts +50 -0
  128. package/src/util/async.test.ts +74 -0
  129. package/src/util/{async.js → async.ts} +3 -11
  130. package/src/util/error.test.ts +32 -0
  131. package/src/util/error.ts +37 -0
  132. package/src/util/event_emitter.test.ts +228 -0
  133. package/src/util/event_emitter.ts +147 -0
  134. package/src/util/fetch.test.ts +62 -0
  135. package/src/util/{fetch.js → fetch.ts} +40 -31
  136. package/src/util/number.test.ts +124 -0
  137. package/src/util/number.ts +58 -0
  138. package/src/util/object.test.ts +203 -0
  139. package/src/util/{object.js → object.ts} +14 -21
  140. package/src/util/query.test.ts +71 -0
  141. package/src/util/query.ts +35 -0
  142. package/src/util/state.test.ts +47 -0
  143. package/src/util/{state.js → state.ts} +3 -6
  144. package/src/util/string.test.ts +64 -0
  145. package/src/util/string.ts +65 -0
  146. package/src/util/uuid.test.ts +53 -0
  147. package/src/util/uuid.ts +31 -0
  148. package/src/util/validate.test.ts +309 -0
  149. package/src/util/validate.ts +230 -0
  150. package/.vscode/extensions.json +0 -6
  151. package/.vscode/settings.json +0 -27
  152. package/src/logging/AbstractLogHandler.js +0 -23
  153. package/src/logging/Logger.js +0 -115
  154. package/src/logging/OpenTelemetryLogHandler.js +0 -30
  155. package/src/logging/SentryLogHandler.js +0 -46
  156. package/src/logging/util.js +0 -41
  157. package/src/pagelifecycle/typedef.js +0 -9
  158. package/src/typecheck/util.js +0 -60
  159. package/src/util/error.js +0 -33
  160. package/src/util/event_emitter.js +0 -196
  161. package/src/util/number.js +0 -118
  162. package/src/util/query.js +0 -32
  163. package/src/util/string.js +0 -76
  164. package/src/util/uuid.js +0 -35
  165. package/src/util/validate.js +0 -247
  166. package/types/const/http_status.d.ts +0 -131
  167. package/types/const/http_status.d.ts.map +0 -1
  168. package/types/index.d.ts +0 -26
  169. package/types/index.d.ts.map +0 -1
  170. package/types/logging/AbstractLogHandler.d.ts +0 -20
  171. package/types/logging/AbstractLogHandler.d.ts.map +0 -1
  172. package/types/logging/ConsoleLogHandler.d.ts +0 -9
  173. package/types/logging/ConsoleLogHandler.d.ts.map +0 -1
  174. package/types/logging/Logger.d.ts +0 -66
  175. package/types/logging/Logger.d.ts.map +0 -1
  176. package/types/logging/OpenTelemetryLogHandler.d.ts +0 -11
  177. package/types/logging/OpenTelemetryLogHandler.d.ts.map +0 -1
  178. package/types/logging/SentryLogHandler.d.ts +0 -9
  179. package/types/logging/SentryLogHandler.d.ts.map +0 -1
  180. package/types/logging/const.d.ts +0 -14
  181. package/types/logging/const.d.ts.map +0 -1
  182. package/types/logging/util.d.ts +0 -4
  183. package/types/logging/util.d.ts.map +0 -1
  184. package/types/pagelifecycle/const.d.ts +0 -15
  185. package/types/pagelifecycle/const.d.ts.map +0 -1
  186. package/types/pagelifecycle/typedef.d.ts +0 -4
  187. package/types/pagelifecycle/typedef.d.ts.map +0 -1
  188. package/types/pagelifecycle/util.d.ts +0 -8
  189. package/types/pagelifecycle/util.d.ts.map +0 -1
  190. package/types/typecheck/TypeCheckError.d.ts +0 -13
  191. package/types/typecheck/TypeCheckError.d.ts.map +0 -1
  192. package/types/typecheck/TypeChecker.d.ts +0 -40
  193. package/types/typecheck/TypeChecker.d.ts.map +0 -1
  194. package/types/typecheck/util.d.ts +0 -4
  195. package/types/typecheck/util.d.ts.map +0 -1
  196. package/types/util/async.d.ts +0 -4
  197. package/types/util/async.d.ts.map +0 -1
  198. package/types/util/error.d.ts +0 -3
  199. package/types/util/error.d.ts.map +0 -1
  200. package/types/util/event_emitter.d.ts +0 -69
  201. package/types/util/event_emitter.d.ts.map +0 -1
  202. package/types/util/fetch.d.ts +0 -22
  203. package/types/util/fetch.d.ts.map +0 -1
  204. package/types/util/number.d.ts +0 -11
  205. package/types/util/number.d.ts.map +0 -1
  206. package/types/util/object.d.ts +0 -6
  207. package/types/util/object.d.ts.map +0 -1
  208. package/types/util/query.d.ts +0 -3
  209. package/types/util/query.d.ts.map +0 -1
  210. package/types/util/state.d.ts +0 -2
  211. package/types/util/state.d.ts.map +0 -1
  212. package/types/util/string.d.ts +0 -7
  213. package/types/util/string.d.ts.map +0 -1
  214. package/types/util/uuid.d.ts +0 -4
  215. package/types/util/uuid.d.ts.map +0 -1
  216. package/types/util/validate.d.ts +0 -45
  217. package/types/util/validate.d.ts.map +0 -1
@@ -1,76 +0,0 @@
1
- /**
2
- * Add leading zeros to a value to ensure it has a minimum width.
3
- * @param {number | string | null | undefined} value - The value to pad with leading zeros.
4
- * @param {number} size - The minimum width of the resulting string.
5
- * @returns {string | null} The value padded with leading zeros or null if the input is null/undefined.
6
- */
7
- export const addLeadingZero = (value, size = 2) => {
8
- if (value === null || value === undefined) {
9
- return null;
10
- }
11
- value = value.toString();
12
- while (value.length < size) {
13
- value = `0${value}`;
14
- }
15
- return value;
16
- };
17
-
18
- /**
19
- * Capitalize a string.
20
- * @param {string | null | undefined} value - The input string to capitalize.
21
- * @returns {string | null} The capitalized string or null if the input is null/undefined.
22
- */
23
- export const capitalize = (value) => {
24
- if (value === null || value === undefined) {
25
- return null;
26
- }
27
- if (!value || value?.length === 0) {
28
- return value;
29
- }
30
- const normValue = value.toLowerCase();
31
- return normValue.charAt(0).toUpperCase() + normValue.slice(1);
32
- };
33
-
34
- /**
35
- * Converts underscore case string to camel case.
36
- * @param {string} value - The input string in underscore case.
37
- * @returns {string} The output string in camel case.
38
- */
39
- export const underscoreToCamelCase = (value) => value.replaceAll(/(_\w)/gu, (m) => m[1].toUpperCase());
40
-
41
- /**
42
- * Saves text file.
43
- * @param {string} filename - File name.
44
- * @param {string} text - File content.
45
- */
46
- export const saveAsFile = (filename, text) => {
47
- const element = document.createElement('a');
48
- element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`);
49
- element.setAttribute('download', filename);
50
- element.style.display = 'none';
51
- document.body.append(element);
52
- element.click();
53
- element.remove();
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();
62
-
63
- /**
64
- * Get value in human readable format.
65
- * @param {unknown} value - The value to check.
66
- * @returns {string} Value in human readable format.
67
- */
68
- export const getDisplayValue = (value) => {
69
- if (typeof value === 'string') {
70
- return `"${value}"`;
71
- }
72
- if (typeof value === 'object') {
73
- return JSON.stringify(value);
74
- }
75
- return String(value);
76
- };
package/src/util/uuid.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * Convert a byte (0–255) to a 2‑character hex string.
3
- * @param {number} byte - Byte value.
4
- * @returns {string} Hex value.
5
- */
6
- export const byteToHex = (byte) => (byte >>> 4).toString(16) + (byte & 0b1111).toString(16);
7
-
8
- /**
9
- * UUIDv4 fallback generator (RFC 4122 compliant).
10
- * @returns {string} UUIDv4 string.
11
- */
12
- export const randomUUIDFallback = () => {
13
- const bytes = crypto.getRandomValues
14
- ? crypto.getRandomValues(new Uint8Array(16))
15
- : Array.from({ length: 16 }, () => Math.floor(Math.random() * 256));
16
-
17
- // RFC 4122 version & variant bits
18
- bytes[6] = (bytes[6] & 0x0f) | 0x40;
19
- bytes[8] = (bytes[8] & 0x3f) | 0x80;
20
-
21
- let uuid = '';
22
- for (const [index, byte] of bytes.entries()) {
23
- if (index === 4 || index === 6 || index === 8 || index === 10) {
24
- uuid += '-';
25
- }
26
- uuid += byteToHex(byte);
27
- }
28
- return uuid;
29
- };
30
-
31
- /**
32
- * Crypto UUIDv4 wrapper with fallback.
33
- * @returns {string} UUIDv4 string.
34
- */
35
- export const uuidv4 = () => (typeof crypto.randomUUID === 'function' ? crypto.randomUUID() : randomUUIDFallback());
@@ -1,247 +0,0 @@
1
- import { isEqual, isGreater, isGreaterOrEqual, isInRange, isLess, isLessOrEqual } from './number.js';
2
-
3
- /**
4
- * Validates `value` as `boolean`.
5
- * @param {unknown} value - Input value.
6
- * @returns {value is boolean} `true` if `value` is `boolean` type.
7
- */
8
- export const isBoolean = (value) => typeof value === 'boolean';
9
-
10
- /**
11
- * Validates `value` as `number`.
12
- * @param {unknown} value - Input value.
13
- * @returns {value is number} `true` if `value` is `number` type.
14
- */
15
- export const isNumber = (value) => typeof value === 'number' && Number.isFinite(value);
16
-
17
- /**
18
- * Validates `value` as positive `number`.
19
- * @param {unknown} value - Input value.
20
- * @returns {value is number} `true` if `value` is `number` type with positive value.
21
- */
22
- export const isPositiveNumber = (value) => isNumber(value) && value > 0;
23
-
24
- /**
25
- * Validates `value` as non-negative `number`.
26
- * @param {unknown} value - Input value.
27
- * @returns {value is number} `true` if `value` is `number` type with non-negative value.
28
- */
29
- export const isNonNegativeNumber = (value) => isNumber(value) && value >= 0;
30
-
31
- /**
32
- * Validates `value` as `integer`.
33
- * @param {unknown} value - Input value.
34
- * @returns {value is number} `true` if `value` is `integer` type.
35
- */
36
- export const isInteger = (value) => isNumber(value) && Number.isInteger(value);
37
-
38
- /**
39
- * Validates `value` as positive `integer`.
40
- * @param {unknown} value - Input value.
41
- * @returns {value is number} `true` if `value` is `integer` type with positive value.
42
- */
43
- export const isPositiveInteger = (value) => isInteger(value) && value > 0;
44
-
45
- /**
46
- * Validates `value` as non-negative `integer`.
47
- * @param {unknown} value - Input value.
48
- * @returns {value is number} `true` if `value` is `integer` type with non-negative value.
49
- */
50
- export const isNonNegativeInteger = (value) => isInteger(value) && value >= 0;
51
-
52
- /**
53
- * Validates `value` as `string`.
54
- * @param {unknown} value - Input value.
55
- * @returns {value is string} `true` if `value` is `string` type.
56
- */
57
- export const isString = (value) => typeof value === 'string';
58
-
59
- /**
60
- * Validates `value` as `array`.
61
- * @template T
62
- * @param {unknown} value - Input value.
63
- * @returns {value is T[]} `true` if `value` is `array` type.
64
- */
65
- export const isArray = (value) => Array.isArray(value);
66
-
67
- /**
68
- * Validates `value` as `null`
69
- * @param {unknown} value - Input value.
70
- * @returns {value is null} `true` if `value` is `null` type.
71
- */
72
- export const isNull = (value) => value === null;
73
-
74
- /**
75
- * Validates `value` as `undefined`
76
- * @param {unknown} value - Input value.
77
- * @returns {value is undefined} `true` if `value` is `undefined` type.
78
- */
79
- export const isUndefined = (value) => value === undefined;
80
-
81
- /**
82
- * Validates `value` as `null` or `undefined`
83
- * @param {unknown} value - Input value.
84
- * @returns {value is null | undefined} `true` if `value` is `null` or `undefined` type.
85
- */
86
- export const isNullOrUndefined = (value) => isNull(value) || isUndefined(value);
87
-
88
- /**
89
- * Validates `value` as plain `object`.
90
- * @param {unknown} value - Input value.
91
- * @returns {value is Record<string, unknown>} `true` if `value` is `object` type.
92
- */
93
- export const isPlainObject = (value) => Object.prototype.toString.call(value) === '[object Object]';
94
-
95
- /**
96
- * Validates `value` as `function`.
97
- * @param {unknown} value - Input value.
98
- * @returns {value is (...args: any[]) => any} `true` if `value` is `function` type.
99
- */
100
- export const isFunction = (value) => typeof value === 'function';
101
-
102
- /**
103
- * Validates `value` as `type`
104
- * @template T
105
- * @param {unknown} value - The value to test.
106
- * @param {new (...args: any[]) => T} type - A class or constructor function.
107
- * @returns {value is T} `true` if `value` is an instance of `type`.
108
- */
109
- export const isInstance = (value, type) => isFunction(type) && value instanceof type;
110
-
111
- /**
112
- * Validates `value` as `enum`.
113
- * @param {unknown} value - Input value.
114
- * @param {(string | number)[] | Set<string | number> | Record<string | number, string | number>} choices - Enum list.
115
- * @returns {boolean} `true` if `value` is `enum` type.
116
- */
117
- export const isEnum = (value, choices) => {
118
- if (!isString(value) && !isNumber(value)) {
119
- return false;
120
- }
121
- return (
122
- (isArray(choices) && choices.includes(value)) ||
123
- (isPlainObject(choices) && Object.values(choices).includes(value)) ||
124
- (isInstance(choices, Set) && choices.has(value))
125
- );
126
- };
127
-
128
- /**
129
- * Type check an array of values using a validator.
130
- * @template T
131
- * @param {unknown[]} values - The value to check.
132
- * @param {(value: unknown) => value is T} validator - The validator to check with.
133
- * @returns {values is T[]} `true` if `values` has only `validator` checked types.
134
- */
135
- export const isArrayOf = (values, validator) => {
136
- if (!isArray(values)) {
137
- return false;
138
- }
139
- for (const value of values) {
140
- if (!validator(value)) {
141
- return false;
142
- }
143
- }
144
- return true;
145
- };
146
-
147
- /**
148
- * Type check a plain object of values using a validator.
149
- * @template T
150
- * @param {Record<string | number, unknown>} record - The value to check.
151
- * @param {(value: unknown) => value is T} validator - The validator to check with.
152
- * @returns {record is Record<string | number, T>} `true` if `values` has only `validator` checked types.
153
- */
154
- export const isPlainObjectOf = (record, validator) => {
155
- if (!isPlainObject(record)) {
156
- return false;
157
- }
158
- for (const value of Object.values(record)) {
159
- if (!validator(value)) {
160
- return false;
161
- }
162
- }
163
- return true;
164
- };
165
-
166
- /**
167
- * Refine a base validator with an extra condition.
168
- * @template T
169
- * @param {(value: unknown) => value is T} base - The base validator.
170
- * @param {(value: T) => boolean} predicate - Extra condition validator.
171
- * @param {string | null} name - Refined validator name.
172
- * @returns {(value: unknown) => value is T} The refined validator.
173
- */
174
- export const refineValidator = (base, predicate, name = null) => {
175
- const refinedValidator = (value) => base(value) && predicate(value);
176
- Object.defineProperty(refinedValidator, 'name', {
177
- value: isString(name) ? name : `${base.name}Refined`,
178
- });
179
- // @ts-expect-error
180
- return refinedValidator;
181
- };
182
-
183
- //
184
- // Refined validators
185
- //
186
-
187
- /**
188
- * Logical OR of two validators.
189
- * @template A, B
190
- * @param {(value: unknown) => value is A} a - Validator A.
191
- * @param {(value: unknown) => value is B} b - Validator B.
192
- * @returns {(value: unknown) => value is A | B} `true` if `value` is any of the checked types.
193
- */
194
- export const isAnyOf = (a, b) => (value) => a(value) || b(value);
195
-
196
- export const isNumberGreater = (min) => refineValidator(isNumber, (value) => isGreater(value, min));
197
-
198
- export const isNumberGreaterOrEqual = (min) => refineValidator(isNumber, (value) => isGreaterOrEqual(value, min));
199
-
200
- export const isNumberLess = (min) => refineValidator(isNumber, (value) => isLess(value, min));
201
-
202
- export const isNumberLessOrEqual = (min) => refineValidator(isNumber, (value) => isLessOrEqual(value, min));
203
-
204
- export const isNumberInRange = (min, max) => refineValidator(isNumber, (value) => isInRange(value, min, max));
205
-
206
- export const isNumberEqual = (expected) => refineValidator(isNumber, (value) => isEqual(value, expected));
207
-
208
- export const isIntegerGreater = (min) => refineValidator(isInteger, (value) => isGreater(value, min));
209
-
210
- export const isIntegerGreaterOrEqual = (min) => refineValidator(isInteger, (value) => isGreaterOrEqual(value, min));
211
-
212
- export const isIntegerLess = (min) => refineValidator(isInteger, (value) => isLess(value, min));
213
-
214
- export const isIntegerLessOrEqual = (min) => refineValidator(isInteger, (value) => isLessOrEqual(value, min));
215
-
216
- export const isIntegerInRange = (min, max) => refineValidator(isInteger, (value) => isInRange(value, min, max));
217
-
218
- export const isIntegerEqual = (expected) => refineValidator(isInteger, (value) => isEqual(value, expected));
219
-
220
- export const isStringLengthGreater = (min) => refineValidator(isString, (value) => isGreater(value.length, min));
221
-
222
- export const isStringLengthGreaterOrEqual = (min) =>
223
- refineValidator(isString, (value) => isGreaterOrEqual(value.length, min));
224
-
225
- export const isStringLengthLess = (min) => refineValidator(isString, (value) => isLess(value.length, min));
226
-
227
- export const isStringLengthLessOrEqual = (min) =>
228
- refineValidator(isString, (value) => isLessOrEqual(value.length, min));
229
-
230
- export const isStringLengthInRange = (min, max) =>
231
- refineValidator(isString, (value) => isInRange(value.length, min, max));
232
-
233
- export const isStringLengthEqual = (expected) => refineValidator(isString, (value) => isEqual(value.length, expected));
234
-
235
- export const isArrayLengthGreater = (min) => refineValidator(isArray, (value) => isGreater(value.length, min));
236
-
237
- export const isArrayLengthGreaterOrEqual = (min) =>
238
- refineValidator(isArray, (value) => isGreaterOrEqual(value.length, min));
239
-
240
- export const isArrayLengthLess = (min) => refineValidator(isArray, (value) => isLess(value.length, min));
241
-
242
- export const isArrayLengthLessOrEqual = (min) => refineValidator(isArray, (value) => isLessOrEqual(value.length, min));
243
-
244
- export const isArrayLengthInRange = (min, max) =>
245
- refineValidator(isArray, (value) => isInRange(value.length, min, max));
246
-
247
- export const isArrayLengthEqual = (expected) => refineValidator(isArray, (value) => isEqual(value.length, expected));
@@ -1,131 +0,0 @@
1
- export const HTTP_100_CONTINUE: 100;
2
- export const HTTP_101_SWITCHING_PROTOCOLS: 101;
3
- export const HTTP_102_PROCESSING: 102;
4
- export const HTTP_103_EARLY_HINTS: 103;
5
- export const HTTP_200_OK: 200;
6
- export const HTTP_201_CREATED: 201;
7
- export const HTTP_202_ACCEPTED: 202;
8
- export const HTTP_203_NON_AUTHORITATIVE_INFORMATION: 203;
9
- export const HTTP_204_NO_CONTENT: 204;
10
- export const HTTP_205_RESET_CONTENT: 205;
11
- export const HTTP_206_PARTIAL_CONTENT: 206;
12
- export const HTTP_207_MULTI_STATUS: 207;
13
- export const HTTP_208_ALREADY_REPORTED: 208;
14
- export const HTTP_226_IM_USED: 226;
15
- export const HTTP_300_MULTIPLE_CHOICES: 300;
16
- export const HTTP_301_MOVED_PERMANENTLY: 301;
17
- export const HTTP_302_FOUND: 302;
18
- export const HTTP_303_SEE_OTHER: 303;
19
- export const HTTP_304_NOT_MODIFIED: 304;
20
- export const HTTP_305_USE_PROXY: 305;
21
- export const HTTP_306_RESERVED: 306;
22
- export const HTTP_307_TEMPORARY_REDIRECT: 307;
23
- export const HTTP_308_PERMANENT_REDIRECT: 308;
24
- export const HTTP_400_BAD_REQUEST: 400;
25
- export const HTTP_401_UNAUTHORIZED: 401;
26
- export const HTTP_402_PAYMENT_REQUIRED: 402;
27
- export const HTTP_403_FORBIDDEN: 403;
28
- export const HTTP_404_NOT_FOUND: 404;
29
- export const HTTP_405_METHOD_NOT_ALLOWED: 405;
30
- export const HTTP_406_NOT_ACCEPTABLE: 406;
31
- export const HTTP_407_PROXY_AUTHENTICATION_REQUIRED: 407;
32
- export const HTTP_408_REQUEST_TIMEOUT: 408;
33
- export const HTTP_409_CONFLICT: 409;
34
- export const HTTP_410_GONE: 410;
35
- export const HTTP_411_LENGTH_REQUIRED: 411;
36
- export const HTTP_412_PRECONDITION_FAILED: 412;
37
- export const HTTP_413_CONTENT_TOO_LARGE: 413;
38
- export const HTTP_414_URI_TOO_LONG: 414;
39
- export const HTTP_415_UNSUPPORTED_MEDIA_TYPE: 415;
40
- export const HTTP_416_RANGE_NOT_SATISFIABLE: 416;
41
- export const HTTP_417_EXPECTATION_FAILED: 417;
42
- export const HTTP_418_IM_A_TEAPOT: 418;
43
- export const HTTP_421_MISDIRECTED_REQUEST: 421;
44
- export const HTTP_422_UNPROCESSABLE_CONTENT: 422;
45
- export const HTTP_423_LOCKED: 423;
46
- export const HTTP_424_FAILED_DEPENDENCY: 424;
47
- export const HTTP_425_TOO_EARLY: 425;
48
- export const HTTP_426_UPGRADE_REQUIRED: 426;
49
- export const HTTP_428_PRECONDITION_REQUIRED: 428;
50
- export const HTTP_429_TOO_MANY_REQUESTS: 429;
51
- export const HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE: 431;
52
- export const HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS: 451;
53
- export const HTTP_499_CLIENT_CLOSED_CONNECTION: 499;
54
- export const HTTP_500_INTERNAL_SERVER_ERROR: 500;
55
- export const HTTP_501_NOT_IMPLEMENTED: 501;
56
- export const HTTP_502_BAD_GATEWAY: 502;
57
- export const HTTP_503_SERVICE_UNAVAILABLE: 503;
58
- export const HTTP_504_GATEWAY_TIMEOUT: 504;
59
- export const HTTP_505_HTTP_VERSION_NOT_SUPPORTED: 505;
60
- export const HTTP_506_VARIANT_ALSO_NEGOTIATES: 506;
61
- export const HTTP_507_INSUFFICIENT_STORAGE: 507;
62
- export const HTTP_508_LOOP_DETECTED: 508;
63
- export const HTTP_510_NOT_EXTENDED: 510;
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
- };
131
- //# sourceMappingURL=http_status.d.ts.map
@@ -1 +0,0 @@
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 DELETED
@@ -1,26 +0,0 @@
1
- export * from "./const/http_status.js";
2
- export * from "./logging/const.js";
3
- export * from "./pagelifecycle/const.js";
4
- export * from "./pagelifecycle/typedef.js";
5
- export * from "./util/validate.js";
6
- export { AbstractLogHandler } from "./logging/AbstractLogHandler.js";
7
- export { ConsoleLogHandler } from "./logging/ConsoleLogHandler.js";
8
- export { Logger } from "./logging/Logger.js";
9
- export { OpenTelemetryLogHandler } from "./logging/OpenTelemetryLogHandler.js";
10
- export { SentryLogHandler } from "./logging/SentryLogHandler.js";
11
- export { typeChecker } from "./typecheck/TypeChecker.js";
12
- export { TypeCheckError } from "./typecheck/TypeCheckError.js";
13
- export { EventEmitter } from "./util/event_emitter.js";
14
- export { serverDataToState } from "./util/state.js";
15
- export { uuidv4 } from "./util/uuid.js";
16
- export { formatLogMessage, getLogLevelName } from "./logging/util.js";
17
- export { addPageLifecycleCallback, getDocumentState, getPageLifecycleEventEmitter, getPageLifecycleState, initPageLifecycle, isPageLifecycleInitialized } from "./pagelifecycle/util.js";
18
- export { typeCheck, typeCheckArray, typeCheckEnum } from "./typecheck/util.js";
19
- export { delayPromise, loadJSON, retryAsync } from "./util/async.js";
20
- export { getErrorDetails, getTypedError } from "./util/error.js";
21
- export { FetchError, fetchRetry, HTTP_0_ANY } from "./util/fetch.js";
22
- export { deg2rad, fixFloatPrecision, getRandomInt, isEqual, isGreater, isGreaterOrEqual, isInRange, isLess, isLessOrEqual, rad2deg } from "./util/number.js";
23
- export { deepMerge, getObjArrayPropSum, getObjValueByPath, purgeObject, setObjValueByPath } from "./util/object.js";
24
- export { getURLParam, sanitizeURLParam } from "./util/query.js";
25
- export { addLeadingZero, capitalize, getTypeFromValue, saveAsFile, underscoreToCamelCase } from "./util/string.js";
26
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- export class AbstractLogHandler {
2
- /**
3
- * Abstract log handler.
4
- * @param {number} level - Log handler level.
5
- */
6
- constructor(level: number);
7
- level: number;
8
- /**
9
- * Emit log record.
10
- * @param {import('./Logger.js').Logger} logger - Logger instance.
11
- * @param {number} timestamp - Log timestamp.
12
- * @param {number} level - Log level.
13
- * @param {string} message - Log message.
14
- * @param {object | null | undefined} extra - Log extra data.
15
- * @param {Error | null | undefined} error - Log error.
16
- * @throws {Error}
17
- */
18
- emit(logger: import("./Logger.js").Logger, timestamp: number, level: number, message: string, extra: object | null | undefined, error: Error | null | undefined): void;
19
- }
20
- //# sourceMappingURL=AbstractLogHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractLogHandler.d.ts","sourceRoot":"","sources":["../../src/logging/AbstractLogHandler.js"],"names":[],"mappings":"AAAA;IACE;;;OAGG;IACH,mBAFW,MAAM,EAIhB;IADC,cAAkB;IAGpB;;;;;;;;;OASG;IACH,aARW,OAAO,aAAa,EAAE,MAAM,aAC5B,MAAM,SACN,MAAM,WACN,MAAM,SACN,MAAM,GAAG,IAAI,GAAG,SAAS,SACzB,KAAK,GAAG,IAAI,GAAG,SAAS,QAKlC;CACF"}
@@ -1,9 +0,0 @@
1
- export class ConsoleLogHandler extends AbstractLogHandler {
2
- /**
3
- * Console log handler.
4
- * @param {number} level - Log handler level.
5
- */
6
- constructor(level?: number);
7
- }
8
- import { AbstractLogHandler } from './AbstractLogHandler.js';
9
- //# sourceMappingURL=ConsoleLogHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConsoleLogHandler.d.ts","sourceRoot":"","sources":["../../src/logging/ConsoleLogHandler.js"],"names":[],"mappings":"AAaA;IACE;;;OAGG;IACH,oBAFW,MAAM,EAIhB;CA8BF;mCAlDkC,yBAAyB"}
@@ -1,66 +0,0 @@
1
- export class Logger {
2
- /**
3
- * @type {import('./AbstractLogHandler.js').AbstractLogHandler[]}
4
- */
5
- static handlers: import("./AbstractLogHandler.js").AbstractLogHandler[];
6
- /**
7
- * Add log handler.
8
- * @param {import('./AbstractLogHandler.js').AbstractLogHandler} handler - Log handler.
9
- */
10
- static addHandler: (handler: import("./AbstractLogHandler.js").AbstractLogHandler) => void;
11
- /**
12
- * Emit log record.
13
- * @param {Logger} logger - Logger instance.
14
- * @param {number} level - Log level.
15
- * @param {string} message - Log message.
16
- * @param {object} extra - Log extra data.
17
- * @param {Error | null | undefined} [error] - Log exception.
18
- */
19
- static emit: (logger: Logger, level: number, message: string, extra: object, error?: Error | null | undefined) => void;
20
- /**
21
- * Creates a new Logger instance.
22
- * @param {string} [name] - The logger name.
23
- */
24
- constructor(name?: string);
25
- name: string;
26
- /** @type {number} */
27
- level: number;
28
- /**
29
- * Emit debug log.
30
- * @param {string} message - Log message.
31
- * @param {object | null | undefined} [extra] - Log extra data.
32
- */
33
- debug(message: string, extra?: object | null | undefined): void;
34
- /**
35
- * Emit info log.
36
- * @param {string} message - Log message.
37
- * @param {object | null | undefined} [extra] - Log extra data.
38
- */
39
- info(message: string, extra?: object | null | undefined): void;
40
- /**
41
- * Emit warning log.
42
- * @param {string} message - Log message.
43
- * @param {object | null | undefined} [extra] - Log extra data.
44
- */
45
- warn(message: string, extra?: object | null | undefined): void;
46
- /**
47
- * Emit warning log.
48
- * @param {string} message - Log message.
49
- * @param {object | null | undefined} [extra] - Log extra data.
50
- */
51
- warning(message: string, extra?: object | null | undefined): void;
52
- /**
53
- * Emit error log.
54
- * @param {string} message - Log message.
55
- * @param {object | null | undefined} [extra] - Log extra data.
56
- */
57
- error(message: string, extra?: object | null | undefined): void;
58
- /**
59
- * Emit exception log.
60
- * @param {string} message - Log message.
61
- * @param {Error} error - Log error.
62
- * @param {object | null | undefined} [extra] - Log extra data.
63
- */
64
- exception(message: string, error: Error, extra?: object | null | undefined): void;
65
- }
66
- //# sourceMappingURL=Logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/logging/Logger.js"],"names":[],"mappings":"AAaA;IACE;;OAEG;IACH,iBAFU,OAAO,yBAAyB,EAAE,kBAAkB,EAAE,CAE3C;IAkBrB;;;OAGG;IACH,oBAAqB,SAFV,OAAO,yBAAyB,EAAE,kBAEjB,UAE1B;IAEF;;;;;;;OAOG;IACH,cAAe,QANJ,MAMU,EAAE,OALZ,MAKiB,EAAE,SAJnB,MAI0B,EAAE,OAH5B,MAGiC,EAAE,QAFnC,KAAK,GAAG,IAAI,GAAG,SAEyB,UAOjD;IAvCF;;;OAGG;IACH,mBAFW,MAAM,EAYhB;IATC,aAAoC;IAOpC,qBAAqB;IACrB,OADW,MAAM,CAC2B;IA4B9C;;;;OAIG;IACH,eAHW,MAAM,UACN,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;IAED;;;;OAIG;IACH,cAHW,MAAM,UACN,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;IAED;;;;OAIG;IACH,cAHW,MAAM,UACN,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;IAED;;;;OAIG;IACH,iBAHW,MAAM,UACN,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;IAED;;;;OAIG;IACH,eAHW,MAAM,UACN,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;IAED;;;;;OAKG;IACH,mBAJW,MAAM,SACN,KAAK,UACL,MAAM,GAAG,IAAI,GAAG,SAAS,QAInC;CACF"}
@@ -1,11 +0,0 @@
1
- export class OpenTelemetryLogHandler extends AbstractLogHandler {
2
- /**
3
- * Open Telemetry log handler.
4
- * @param {number} level - Log handler level.
5
- * @param {(logger: import('./Logger.js').Logger, timestamp: number, level: number, message: string, extra: object | null | undefined, error: Error | null | undefined) => void} emitter - Log handler emitter.
6
- */
7
- constructor(level: number, emitter: (logger: import("./Logger.js").Logger, timestamp: number, level: number, message: string, extra: object | null | undefined, error: Error | null | undefined) => void);
8
- emitter: (logger: import("./Logger.js").Logger, timestamp: number, level: number, message: string, extra: object | null | undefined, error: Error | null | undefined) => void;
9
- }
10
- import { AbstractLogHandler } from './AbstractLogHandler.js';
11
- //# sourceMappingURL=OpenTelemetryLogHandler.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
1
- export class SentryLogHandler extends AbstractLogHandler {
2
- /**
3
- * Console log handler.
4
- * @param {number} level - Log handler level.
5
- */
6
- constructor(level?: number);
7
- }
8
- import { AbstractLogHandler } from './AbstractLogHandler.js';
9
- //# sourceMappingURL=SentryLogHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SentryLogHandler.d.ts","sourceRoot":"","sources":["../../src/logging/SentryLogHandler.js"],"names":[],"mappings":"AAKA;IACE;;;OAGG;IACH,oBAFW,MAAM,EAIhB;CAiCF;mCA5CkC,yBAAyB"}