@maxclicks/core 1.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.
Files changed (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/helpers/deepClone.d.ts +4 -0
  4. package/dist/helpers/deepClone.d.ts.map +1 -0
  5. package/dist/helpers/deepClone.js +11 -0
  6. package/dist/helpers/deepClone.js.map +1 -0
  7. package/dist/helpers/delay.d.ts +5 -0
  8. package/dist/helpers/delay.d.ts.map +1 -0
  9. package/dist/helpers/delay.js +40 -0
  10. package/dist/helpers/delay.js.map +1 -0
  11. package/dist/helpers/error-warning/alterError.d.ts +6 -0
  12. package/dist/helpers/error-warning/alterError.d.ts.map +1 -0
  13. package/dist/helpers/error-warning/alterError.js +30 -0
  14. package/dist/helpers/error-warning/alterError.js.map +1 -0
  15. package/dist/helpers/error-warning/combineMessages.d.ts +17 -0
  16. package/dist/helpers/error-warning/combineMessages.d.ts.map +1 -0
  17. package/dist/helpers/error-warning/combineMessages.js +19 -0
  18. package/dist/helpers/error-warning/combineMessages.js.map +1 -0
  19. package/dist/helpers/error-warning/getErrorMessage.d.ts +2 -0
  20. package/dist/helpers/error-warning/getErrorMessage.d.ts.map +1 -0
  21. package/dist/helpers/error-warning/getErrorMessage.js +5 -0
  22. package/dist/helpers/error-warning/getErrorMessage.js.map +1 -0
  23. package/dist/helpers/error-warning/prependMessage.d.ts +2 -0
  24. package/dist/helpers/error-warning/prependMessage.d.ts.map +1 -0
  25. package/dist/helpers/error-warning/prependMessage.js +9 -0
  26. package/dist/helpers/error-warning/prependMessage.js.map +1 -0
  27. package/dist/helpers/error-warning/throwError.d.ts +2 -0
  28. package/dist/helpers/error-warning/throwError.d.ts.map +1 -0
  29. package/dist/helpers/error-warning/throwError.js +4 -0
  30. package/dist/helpers/error-warning/throwError.js.map +1 -0
  31. package/dist/helpers/escapeForRegExp.d.ts +2 -0
  32. package/dist/helpers/escapeForRegExp.d.ts.map +1 -0
  33. package/dist/helpers/escapeForRegExp.js +4 -0
  34. package/dist/helpers/escapeForRegExp.js.map +1 -0
  35. package/dist/helpers/formatCurrencyUsd.d.ts +2 -0
  36. package/dist/helpers/formatCurrencyUsd.d.ts.map +1 -0
  37. package/dist/helpers/formatCurrencyUsd.js +8 -0
  38. package/dist/helpers/formatCurrencyUsd.js.map +1 -0
  39. package/dist/helpers/generateRandomKey.d.ts +10 -0
  40. package/dist/helpers/generateRandomKey.d.ts.map +1 -0
  41. package/dist/helpers/generateRandomKey.js +24 -0
  42. package/dist/helpers/generateRandomKey.js.map +1 -0
  43. package/dist/helpers/generateRuntimeId.d.ts +2 -0
  44. package/dist/helpers/generateRuntimeId.d.ts.map +1 -0
  45. package/dist/helpers/generateRuntimeId.js +6 -0
  46. package/dist/helpers/generateRuntimeId.js.map +1 -0
  47. package/dist/helpers/generateSequence.d.ts +7 -0
  48. package/dist/helpers/generateSequence.d.ts.map +1 -0
  49. package/dist/helpers/generateSequence.js +9 -0
  50. package/dist/helpers/generateSequence.js.map +1 -0
  51. package/dist/helpers/getEnumKeyValues.d.ts +5 -0
  52. package/dist/helpers/getEnumKeyValues.d.ts.map +1 -0
  53. package/dist/helpers/getEnumKeyValues.js +7 -0
  54. package/dist/helpers/getEnumKeyValues.js.map +1 -0
  55. package/dist/helpers/haveSameContents.d.ts +2 -0
  56. package/dist/helpers/haveSameContents.d.ts.map +1 -0
  57. package/dist/helpers/haveSameContents.js +32 -0
  58. package/dist/helpers/haveSameContents.js.map +1 -0
  59. package/dist/helpers/isOneOf.d.ts +13 -0
  60. package/dist/helpers/isOneOf.d.ts.map +1 -0
  61. package/dist/helpers/isOneOf.js +2 -0
  62. package/dist/helpers/isOneOf.js.map +1 -0
  63. package/dist/helpers/native/arrayHelpers.d.ts +38 -0
  64. package/dist/helpers/native/arrayHelpers.d.ts.map +1 -0
  65. package/dist/helpers/native/arrayHelpers.js +151 -0
  66. package/dist/helpers/native/arrayHelpers.js.map +1 -0
  67. package/dist/helpers/native/objectHelpers.d.ts +23 -0
  68. package/dist/helpers/native/objectHelpers.d.ts.map +1 -0
  69. package/dist/helpers/native/objectHelpers.js +81 -0
  70. package/dist/helpers/native/objectHelpers.js.map +1 -0
  71. package/dist/helpers/native/stringHelpers.d.ts +8 -0
  72. package/dist/helpers/native/stringHelpers.d.ts.map +1 -0
  73. package/dist/helpers/native/stringHelpers.js +12 -0
  74. package/dist/helpers/native/stringHelpers.js.map +1 -0
  75. package/dist/helpers/optional.d.ts +10 -0
  76. package/dist/helpers/optional.d.ts.map +1 -0
  77. package/dist/helpers/optional.js +14 -0
  78. package/dist/helpers/optional.js.map +1 -0
  79. package/dist/helpers/percent.d.ts +5 -0
  80. package/dist/helpers/percent.d.ts.map +1 -0
  81. package/dist/helpers/percent.js +17 -0
  82. package/dist/helpers/percent.js.map +1 -0
  83. package/dist/helpers/typed.d.ts +2 -0
  84. package/dist/helpers/typed.d.ts.map +1 -0
  85. package/dist/helpers/typed.js +4 -0
  86. package/dist/helpers/typed.js.map +1 -0
  87. package/dist/index.d.ts +42 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +42 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/modules/common-normalizers/descriptionNormalizer.d.ts +3 -0
  92. package/dist/modules/common-normalizers/descriptionNormalizer.d.ts.map +1 -0
  93. package/dist/modules/common-normalizers/descriptionNormalizer.js +3 -0
  94. package/dist/modules/common-normalizers/descriptionNormalizer.js.map +1 -0
  95. package/dist/modules/common-normalizers/labelNormalizer.d.ts +3 -0
  96. package/dist/modules/common-normalizers/labelNormalizer.d.ts.map +1 -0
  97. package/dist/modules/common-normalizers/labelNormalizer.js +3 -0
  98. package/dist/modules/common-normalizers/labelNormalizer.js.map +1 -0
  99. package/dist/modules/common-normalizers/nameNormalizer.d.ts +2 -0
  100. package/dist/modules/common-normalizers/nameNormalizer.d.ts.map +1 -0
  101. package/dist/modules/common-normalizers/nameNormalizer.js +3 -0
  102. package/dist/modules/common-normalizers/nameNormalizer.js.map +1 -0
  103. package/dist/modules/common-normalizers/widthHeightNormalizer.d.ts +3 -0
  104. package/dist/modules/common-normalizers/widthHeightNormalizer.d.ts.map +1 -0
  105. package/dist/modules/common-normalizers/widthHeightNormalizer.js +3 -0
  106. package/dist/modules/common-normalizers/widthHeightNormalizer.js.map +1 -0
  107. package/dist/types/Address.d.ts +16 -0
  108. package/dist/types/Address.d.ts.map +1 -0
  109. package/dist/types/Address.js +34 -0
  110. package/dist/types/Address.js.map +1 -0
  111. package/dist/types/Color.d.ts +6 -0
  112. package/dist/types/Color.d.ts.map +1 -0
  113. package/dist/types/Color.js +19 -0
  114. package/dist/types/Color.js.map +1 -0
  115. package/dist/types/DateOnly.d.ts +6 -0
  116. package/dist/types/DateOnly.d.ts.map +1 -0
  117. package/dist/types/DateOnly.js +18 -0
  118. package/dist/types/DateOnly.js.map +1 -0
  119. package/dist/types/DateTime.d.ts +6 -0
  120. package/dist/types/DateTime.d.ts.map +1 -0
  121. package/dist/types/DateTime.js +18 -0
  122. package/dist/types/DateTime.js.map +1 -0
  123. package/dist/types/Decimal.d.ts +6 -0
  124. package/dist/types/Decimal.d.ts.map +1 -0
  125. package/dist/types/Decimal.js +22 -0
  126. package/dist/types/Decimal.js.map +1 -0
  127. package/dist/types/Email.d.ts +6 -0
  128. package/dist/types/Email.d.ts.map +1 -0
  129. package/dist/types/Email.js +14 -0
  130. package/dist/types/Email.js.map +1 -0
  131. package/dist/types/Geolocation.d.ts +16 -0
  132. package/dist/types/Geolocation.d.ts.map +1 -0
  133. package/dist/types/Geolocation.js +22 -0
  134. package/dist/types/Geolocation.js.map +1 -0
  135. package/dist/types/Json/Json.d.ts +81 -0
  136. package/dist/types/Json/Json.d.ts.map +1 -0
  137. package/dist/types/Json/Json.js +43 -0
  138. package/dist/types/Json/Json.js.map +1 -0
  139. package/dist/types/Json/jsonNormalizer.d.ts +4 -0
  140. package/dist/types/Json/jsonNormalizer.d.ts.map +1 -0
  141. package/dist/types/Json/jsonNormalizer.js +20 -0
  142. package/dist/types/Json/jsonNormalizer.js.map +1 -0
  143. package/dist/types/Json/jsonNormalizerWithSchemaFactory.d.ts +4 -0
  144. package/dist/types/Json/jsonNormalizerWithSchemaFactory.d.ts.map +1 -0
  145. package/dist/types/Json/jsonNormalizerWithSchemaFactory.js +161 -0
  146. package/dist/types/Json/jsonNormalizerWithSchemaFactory.js.map +1 -0
  147. package/dist/types/Json/jsonSchemaNormalizer.d.ts +3 -0
  148. package/dist/types/Json/jsonSchemaNormalizer.d.ts.map +1 -0
  149. package/dist/types/Json/jsonSchemaNormalizer.js +172 -0
  150. package/dist/types/Json/jsonSchemaNormalizer.js.map +1 -0
  151. package/dist/types/Json/jsonSchemaSatisfies.d.ts +3 -0
  152. package/dist/types/Json/jsonSchemaSatisfies.d.ts.map +1 -0
  153. package/dist/types/Json/jsonSchemaSatisfies.js +239 -0
  154. package/dist/types/Json/jsonSchemaSatisfies.js.map +1 -0
  155. package/dist/types/Json/jsonSchemaSimplifiedSatisfies.d.ts +3 -0
  156. package/dist/types/Json/jsonSchemaSimplifiedSatisfies.d.ts.map +1 -0
  157. package/dist/types/Json/jsonSchemaSimplifiedSatisfies.js +221 -0
  158. package/dist/types/Json/jsonSchemaSimplifiedSatisfies.js.map +1 -0
  159. package/dist/types/Lazily.d.ts +27 -0
  160. package/dist/types/Lazily.d.ts.map +1 -0
  161. package/dist/types/Lazily.js +31 -0
  162. package/dist/types/Lazily.js.map +1 -0
  163. package/dist/types/Normalizer.d.ts +79 -0
  164. package/dist/types/Normalizer.d.ts.map +1 -0
  165. package/dist/types/Normalizer.js +257 -0
  166. package/dist/types/Normalizer.js.map +1 -0
  167. package/dist/types/Phone.d.ts +6 -0
  168. package/dist/types/Phone.d.ts.map +1 -0
  169. package/dist/types/Phone.js +16 -0
  170. package/dist/types/Phone.js.map +1 -0
  171. package/dist/types/Slug.d.ts +6 -0
  172. package/dist/types/Slug.d.ts.map +1 -0
  173. package/dist/types/Slug.js +17 -0
  174. package/dist/types/Slug.js.map +1 -0
  175. package/dist/types/TimeOnly.d.ts +6 -0
  176. package/dist/types/TimeOnly.d.ts.map +1 -0
  177. package/dist/types/TimeOnly.js +23 -0
  178. package/dist/types/TimeOnly.js.map +1 -0
  179. package/dist/types/Url.d.ts +6 -0
  180. package/dist/types/Url.d.ts.map +1 -0
  181. package/dist/types/Url.js +17 -0
  182. package/dist/types/Url.js.map +1 -0
  183. package/dist/types/Uuid.d.ts +9 -0
  184. package/dist/types/Uuid.d.ts.map +1 -0
  185. package/dist/types/Uuid.js +17 -0
  186. package/dist/types/Uuid.js.map +1 -0
  187. package/dist/types.d.ts +29 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/types.js +2 -0
  190. package/dist/types.js.map +1 -0
  191. package/package.json +63 -0
@@ -0,0 +1,221 @@
1
+ import { haveSameContents } from '../../helpers/haveSameContents';
2
+ import { Json } from './Json';
3
+ export function jsonSchemaSatisfies(provided, required) {
4
+ if (isAnySchema(provided))
5
+ return true;
6
+ if (isAnySchema(required))
7
+ return isAnySchema(provided);
8
+ if ('const' in required) {
9
+ if ('const' in provided)
10
+ return haveSameContents(provided.const, required.const);
11
+ if ('enum' in provided)
12
+ return provided.enum.some(value => haveSameContents(value, required.const));
13
+ return schemaAcceptsValue(provided, required.const);
14
+ }
15
+ if ('enum' in required) {
16
+ if ('const' in provided)
17
+ return required.enum.length === 1 && haveSameContents(provided.const, required.enum[0]);
18
+ if ('enum' in provided)
19
+ return required.enum.every(requiredValue => provided.enum.some(providedValue => haveSameContents(providedValue, requiredValue)));
20
+ return required.enum.every(value => schemaAcceptsValue(provided, value));
21
+ }
22
+ if ('const' in provided || 'enum' in provided)
23
+ return false;
24
+ const providedBaseType = getBaseType(provided.type);
25
+ const requiredBaseType = getBaseType(required.type);
26
+ const providedNullable = isNullable(provided.type);
27
+ const requiredNullable = isNullable(required.type);
28
+ if (requiredNullable && !providedNullable)
29
+ return false;
30
+ if (requiredBaseType === 'null')
31
+ return providedBaseType === 'null' || providedNullable;
32
+ if (providedBaseType !== requiredBaseType) {
33
+ if (!(providedBaseType === 'number' && requiredBaseType === 'integer'))
34
+ return false;
35
+ }
36
+ switch (requiredBaseType) {
37
+ case 'string':
38
+ return stringSchemasSatisfy(provided, required);
39
+ case 'number':
40
+ case 'integer':
41
+ return numberSchemasSatisfy(provided, required);
42
+ case 'boolean':
43
+ return true;
44
+ case 'array':
45
+ return arraySchemasSatisfy(provided, required);
46
+ case 'object':
47
+ return objectSchemasSatisfy(provided, required);
48
+ default:
49
+ return false;
50
+ }
51
+ }
52
+ function isAnySchema(schema) {
53
+ return !('const' in schema) && !('enum' in schema) && (schema.type === undefined || schema.type === 'any');
54
+ }
55
+ function getBaseType(type) {
56
+ if (type === undefined)
57
+ return 'any';
58
+ if (Array.isArray(type))
59
+ return type.find(t => t !== 'null');
60
+ return type;
61
+ }
62
+ function isNullable(type) {
63
+ if (type === 'null')
64
+ return true;
65
+ if (Array.isArray(type))
66
+ return type.includes('null');
67
+ return false;
68
+ }
69
+ function schemaAcceptsValue(schema, value) {
70
+ if (isAnySchema(schema))
71
+ return true;
72
+ const baseType = getBaseType(schema.type);
73
+ const nullable = isNullable(schema.type);
74
+ if (value === null)
75
+ return nullable || baseType === 'null';
76
+ switch (baseType) {
77
+ case 'null':
78
+ return value === null;
79
+ case 'string': {
80
+ if (typeof value !== 'string')
81
+ return false;
82
+ const stringSchema = schema;
83
+ if (stringSchema.minLength !== undefined && value.length < stringSchema.minLength)
84
+ return false;
85
+ if (stringSchema.maxLength !== undefined && value.length > stringSchema.maxLength)
86
+ return false;
87
+ return true;
88
+ }
89
+ case 'number':
90
+ case 'integer': {
91
+ if (typeof value !== 'number')
92
+ return false;
93
+ if (baseType === 'integer' && value % 1 !== 0)
94
+ return false;
95
+ const numberSchema = schema;
96
+ if (numberSchema.minimum !== undefined && value < numberSchema.minimum)
97
+ return false;
98
+ if (numberSchema.maximum !== undefined && value > numberSchema.maximum)
99
+ return false;
100
+ if (numberSchema.exclusiveMinimum !== undefined && value <= numberSchema.exclusiveMinimum)
101
+ return false;
102
+ if (numberSchema.exclusiveMaximum !== undefined && value >= numberSchema.exclusiveMaximum)
103
+ return false;
104
+ if (numberSchema.multipleOf !== undefined && value % numberSchema.multipleOf !== 0)
105
+ return false;
106
+ return true;
107
+ }
108
+ case 'boolean':
109
+ return typeof value === 'boolean';
110
+ case 'array': {
111
+ if (!Array.isArray(value))
112
+ return false;
113
+ const arraySchema = schema;
114
+ if (arraySchema.minItems !== undefined && value.length < arraySchema.minItems)
115
+ return false;
116
+ if (arraySchema.maxItems !== undefined && value.length > arraySchema.maxItems)
117
+ return false;
118
+ if (arraySchema.items !== undefined)
119
+ return value.every(item => schemaAcceptsValue(arraySchema.items, item));
120
+ return true;
121
+ }
122
+ case 'object': {
123
+ if (typeof value !== 'object' || Array.isArray(value) || value === null)
124
+ return false;
125
+ const objectSchema = schema;
126
+ const objectValue = value;
127
+ if (objectSchema.required) {
128
+ for (const key of objectSchema.required) {
129
+ if (!(key in objectValue))
130
+ return false;
131
+ }
132
+ }
133
+ for (const [key, propertyValue] of Object.entries(objectValue)) {
134
+ if (objectSchema.properties && key in objectSchema.properties) {
135
+ if (!schemaAcceptsValue(objectSchema.properties[key], propertyValue))
136
+ return false;
137
+ }
138
+ else if (objectSchema.additionalProperties !== undefined && objectSchema.additionalProperties !== true) {
139
+ if (!schemaAcceptsValue(objectSchema.additionalProperties, propertyValue))
140
+ return false;
141
+ }
142
+ }
143
+ return true;
144
+ }
145
+ default:
146
+ return false;
147
+ }
148
+ }
149
+ function stringSchemasSatisfy(provided, required) {
150
+ if (required.minLength !== undefined && provided.minLength !== undefined && provided.minLength > required.minLength)
151
+ return false;
152
+ if (required.maxLength !== undefined && provided.maxLength !== undefined && provided.maxLength < required.maxLength)
153
+ return false;
154
+ if (required.format !== undefined && provided.format !== undefined && provided.format !== required.format)
155
+ return false;
156
+ return true;
157
+ }
158
+ function numberSchemasSatisfy(provided, required) {
159
+ if (required.minimum !== undefined && provided.minimum !== undefined && provided.minimum > required.minimum)
160
+ return false;
161
+ if (required.maximum !== undefined && provided.maximum !== undefined && provided.maximum < required.maximum)
162
+ return false;
163
+ if (required.exclusiveMinimum !== undefined &&
164
+ provided.exclusiveMinimum !== undefined &&
165
+ provided.exclusiveMinimum > required.exclusiveMinimum)
166
+ return false;
167
+ if (required.exclusiveMaximum !== undefined &&
168
+ provided.exclusiveMaximum !== undefined &&
169
+ provided.exclusiveMaximum < required.exclusiveMaximum)
170
+ return false;
171
+ if (required.multipleOf !== undefined &&
172
+ provided.multipleOf !== undefined &&
173
+ required.multipleOf % provided.multipleOf !== 0)
174
+ return false;
175
+ return true;
176
+ }
177
+ function arraySchemasSatisfy(provided, required) {
178
+ if (required.minItems !== undefined && provided.minItems !== undefined && provided.minItems > required.minItems)
179
+ return false;
180
+ if (required.maxItems !== undefined && provided.maxItems !== undefined && provided.maxItems < required.maxItems)
181
+ return false;
182
+ if (required.items !== undefined) {
183
+ if (provided.items === undefined)
184
+ return true;
185
+ return jsonSchemaSatisfies(provided.items, required.items);
186
+ }
187
+ return true;
188
+ }
189
+ function objectSchemasSatisfy(provided, required) {
190
+ if (provided.required) {
191
+ for (const key of provided.required) {
192
+ if (!required.required?.includes(key))
193
+ return false;
194
+ }
195
+ }
196
+ if (required.properties) {
197
+ for (const [key, requiredPropertySchema] of Object.entries(required.properties)) {
198
+ if (provided.properties && key in provided.properties) {
199
+ if (!jsonSchemaSatisfies(provided.properties[key], requiredPropertySchema))
200
+ return false;
201
+ }
202
+ else if (provided.additionalProperties !== undefined) {
203
+ if (provided.additionalProperties === true)
204
+ continue;
205
+ if (!jsonSchemaSatisfies(provided.additionalProperties, requiredPropertySchema))
206
+ return false;
207
+ }
208
+ }
209
+ }
210
+ if (required.additionalProperties !== undefined) {
211
+ if (provided.additionalProperties === undefined)
212
+ return true;
213
+ if (required.additionalProperties === true)
214
+ return provided.additionalProperties === true;
215
+ if (provided.additionalProperties === true)
216
+ return true;
217
+ return jsonSchemaSatisfies(provided.additionalProperties, required.additionalProperties);
218
+ }
219
+ return true;
220
+ }
221
+ //# sourceMappingURL=jsonSchemaSimplifiedSatisfies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonSchemaSimplifiedSatisfies.js","sourceRoot":"","sources":["../../../src/types/Json/jsonSchemaSimplifiedSatisfies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface Lazily<Values extends {
2
+ readonly [key: string]: any;
3
+ }> {
4
+ <NewGetters extends {
5
+ readonly [key: string]: (this: {
6
+ readonly [Key in keyof Values]: Values[Key];
7
+ }, values: {
8
+ readonly [Key in keyof Values]: Values[Key];
9
+ }) => any;
10
+ }>(getters: NewGetters): Lazily<Values & {
11
+ readonly [Key in keyof NewGetters]: ReturnType<NewGetters[Key]>;
12
+ }>;
13
+ (): {
14
+ readonly [Key in keyof Values]: Values[Key];
15
+ };
16
+ }
17
+ export declare namespace Lazily {
18
+ function create<Getters extends {
19
+ readonly [key: string]: () => any;
20
+ }>(getters: Getters): Lazily<{
21
+ readonly [Key in keyof Getters as Key extends `$${string}` ? never : Key]: ReturnType<Getters[Key]>;
22
+ }>;
23
+ function createByInitialValues<InitialValues extends {
24
+ readonly [key: string]: any;
25
+ }>(initialValues: InitialValues): Lazily<InitialValues>;
26
+ }
27
+ //# sourceMappingURL=Lazily.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lazily.d.ts","sourceRoot":"","sources":["../../src/types/Lazily.ts"],"names":[],"mappings":"AAuCA,MAAM,WAAW,MAAM,CAAC,MAAM,SAAS;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;IACpE,CACE,UAAU,SAAS;QACjB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,CACtB,IAAI,EAAE;YAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;SAAE,EACrD,MAAM,EAAE;YAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;SAAE,KACpD,GAAG,CAAA;KACT,EAED,OAAO,EAAE,UAAU,GAClB,MAAM,CAAC,MAAM,GAAG;QAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAAE,CAAC,CAAA;IACvF,IAAI;QAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;KAAE,CAAA;CACpD;AAED,yBAAiB,MAAM,CAAC;IAEtB,SAAgB,MAAM,CAAC,OAAO,SAAS;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAA;KAAE,EAC1E,OAAO,EAAE,OAAO,GACf,MAAM,CAAC;QAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,OAAO,IAAI,GAAG,SAAS,IAAI,MAAM,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAAE,CAAC,CAEjH;IAGD,SAAgB,qBAAqB,CAAC,aAAa,SAAS;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EACzF,aAAa,EAAE,aAAa,GAC3B,MAAM,CAAC,aAAa,CAAC,CAIvB;CACF"}
@@ -0,0 +1,31 @@
1
+ import { objectHelpers } from '../helpers/native/objectHelpers';
2
+ export var Lazily;
3
+ (function (Lazily) {
4
+ function create(getters) {
5
+ return createByGetters(getters);
6
+ }
7
+ Lazily.create = create;
8
+ function createByInitialValues(initialValues) {
9
+ return createByGetters(objectHelpers.map(initialValues, (key, value) => (typeof value === 'function' ? () => value : value)));
10
+ }
11
+ Lazily.createByInitialValues = createByInitialValues;
12
+ })(Lazily || (Lazily = {}));
13
+ function createByGetters(getters) {
14
+ const values = new Proxy({}, {
15
+ get(target, propertyKey, receiver) {
16
+ if (typeof propertyKey !== 'string' || !(propertyKey in getters))
17
+ return undefined;
18
+ if (!(propertyKey in target)) {
19
+ const getter = getters[propertyKey];
20
+ target[propertyKey] = typeof getter === 'function' ? getter.call(values, values) : getter;
21
+ }
22
+ return Reflect.get(target, propertyKey, receiver);
23
+ },
24
+ });
25
+ return function (newGetters) {
26
+ if (!newGetters)
27
+ return values;
28
+ return createByGetters({ ...getters, ...newGetters });
29
+ };
30
+ }
31
+ //# sourceMappingURL=Lazily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lazily.js","sourceRoot":"","sources":["../../src/types/Lazily.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAqD/D,MAAM,KAAW,MAAM,CAgBtB;AAhBD,WAAiB,MAAM;IAErB,SAAgB,MAAM,CACpB,OAAgB;QAEhB,OAAO,eAAe,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAJe,aAAM,SAIrB,CAAA;IAGD,SAAgB,qBAAqB,CACnC,aAA4B;QAE5B,OAAO,eAAe,CACpB,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACtG,CAAA;IACH,CAAC;IANe,4BAAqB,wBAMpC,CAAA;AACH,CAAC,EAhBgB,MAAM,KAAN,MAAM,QAgBtB;AAED,SAAS,eAAe,CAAiD,OAExE;IACC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAS,EAAE;QAClC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ;YAC/B,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC;gBAAE,OAAO,SAAS,CAAA;YAClF,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;gBACnC,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAE,MAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YACpG,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QACnD,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,UAAU,UAAgB;QAC/B,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAA;QAC9B,OAAO,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC,CAAA;IACvD,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { Falsy } from '../types';
2
+ export declare class Normalizer<Value> {
3
+ readonly parseOrThrow: Normalizer.ParseOrThrow<Value>;
4
+ constructor(parseOrThrow: Normalizer.ParseOrThrow<Value>);
5
+ normalize<V>(value: V): Normalizer.Normalized<undefined extends V ? Value | undefined : Value>;
6
+ chain<NewValue>(parseOrThrow: Normalizer.ParseOrThrow<NewValue, Value>): Normalizer<NewValue>;
7
+ chainAsync<NewValue>(parseOrThrowAsync: Normalizer.ParseOrThrowAsync<NewValue, Value>): Normalizer.Async<NewValue>;
8
+ get required(): Normalizer<Exclude<Value, null>>;
9
+ }
10
+ export declare namespace Normalizer {
11
+ class Async<Value> {
12
+ readonly parseOrThrowAsync: ParseOrThrowAsync<Value>;
13
+ constructor(parseOrThrowAsync: ParseOrThrowAsync<Value>);
14
+ normalize<V>(value: V, abortSignal?: AbortSignal): Promise<Normalized<undefined extends V ? Value | undefined : Value>>;
15
+ chain<NewValue>(parseOrThrow: ParseOrThrow<NewValue, Value>): Async<NewValue>;
16
+ chainAsync<NewValue>(parseOrThrowAsync: ParseOrThrowAsync<NewValue, Value>): Async<NewValue>;
17
+ get required(): Async<Exclude<Value, null>>;
18
+ }
19
+ class Normalized<Value> {
20
+ private readonly state;
21
+ constructor(state: {
22
+ readonly errorMessage: string;
23
+ readonly warningMessage?: undefined;
24
+ readonly value?: undefined;
25
+ } | {
26
+ readonly errorMessage?: undefined;
27
+ readonly warningMessage?: string;
28
+ readonly value: Value;
29
+ });
30
+ get errorMessage(): string | undefined;
31
+ get warningMessage(): string | undefined;
32
+ get valueSafe(): Value | undefined;
33
+ get value(): Value;
34
+ valueOf(): Value;
35
+ getValue(warn: Warn): Value;
36
+ getValue(messagePrefix: string): Value;
37
+ getValue(messagePrefix: string, warn: Warn): Value;
38
+ static combine<T extends {
39
+ readonly [K in string]: any;
40
+ } | readonly any[]>(normalizedItems: T, labelByKey?: {
41
+ readonly [K in keyof T]?: string | Falsy;
42
+ }): Normalized<{
43
+ -readonly [K in keyof T]: Exclude<T[K] extends Normalized<infer V> ? V : T[K], undefined>;
44
+ }>;
45
+ }
46
+ namespace Normalized {
47
+ type Items<T extends {
48
+ readonly [K in string]: any;
49
+ } | readonly any[]> = {
50
+ -readonly [K in keyof T]: T[K] | Normalized<T[K]>;
51
+ };
52
+ }
53
+ type ParseOrThrow<ToValue, FromValue = any> = (value: FromValue, warn: Warn) => ToValue;
54
+ type ParseOrThrowAsync<ToValue, FromValue = any> = (value: FromValue, warn: Warn, abortSignal: AbortSignal | undefined) => Promise<ToValue>;
55
+ interface Warn {
56
+ (message: string | Falsy): void;
57
+ readonly message: string | undefined;
58
+ }
59
+ namespace Warn {
60
+ function create(): Warn;
61
+ }
62
+ const any: Normalizer<any>;
63
+ const string: Normalizer<string | null>;
64
+ const stringTrimmed: Normalizer<string | null>;
65
+ const stringTrimmedAndLowerCased: Normalizer<string | null>;
66
+ function stringLimitLength(minimum: number, maximum: number): ParseOrThrow<string | null, string | null>;
67
+ function stringEnum<E extends string>(enumObject: {
68
+ readonly [K in string]: E;
69
+ }): ParseOrThrow<E | null, string | null>;
70
+ function stringEnumValues<E extends readonly string[]>(...allowedValues: E): ParseOrThrow<E[number] | null, string | null>;
71
+ const number: Normalizer<number | null>;
72
+ const numberInteger: Normalizer<number | null>;
73
+ function numberLimitRange(minimum: number, maximum: number): ParseOrThrow<number | null, number | null>;
74
+ const boolean: Normalizer<boolean | null>;
75
+ const object: Normalizer<Record<string, any> | null>;
76
+ function objectRequireKeys(...keys: readonly string[]): ParseOrThrow<Record<string, any> | null, Record<string, any> | null>;
77
+ const array: Normalizer<any[]>;
78
+ }
79
+ //# sourceMappingURL=Normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Normalizer.d.ts","sourceRoot":"","sources":["../../src/types/Normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ import { combineMessages } from '../helpers/error-warning/combineMessages';
2
+ import { getErrorMessage } from '../helpers/error-warning/getErrorMessage';
3
+ import { prependMessage } from '../helpers/error-warning/prependMessage';
4
+ import { arrayHelpers } from '../helpers/native/arrayHelpers';
5
+ import { objectHelpers } from '../helpers/native/objectHelpers';
6
+ export class Normalizer {
7
+ constructor(parseOrThrow) {
8
+ this.parseOrThrow = parseOrThrow;
9
+ }
10
+ normalize(value) {
11
+ const warn = Normalizer.Warn.create();
12
+ try {
13
+ const parsedValue = value === undefined ? undefined : this.parseOrThrow(value, warn);
14
+ return new Normalizer.Normalized({
15
+ warningMessage: warn.message,
16
+ value: parsedValue,
17
+ });
18
+ }
19
+ catch (error) {
20
+ return new Normalizer.Normalized({
21
+ errorMessage: getErrorMessage(error),
22
+ });
23
+ }
24
+ }
25
+ chain(parseOrThrow) {
26
+ return new Normalizer((value, warn) => parseOrThrow(this.parseOrThrow(value, warn), warn));
27
+ }
28
+ chainAsync(parseOrThrowAsync) {
29
+ return new Normalizer.Async((value, warn, abortSignal) => parseOrThrowAsync(this.parseOrThrow(value, warn), warn, abortSignal));
30
+ }
31
+ get required() {
32
+ return this.chain((value, warn) => {
33
+ if ((!value && value !== 0 && !Number.isNaN(value) && value !== false) ||
34
+ (Array.isArray(value) && value.length === 0))
35
+ throw new Error('Required.');
36
+ return value;
37
+ });
38
+ }
39
+ }
40
+ (function (Normalizer) {
41
+ class Async {
42
+ constructor(parseOrThrowAsync) {
43
+ this.parseOrThrowAsync = parseOrThrowAsync;
44
+ }
45
+ async normalize(value, abortSignal) {
46
+ const warn = Warn.create();
47
+ try {
48
+ if (abortSignal?.aborted)
49
+ throw new Error('Aborted.');
50
+ const parsedValue = value === undefined ? undefined : await this.parseOrThrowAsync(value, warn, abortSignal);
51
+ if (abortSignal?.aborted)
52
+ throw new Error('Aborted.');
53
+ return new Normalized({
54
+ warningMessage: warn.message,
55
+ value: parsedValue,
56
+ });
57
+ }
58
+ catch (error) {
59
+ return new Normalized({
60
+ errorMessage: abortSignal?.aborted ? 'Aborted.' : getErrorMessage(error),
61
+ });
62
+ }
63
+ }
64
+ chain(parseOrThrow) {
65
+ return new Async(async (value, warn, abortSignal) => parseOrThrow(await this.parseOrThrowAsync(value, warn, abortSignal), warn));
66
+ }
67
+ chainAsync(parseOrThrowAsync) {
68
+ return new Async(async (value, warn, abortSignal) => await parseOrThrowAsync(await this.parseOrThrowAsync(value, warn, abortSignal), warn, abortSignal));
69
+ }
70
+ get required() {
71
+ return this.chain((value, warn) => {
72
+ if ((!value && value !== 0 && !Number.isNaN(value) && value !== false) ||
73
+ (Array.isArray(value) && value.length === 0))
74
+ throw new Error('Required.');
75
+ return value;
76
+ });
77
+ }
78
+ }
79
+ Normalizer.Async = Async;
80
+ class Normalized {
81
+ constructor(state) {
82
+ this.state = state;
83
+ }
84
+ get errorMessage() {
85
+ return this.state.errorMessage;
86
+ }
87
+ get warningMessage() {
88
+ return this.state.warningMessage;
89
+ }
90
+ get valueSafe() {
91
+ return this.state.value;
92
+ }
93
+ get value() {
94
+ if (this.state.errorMessage)
95
+ throw new Error(this.errorMessage);
96
+ return this.state.value;
97
+ }
98
+ valueOf() {
99
+ return this.value;
100
+ }
101
+ getValue(warnOrMessagePrefix, warn = typeof warnOrMessagePrefix === 'function' ? warnOrMessagePrefix : undefined) {
102
+ const messagePrefix = typeof warnOrMessagePrefix === 'string' ? warnOrMessagePrefix : undefined;
103
+ if (this.state.errorMessage)
104
+ throw new Error(prependMessage(messagePrefix, this.state.errorMessage));
105
+ warn?.(prependMessage(messagePrefix, this.warningMessage));
106
+ return this.state.value;
107
+ }
108
+ static combine(normalizedItems, labelByKey) {
109
+ const normalizedItemsByKey = (Array.isArray(normalizedItems)
110
+ ? arrayHelpers.toDictionary(normalizedItems, (item, itemIndex) => (labelByKey?.[itemIndex] || `Item #${itemIndex + 1}`))
111
+ : objectHelpers.map(normalizedItems, (key, item) => labelByKey?.[key] || key));
112
+ const errorMessage = combineMessages.errors(normalizedItemsByKey);
113
+ if (errorMessage)
114
+ return new Normalized({ errorMessage });
115
+ const warningMessage = combineMessages.warnings(normalizedItemsByKey);
116
+ const value = Array.isArray(normalizedItems)
117
+ ? normalizedItems
118
+ .map(item => (item instanceof Normalizer ? item.value : item))
119
+ .filter(item => item !== undefined)
120
+ : objectHelpers.onlyExisting(objectHelpers.map(normalizedItems, (key, value) => value instanceof Normalizer ? value.value : value));
121
+ return new Normalized({
122
+ warningMessage,
123
+ value: value,
124
+ });
125
+ }
126
+ }
127
+ Normalizer.Normalized = Normalized;
128
+ let Warn;
129
+ (function (Warn) {
130
+ function create() {
131
+ const warn = message => {
132
+ warn.message =
133
+ arrayHelpers
134
+ .distinctString(arrayHelpers.filterFalsy([warn.message, message].flatMap(message => (message || '').split('\n'))))
135
+ .join('\n') || undefined;
136
+ };
137
+ warn.message = undefined;
138
+ return warn;
139
+ }
140
+ Warn.create = create;
141
+ })(Warn = Normalizer.Warn || (Normalizer.Warn = {}));
142
+ Normalizer.any = new Normalizer((value, warn) => value);
143
+ Normalizer.string = new Normalizer((value, warn) => {
144
+ if (value === null)
145
+ return null;
146
+ typeof value !== 'string' && warn('Expected a string.');
147
+ const parsedValue = typeof value === 'string' ? value : String(value);
148
+ return parsedValue || null;
149
+ });
150
+ Normalizer.stringTrimmed = Normalizer.string.chain((value, warn) => {
151
+ const trimmedValue = value?.trim();
152
+ if (!trimmedValue)
153
+ return value;
154
+ if (value !== null && trimmedValue.length !== value.length)
155
+ warn('Leading or trailing whitespace is removed.');
156
+ return trimmedValue;
157
+ });
158
+ Normalizer.stringTrimmedAndLowerCased = Normalizer.stringTrimmed.chain((value, warn) => {
159
+ const trimmedValue = value?.trim();
160
+ if (!trimmedValue)
161
+ return value;
162
+ if (value !== null && trimmedValue.length !== value.length)
163
+ warn('Leading or trailing whitespace is removed.');
164
+ return trimmedValue.toLowerCase();
165
+ });
166
+ function stringLimitLength(minimum, maximum) {
167
+ return (value, warn) => {
168
+ if (value === null)
169
+ return null;
170
+ if (value.length < minimum)
171
+ warn(`At least ${minimum} characters.`);
172
+ if (value.length > maximum)
173
+ warn(`At most ${maximum} characters.`);
174
+ return value;
175
+ };
176
+ }
177
+ Normalizer.stringLimitLength = stringLimitLength;
178
+ function stringEnum(enumObject) {
179
+ return stringEnumValues(...Object.values(enumObject));
180
+ }
181
+ Normalizer.stringEnum = stringEnum;
182
+ function stringEnumValues(...allowedValues) {
183
+ return (value, warn) => {
184
+ if (value === null)
185
+ return null;
186
+ if (!allowedValues.includes(value))
187
+ throw new Error(allowedValues.length < 7
188
+ ? `Expected one of the following values: ${allowedValues.map(allowedValue => `"${allowedValue}"`).join(', ')}.`
189
+ : `Invalid value.`);
190
+ return value;
191
+ };
192
+ }
193
+ Normalizer.stringEnumValues = stringEnumValues;
194
+ Normalizer.number = new Normalizer((value, warn) => {
195
+ if (value === null)
196
+ return null;
197
+ if (typeof value !== 'number')
198
+ warn('Expected a number.');
199
+ const parsedValue = typeof value === 'number' ? value : Number(value);
200
+ if (Number.isNaN(parsedValue))
201
+ throw new Error('Invalid number value.');
202
+ return parsedValue;
203
+ });
204
+ Normalizer.numberInteger = Normalizer.number.chain((value, warn) => {
205
+ if (value === null)
206
+ return null;
207
+ if (!Number.isInteger(value))
208
+ throw new Error('Expected an integer number.');
209
+ return value;
210
+ });
211
+ function numberLimitRange(minimum, maximum) {
212
+ return (value, warn) => {
213
+ if (!value)
214
+ return value;
215
+ if (value < minimum)
216
+ warn(`At least ${minimum}.`);
217
+ if (value > maximum)
218
+ warn(`At most ${maximum}.`);
219
+ return value;
220
+ };
221
+ }
222
+ Normalizer.numberLimitRange = numberLimitRange;
223
+ Normalizer.boolean = new Normalizer((value, warn) => {
224
+ if (value === null)
225
+ return null;
226
+ if (typeof value !== 'boolean')
227
+ warn('Expected a boolean.');
228
+ const parsedValue = typeof value === 'boolean' ? value : value === 'true' ? true : value === 'false' ? false : undefined;
229
+ if (parsedValue === undefined)
230
+ throw new Error('Invalid boolean value.');
231
+ return parsedValue;
232
+ });
233
+ Normalizer.object = new Normalizer((value, warn) => {
234
+ if (value === null)
235
+ return null;
236
+ if (!value || typeof value !== 'object' || arrayHelpers.isArray(value))
237
+ throw new Error('Expected an object.');
238
+ return value;
239
+ });
240
+ function objectRequireKeys(...keys) {
241
+ return (value, warn) => {
242
+ if (!value)
243
+ return value;
244
+ const missingKeys = keys.filter(key => value[key] === undefined);
245
+ if (missingKeys.length > 0)
246
+ throw new Error(`Missing required propert${missingKeys.length === 1 ? 'y' : 'ies'}: ${missingKeys.join(', ')}.`);
247
+ return value;
248
+ };
249
+ }
250
+ Normalizer.objectRequireKeys = objectRequireKeys;
251
+ Normalizer.array = new Normalizer((value, warn) => {
252
+ if (value === null)
253
+ return [];
254
+ return (arrayHelpers.isArray(value) ? value : [value]);
255
+ });
256
+ })(Normalizer || (Normalizer = {}));
257
+ //# sourceMappingURL=Normalizer.js.map