@strictly/define 0.0.1 → 0.0.2
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/.out/index.d.ts +17 -11
- package/.out/index.js +17 -11
- package/.out/transformers/copies/copy.d.ts +3 -3
- package/.out/transformers/copies/copy_to.d.ts +3 -3
- package/.out/transformers/copies/copy_to.js +4 -0
- package/.out/transformers/copies/mobx_copy.d.ts +4 -4
- package/.out/transformers/copies/mobx_copy.js +1 -1
- package/.out/transformers/copies/specs/copy_to.tests.js +8 -8
- package/.out/transformers/copies/specs/mobx_copy.tests.js +1 -1
- package/.out/transformers/flatteners/flatten_accessors_of_type.d.ts +5 -0
- package/.out/transformers/flatteners/flatten_accessors_of_type.js +11 -0
- package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.d.ts +2 -2
- package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.js +2 -2
- package/.out/transformers/flatteners/{flatten_type_def_to.d.ts → flatten_type_to.d.ts} +1 -1
- package/.out/transformers/flatteners/{flatten_type_def_to.js → flatten_type_to.js} +1 -1
- package/.out/transformers/flatteners/{flatten_type_defs_of.d.ts → flatten_types_of_type.d.ts} +1 -1
- package/.out/transformers/flatteners/flatten_types_of_type.js +7 -0
- package/.out/transformers/flatteners/flatten_validation_errors_of_type.d.ts +22 -0
- package/.out/transformers/flatteners/flatten_validation_errors_of_type.js +10 -0
- package/.out/transformers/flatteners/flatten_validators_of_validating_type.d.ts +4 -0
- package/.out/transformers/flatteners/flatten_validators_of_validating_type.js +17 -0
- package/.out/transformers/flatteners/{flatten_value_type_to.d.ts → flatten_value_to.d.ts} +4 -4
- package/.out/transformers/flatteners/{flatten_value_type_to.js → flatten_value_to.js} +7 -2
- package/.out/transformers/flatteners/flatten_values_of_type.d.ts +3 -0
- package/.out/transformers/flatteners/flatten_values_of_type.js +7 -0
- package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.js → flatten_accessors_of_type.tests.js} +5 -6
- package/.out/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.js +6 -6
- package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.js → flatten_type_to.tests.js} +15 -13
- package/.out/transformers/flatteners/specs/flatten_types_of_type.tests.js +18 -0
- package/.out/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.js +25 -0
- package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.js → flatten_value_to.tests.js} +81 -58
- package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.js → flatten_values_of_type.tests.js} +4 -4
- package/.out/transformers/flatteners/specs/value_path_to_type_path.tests.js +5 -3
- package/.out/transformers/flatteners/value_path_to_type_path.d.ts +1 -1
- package/.out/tsconfig.tsbuildinfo +1 -1
- package/.out/types/builders.d.ts +55 -29
- package/.out/types/builders.js +116 -32
- package/.out/types/definitions.d.ts +1 -1
- package/.out/types/flattened_accessors_of_type.d.ts +9 -0
- package/.out/types/{flattened_type_defs_of.d.ts → flattened_types_of_type.d.ts} +9 -6
- package/.out/types/flattened_types_of_validating_type.d.ts +25 -0
- package/.out/types/flattened_validators_of_validating_type.d.ts +10 -0
- package/.out/types/flattened_values_of_type.d.ts +6 -0
- package/.out/types/{mobx_value_type_of.d.ts → mobx_value_of_type.d.ts} +2 -2
- package/.out/types/{partial_type_def_of.d.ts → partial_type_of_type.d.ts} +1 -1
- package/.out/types/path_of.d.ts +1 -0
- package/.out/types/{json_paths_of.d.ts → paths_of_type.d.ts} +5 -5
- package/.out/types/readonly_type_of_type.d.ts +29 -0
- package/.out/types/specs/builder.tests.js +73 -23
- package/.out/types/specs/{flattened_accessors_of.tests.js → flattened_accessors_of_type.tests.js} +1 -1
- package/.out/types/specs/{flattened_type_defs_of.tests.js → flattened_types_of_type.tests.js} +22 -15
- package/.out/types/specs/flattened_validators_of_validating_type.tests.js +24 -0
- package/.out/types/specs/flattened_values_of_type.tests.js +18 -0
- package/.out/types/specs/{partial_type_def_of.tests.js → partial_type_of_type.tests.js} +4 -4
- package/.out/types/specs/{json_paths_of.tests.js → paths_of_type.tests.js} +19 -19
- package/.out/types/specs/{readonly_type_def_of.tests.js → readonly_type_of_type.tests.js} +6 -6
- package/.out/types/specs/type_of_type.tests.d.ts +1 -0
- package/.out/types/specs/type_of_type.tests.js +27 -0
- package/.out/types/specs/value_of_type.tests.d.ts +1 -0
- package/.out/types/specs/{value_type_of.tests.js → value_of_type.tests.js} +1 -1
- package/.out/types/specs/value_to_type_paths_of_type.tests.d.ts +1 -0
- package/.out/types/specs/{value_to_type_paths_of.tests.js → value_to_type_paths_of_type.tests.js} +9 -9
- package/.out/types/specs/value_types_of_discriminated_union.tests.js +2 -2
- package/.out/types/strict_definitions.d.ts +2 -2
- package/.out/types/type_of_type.d.ts +49 -0
- package/.out/types/type_of_type.js +70 -0
- package/.out/types/validating_definitions.d.ts +49 -0
- package/.out/types/validating_definitions.js +1 -0
- package/.out/types/validating_type_def_with_error.d.ts +55 -0
- package/.out/types/validating_type_def_with_error.js +1 -0
- package/.out/types/value_of_type.d.ts +24 -0
- package/.out/types/value_of_type.js +1 -0
- package/.out/types/{value_to_type_paths_of.d.ts → value_to_type_paths_of_type.d.ts} +13 -13
- package/.out/types/value_to_type_paths_of_type.js +1 -0
- package/.out/types/value_types_of_discriminated_union.d.ts +5 -4
- package/.out/validation/errors_of_validators.d.ts +4 -0
- package/.out/validation/errors_of_validators.js +1 -0
- package/.out/validation/specs/errors_of_validators.tests.d.ts +1 -0
- package/.out/validation/specs/errors_of_validators.tests.js +9 -0
- package/.out/validation/specs/validators_of_values.tests.d.ts +1 -0
- package/.out/validation/specs/validators_of_values.tests.js +21 -0
- package/.out/validation/validator.d.ts +21 -0
- package/.out/validation/validator.js +26 -0
- package/.out/validation/validators/defined_validator.d.ts +10 -0
- package/.out/validation/validators/defined_validator.js +18 -0
- package/.out/validation/validators/minimum_string_length_validator.d.ts +16 -0
- package/.out/validation/validators/minimum_string_length_validator.js +23 -0
- package/.out/validation/validators_of_values.d.ts +4 -0
- package/.out/validation/validators_of_values.js +1 -0
- package/.turbo/turbo-build.log +9 -9
- package/.turbo/turbo-check-types.log +1 -1
- package/.turbo/turbo-release$colon$exports.log +1 -1
- package/README.md +16 -2
- package/dist/index.cjs +364 -76
- package/dist/index.d.cts +365 -114
- package/dist/index.d.ts +365 -114
- package/dist/index.js +355 -73
- package/index.ts +17 -11
- package/package.json +11 -3
- package/transformers/copies/copy.ts +4 -4
- package/transformers/copies/copy_to.ts +11 -7
- package/transformers/copies/mobx_copy.ts +6 -6
- package/transformers/copies/specs/copy_to.tests.ts +8 -8
- package/transformers/copies/specs/mobx_copy.tests.ts +3 -3
- package/transformers/flatteners/{flatten_accessors_of.ts → flatten_accessors_of_type.ts} +10 -10
- package/transformers/flatteners/flatten_json_value_to_type_paths_of.ts +5 -5
- package/transformers/flatteners/{flatten_type_def_to.ts → flatten_type_to.ts} +1 -1
- package/transformers/flatteners/{flatten_type_defs_of.ts → flatten_types_of_type.ts} +3 -3
- package/transformers/flatteners/flatten_validation_errors_of_type.ts +93 -0
- package/transformers/flatteners/flatten_validators_of_validating_type.ts +32 -0
- package/transformers/flatteners/{flatten_value_type_to.ts → flatten_value_to.ts} +12 -7
- package/transformers/flatteners/{flatten_value_types_of.ts → flatten_values_of_type.ts} +6 -6
- package/transformers/flatteners/specs/{flatten_accessors_of.tests.ts → flatten_accessors_of_type.tests.ts} +10 -11
- package/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.ts +6 -6
- package/transformers/flatteners/specs/{flatten_type_def_to.tests.ts → flatten_type_to.tests.ts} +15 -13
- package/transformers/flatteners/specs/flatten_types_of_type.tests.ts +27 -0
- package/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.ts +48 -0
- package/transformers/flatteners/specs/{flatten_value_type_to.tests.ts → flatten_value_to.tests.ts} +124 -91
- package/transformers/flatteners/specs/{flatten_value_types_of.tests.ts → flatten_values_of_type.tests.ts} +4 -4
- package/transformers/flatteners/specs/value_path_to_type_path.tests.ts +20 -18
- package/transformers/flatteners/value_path_to_type_path.ts +4 -4
- package/types/builders.ts +239 -71
- package/types/definitions.ts +2 -2
- package/types/{flattened_accessors_of.ts → flattened_accessors_of_type.ts} +3 -3
- package/types/{flattened_type_defs_of.ts → flattened_types_of_type.ts} +22 -12
- package/types/flattened_types_of_validating_type.ts +152 -0
- package/types/flattened_validators_of_validating_type.ts +33 -0
- package/types/flattened_values_of_type.ts +11 -0
- package/types/{mobx_value_type_of.ts → mobx_value_of_type.ts} +2 -2
- package/types/{partial_type_def_of.ts → partial_type_of_type.ts} +3 -1
- package/types/{json_path_of.ts → path_of.ts} +1 -1
- package/types/{json_paths_of.ts → paths_of_type.ts} +5 -5
- package/types/readonly_type_of_type.ts +54 -0
- package/types/specs/builder.tests.ts +205 -54
- package/types/specs/{flattened_accessors_of.tests.ts → flattened_accessors_of_type.tests.ts} +3 -3
- package/types/specs/{flattened_type_defs_of.tests.ts → flattened_types_of_type.tests.ts} +82 -34
- package/types/specs/flattened_validators_of_validating_type.tests.ts +47 -0
- package/types/specs/flattened_values_of_type.tests.ts +39 -0
- package/types/specs/{partial_type_def_of.tests.ts → partial_type_of_type.tests.ts} +11 -11
- package/types/specs/{json_paths_of.tests.ts → paths_of_type.tests.ts} +47 -47
- package/types/specs/{readonly_type_def_of.tests.ts → readonly_type_of_type.tests.ts} +14 -14
- package/types/specs/type_of_type.tests.ts +60 -0
- package/types/specs/{value_type_of.tests.ts → value_of_type.tests.ts} +15 -15
- package/types/specs/{value_to_type_paths_of.tests.ts → value_to_type_paths_of_type.tests.ts} +26 -25
- package/types/specs/value_types_of_discriminated_union.tests.ts +6 -6
- package/types/strict_definitions.ts +3 -3
- package/types/type_of_type.ts +178 -0
- package/types/validating_definitions.ts +109 -0
- package/types/validating_type_def_with_error.ts +93 -0
- package/types/value_of_type.ts +84 -0
- package/types/{value_to_type_paths_of.ts → value_to_type_paths_of_type.ts} +30 -29
- package/types/value_types_of_discriminated_union.ts +4 -3
- package/validation/errors_of_validators.ts +10 -0
- package/validation/specs/errors_of_validators.tests.ts +20 -0
- package/validation/specs/validators_of_values.tests.ts +68 -0
- package/validation/validator.ts +103 -0
- package/validation/validators/defined_validator.ts +22 -0
- package/validation/validators/minimum_string_length_validator.ts +36 -0
- package/validation/validators_of_values.ts +17 -0
- package/.out/transformers/flatteners/flatten_accessors_of.d.ts +0 -5
- package/.out/transformers/flatteners/flatten_accessors_of.js +0 -11
- package/.out/transformers/flatteners/flatten_type_defs_of.js +0 -7
- package/.out/transformers/flatteners/flatten_value_types_of.d.ts +0 -3
- package/.out/transformers/flatteners/flatten_value_types_of.js +0 -7
- package/.out/transformers/flatteners/specs/flatten_type_defs_of.tests.js +0 -17
- package/.out/types/flattened_accessors_of.d.ts +0 -9
- package/.out/types/flattened_value_types_of.d.ts +0 -6
- package/.out/types/json_path_of.d.ts +0 -1
- package/.out/types/readonly_type_def_of.d.ts +0 -29
- package/.out/types/specs/flattened_value_types_of.tests.js +0 -11
- package/.out/types/value_type_of.d.ts +0 -24
- package/transformers/flatteners/specs/flatten_type_defs_of.tests.ts +0 -26
- package/types/flattened_value_types_of.ts +0 -11
- package/types/readonly_type_def_of.ts +0 -53
- package/types/specs/flattened_value_types_of.tests.ts +0 -21
- package/types/value_type_of.ts +0 -84
- /package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.d.ts → flatten_accessors_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.d.ts → flatten_type_to.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_type_defs_of.tests.d.ts → flatten_types_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.d.ts → flatten_validation_errors_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.d.ts → flatten_value_to.tests.d.ts} +0 -0
- /package/.out/{types/flattened_accessors_of.js → transformers/flatteners/specs/flatten_values_of_type.tests.d.ts} +0 -0
- /package/.out/types/{flattened_type_defs_of.js → flattened_accessors_of_type.js} +0 -0
- /package/.out/types/{flattened_value_types_of.js → flattened_types_of_type.js} +0 -0
- /package/.out/types/{json_path_of.js → flattened_types_of_validating_type.js} +0 -0
- /package/.out/types/{json_paths_of.js → flattened_validators_of_validating_type.js} +0 -0
- /package/.out/types/{partial_type_def_of.js → flattened_values_of_type.js} +0 -0
- /package/.out/types/{mobx_value_type_of.js → mobx_value_of_type.js} +0 -0
- /package/.out/types/{readonly_type_def_of.js → partial_type_of_type.js} +0 -0
- /package/.out/types/{specs/flattened_accessors_of.tests.d.ts → path_of.js} +0 -0
- /package/.out/types/{specs/flattened_type_defs_of.tests.d.ts → paths_of_type.js} +0 -0
- /package/.out/types/{specs/flattened_value_types_of.tests.d.ts → readonly_type_of_type.js} +0 -0
- /package/.out/types/specs/{json_paths_of.tests.d.ts → flattened_accessors_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{partial_type_def_of.tests.d.ts → flattened_types_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{readonly_type_def_of.tests.d.ts → flattened_validators_of_validating_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{value_to_type_paths_of.tests.d.ts → flattened_values_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{value_type_of.tests.d.ts → partial_type_of_type.tests.d.ts} +0 -0
- /package/.out/types/{value_to_type_paths_of.js → specs/paths_of_type.tests.d.ts} +0 -0
- /package/.out/types/{value_type_of.js → specs/readonly_type_of_type.tests.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -25,6 +25,9 @@ function copyTo({ definition }, value, copier) {
|
|
|
25
25
|
);
|
|
26
26
|
}
|
|
27
27
|
function internalCopyTo(definition, value, copier) {
|
|
28
|
+
if (value === void 0) {
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
28
31
|
switch (definition.type) {
|
|
29
32
|
case 1 /* Literal */:
|
|
30
33
|
return copyLiteral(
|
|
@@ -155,7 +158,7 @@ import {
|
|
|
155
158
|
observable
|
|
156
159
|
} from "mobx";
|
|
157
160
|
|
|
158
|
-
// transformers/flatteners/
|
|
161
|
+
// transformers/flatteners/flatten_value_to.ts
|
|
159
162
|
import {
|
|
160
163
|
reduce as reduce2,
|
|
161
164
|
UnreachableError as UnreachableError2
|
|
@@ -177,8 +180,8 @@ function jsonPathPop(path) {
|
|
|
177
180
|
];
|
|
178
181
|
}
|
|
179
182
|
|
|
180
|
-
// transformers/flatteners/
|
|
181
|
-
function
|
|
183
|
+
// transformers/flatteners/flatten_value_to.ts
|
|
184
|
+
function flattenValueTo({ definition }, v, setter, mapper2) {
|
|
182
185
|
const r = {};
|
|
183
186
|
internalFlattenValue(
|
|
184
187
|
"$",
|
|
@@ -186,32 +189,35 @@ function flattenValueTypeTo({ definition }, v, setter, mapper) {
|
|
|
186
189
|
definition,
|
|
187
190
|
v,
|
|
188
191
|
setter,
|
|
189
|
-
|
|
192
|
+
mapper2,
|
|
190
193
|
r
|
|
191
194
|
);
|
|
192
195
|
return r;
|
|
193
196
|
}
|
|
194
|
-
function internalFlattenValue(valuePath, typePath, typeDef, v, setter,
|
|
195
|
-
r[valuePath] =
|
|
196
|
-
|
|
197
|
+
function internalFlattenValue(valuePath, typePath, typeDef, v, setter, mapper2, r) {
|
|
198
|
+
r[valuePath] = mapper2(typeDef, v, setter, typePath, valuePath);
|
|
199
|
+
if (v !== void 0) {
|
|
200
|
+
return internalFlattenValueChildren(valuePath, typePath, "", typeDef, v, mapper2, r);
|
|
201
|
+
}
|
|
202
|
+
return r;
|
|
197
203
|
}
|
|
198
|
-
function internalFlattenValueChildren(valuePath, typePath, qualifier, typeDef, v,
|
|
204
|
+
function internalFlattenValueChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r) {
|
|
199
205
|
switch (typeDef.type) {
|
|
200
206
|
case 1 /* Literal */:
|
|
201
207
|
return r;
|
|
202
208
|
case 2 /* List */:
|
|
203
|
-
return internalFlattenListChildren(valuePath, typePath, typeDef, v,
|
|
209
|
+
return internalFlattenListChildren(valuePath, typePath, typeDef, v, mapper2, r);
|
|
204
210
|
case 3 /* Record */:
|
|
205
|
-
return internalFlattenRecordChildren(valuePath, typePath, typeDef, v,
|
|
211
|
+
return internalFlattenRecordChildren(valuePath, typePath, typeDef, v, mapper2, r);
|
|
206
212
|
case 4 /* Object */:
|
|
207
|
-
return internalFlattenObjectChildren(valuePath, typePath, qualifier, typeDef, v,
|
|
213
|
+
return internalFlattenObjectChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r);
|
|
208
214
|
case 5 /* Union */:
|
|
209
|
-
return internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v,
|
|
215
|
+
return internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r);
|
|
210
216
|
default:
|
|
211
217
|
throw new UnreachableError2(typeDef);
|
|
212
218
|
}
|
|
213
219
|
}
|
|
214
|
-
function internalFlattenListChildren(valuePath, typePath, { elements }, v,
|
|
220
|
+
function internalFlattenListChildren(valuePath, typePath, { elements }, v, mapper2, r) {
|
|
215
221
|
const newTypePath = jsonPath(typePath, "*");
|
|
216
222
|
return v.reduce(function(r2, e, i) {
|
|
217
223
|
return internalFlattenValue(
|
|
@@ -222,12 +228,12 @@ function internalFlattenListChildren(valuePath, typePath, { elements }, v, mappe
|
|
|
222
228
|
(e2) => {
|
|
223
229
|
v[i] = e2;
|
|
224
230
|
},
|
|
225
|
-
|
|
231
|
+
mapper2,
|
|
226
232
|
r2
|
|
227
233
|
);
|
|
228
234
|
}, r);
|
|
229
235
|
}
|
|
230
|
-
function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v,
|
|
236
|
+
function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v, mapper2, r) {
|
|
231
237
|
const newTypePath = jsonPath(typePath, "*");
|
|
232
238
|
return reduce2(
|
|
233
239
|
v,
|
|
@@ -240,14 +246,14 @@ function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v,
|
|
|
240
246
|
(value2) => {
|
|
241
247
|
v[k] = value2;
|
|
242
248
|
},
|
|
243
|
-
|
|
249
|
+
mapper2,
|
|
244
250
|
r2
|
|
245
251
|
);
|
|
246
252
|
},
|
|
247
253
|
r
|
|
248
254
|
);
|
|
249
255
|
}
|
|
250
|
-
function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields }, v,
|
|
256
|
+
function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields }, v, mapper2, r) {
|
|
251
257
|
return reduce2(
|
|
252
258
|
fields,
|
|
253
259
|
function(r2, k, fieldTypeDef) {
|
|
@@ -260,14 +266,14 @@ function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields
|
|
|
260
266
|
(value) => {
|
|
261
267
|
v[k] = value;
|
|
262
268
|
},
|
|
263
|
-
|
|
269
|
+
mapper2,
|
|
264
270
|
r2
|
|
265
271
|
);
|
|
266
272
|
},
|
|
267
273
|
r
|
|
268
274
|
);
|
|
269
275
|
}
|
|
270
|
-
function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v,
|
|
276
|
+
function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r) {
|
|
271
277
|
const childTypeDef = getUnionTypeDef(typeDef, v);
|
|
272
278
|
const newQualifier = typeDef.discriminator != null ? `${qualifier}${v[typeDef.discriminator]}:` : qualifier;
|
|
273
279
|
return internalFlattenValueChildren(
|
|
@@ -276,7 +282,7 @@ function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v
|
|
|
276
282
|
newQualifier,
|
|
277
283
|
childTypeDef,
|
|
278
284
|
v,
|
|
279
|
-
|
|
285
|
+
mapper2,
|
|
280
286
|
r
|
|
281
287
|
);
|
|
282
288
|
}
|
|
@@ -346,15 +352,15 @@ function mobxCopy(t, proto) {
|
|
|
346
352
|
return copyTo(t, proto, observeValue);
|
|
347
353
|
}
|
|
348
354
|
|
|
349
|
-
// transformers/flatteners/
|
|
355
|
+
// transformers/flatteners/flatten_accessors_of_type.ts
|
|
350
356
|
function mapAccessor(_t, value, set) {
|
|
351
357
|
return {
|
|
352
358
|
value,
|
|
353
359
|
set
|
|
354
360
|
};
|
|
355
361
|
}
|
|
356
|
-
function
|
|
357
|
-
return
|
|
362
|
+
function flattenAccessorsOfType(t, value, setValue) {
|
|
363
|
+
return flattenValueTo(
|
|
358
364
|
t,
|
|
359
365
|
value,
|
|
360
366
|
setValue,
|
|
@@ -367,7 +373,7 @@ function mapTypePaths(_t, _value, _set, typePath) {
|
|
|
367
373
|
return typePath;
|
|
368
374
|
}
|
|
369
375
|
function flattenJsonValueToTypePathsOf(t, value) {
|
|
370
|
-
return
|
|
376
|
+
return flattenValueTo(
|
|
371
377
|
t,
|
|
372
378
|
value,
|
|
373
379
|
function() {
|
|
@@ -376,17 +382,17 @@ function flattenJsonValueToTypePathsOf(t, value) {
|
|
|
376
382
|
);
|
|
377
383
|
}
|
|
378
384
|
|
|
379
|
-
// transformers/flatteners/
|
|
385
|
+
// transformers/flatteners/flatten_type_to.ts
|
|
380
386
|
import {
|
|
381
387
|
reduce as reduce4,
|
|
382
388
|
UnreachableError as UnreachableError4
|
|
383
389
|
} from "@strictly/base";
|
|
384
|
-
function
|
|
390
|
+
function flattenTypeTo({ definition }, mapper2) {
|
|
385
391
|
const typeDefs = internalFlattenTypeDef("$", definition, {});
|
|
386
392
|
return reduce4(
|
|
387
393
|
typeDefs,
|
|
388
394
|
function(acc, key, typeDef) {
|
|
389
|
-
acc[key] =
|
|
395
|
+
acc[key] = mapper2(typeDef);
|
|
390
396
|
return acc;
|
|
391
397
|
},
|
|
392
398
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -450,9 +456,9 @@ function internalFlattenUnionTypeDefChildren(path, qualifier, {
|
|
|
450
456
|
);
|
|
451
457
|
}
|
|
452
458
|
|
|
453
|
-
// transformers/flatteners/
|
|
454
|
-
function
|
|
455
|
-
return
|
|
459
|
+
// transformers/flatteners/flatten_types_of_type.ts
|
|
460
|
+
function flattenTypesOfType(t) {
|
|
461
|
+
return flattenTypeTo(
|
|
456
462
|
t,
|
|
457
463
|
function(definition) {
|
|
458
464
|
return { definition };
|
|
@@ -460,6 +466,41 @@ function flattenTypeDefsOf(t) {
|
|
|
460
466
|
);
|
|
461
467
|
}
|
|
462
468
|
|
|
469
|
+
// transformers/flatteners/flatten_validators_of_validating_type.ts
|
|
470
|
+
function flattenValidatorsOfValidatingType(type) {
|
|
471
|
+
return flattenTypeTo(type, function(definition) {
|
|
472
|
+
const {
|
|
473
|
+
rule,
|
|
474
|
+
readonly,
|
|
475
|
+
required
|
|
476
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
477
|
+
} = definition;
|
|
478
|
+
return {
|
|
479
|
+
annotations: function() {
|
|
480
|
+
return {
|
|
481
|
+
readonly,
|
|
482
|
+
required
|
|
483
|
+
};
|
|
484
|
+
},
|
|
485
|
+
validate: rule
|
|
486
|
+
};
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// transformers/flatteners/flatten_values_of_type.ts
|
|
491
|
+
function mapper(_t, v) {
|
|
492
|
+
return v;
|
|
493
|
+
}
|
|
494
|
+
function flattenValuesOfType(typeDef, value) {
|
|
495
|
+
return flattenValueTo(
|
|
496
|
+
typeDef,
|
|
497
|
+
value,
|
|
498
|
+
() => {
|
|
499
|
+
},
|
|
500
|
+
mapper
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
|
|
463
504
|
// transformers/flatteners/value_path_to_type_path.ts
|
|
464
505
|
import {
|
|
465
506
|
assertEqual,
|
|
@@ -599,77 +640,225 @@ function internalJsonValuePathToTypePath(typeDef, valueSteps, allowMissingPaths,
|
|
|
599
640
|
}
|
|
600
641
|
}
|
|
601
642
|
|
|
643
|
+
// types/type_of_type.ts
|
|
644
|
+
import {
|
|
645
|
+
map as map2,
|
|
646
|
+
UnreachableError as UnreachableError6
|
|
647
|
+
} from "@strictly/base";
|
|
648
|
+
function typeOfType({ definition }) {
|
|
649
|
+
return {
|
|
650
|
+
definition: typeDefOfTypeDef(definition)
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
function typeDefOfTypeDef(t) {
|
|
654
|
+
switch (t.type) {
|
|
655
|
+
case 1 /* Literal */:
|
|
656
|
+
return typeDefOfLiteralTypeDef(t);
|
|
657
|
+
case 2 /* List */:
|
|
658
|
+
return typeDefOfListTypeDef(t);
|
|
659
|
+
case 3 /* Record */:
|
|
660
|
+
return typeDefOfRecordTypeDef(t);
|
|
661
|
+
case 4 /* Object */:
|
|
662
|
+
return typeDefOfObjectTypeDef(t);
|
|
663
|
+
case 5 /* Union */:
|
|
664
|
+
return typeDefOfUnionTypeDef(t);
|
|
665
|
+
default:
|
|
666
|
+
throw new UnreachableError6(t);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
function typeDefOfLiteralTypeDef({
|
|
670
|
+
type,
|
|
671
|
+
valuePrototype
|
|
672
|
+
}) {
|
|
673
|
+
return {
|
|
674
|
+
type,
|
|
675
|
+
valuePrototype
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
function typeDefOfListTypeDef({
|
|
679
|
+
type,
|
|
680
|
+
elements
|
|
681
|
+
}) {
|
|
682
|
+
return {
|
|
683
|
+
type,
|
|
684
|
+
elements: typeDefOfTypeDef(elements)
|
|
685
|
+
};
|
|
686
|
+
}
|
|
687
|
+
function typeDefOfRecordTypeDef({
|
|
688
|
+
type,
|
|
689
|
+
keyPrototype,
|
|
690
|
+
valueTypeDef
|
|
691
|
+
}) {
|
|
692
|
+
return {
|
|
693
|
+
type,
|
|
694
|
+
keyPrototype,
|
|
695
|
+
valueTypeDef: typeDefOfTypeDef(valueTypeDef)
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
function typeDefOfObjectTypeDef({
|
|
699
|
+
type,
|
|
700
|
+
fields
|
|
701
|
+
}) {
|
|
702
|
+
return {
|
|
703
|
+
type,
|
|
704
|
+
fields: map2(fields, function(_k, v) {
|
|
705
|
+
return typeDefOfTypeDef(v);
|
|
706
|
+
})
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
function typeDefOfUnionTypeDef({
|
|
710
|
+
type,
|
|
711
|
+
discriminator,
|
|
712
|
+
unions
|
|
713
|
+
}) {
|
|
714
|
+
return {
|
|
715
|
+
type,
|
|
716
|
+
discriminator,
|
|
717
|
+
unions: map2(unions, function(_k, v) {
|
|
718
|
+
return typeDefOfTypeDef(v);
|
|
719
|
+
})
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
|
|
602
723
|
// types/builders.ts
|
|
603
|
-
|
|
724
|
+
function emptyRule() {
|
|
725
|
+
return null;
|
|
726
|
+
}
|
|
727
|
+
var TypeDefBuilder = class _TypeDefBuilder {
|
|
604
728
|
constructor(definition) {
|
|
605
729
|
this.definition = definition;
|
|
606
730
|
}
|
|
607
|
-
|
|
608
|
-
|
|
731
|
+
enforce(rule) {
|
|
732
|
+
return new _TypeDefBuilder(
|
|
733
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
734
|
+
{
|
|
735
|
+
...this.definition,
|
|
736
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
737
|
+
rule: (value) => {
|
|
738
|
+
return this.definition.rule(value) || rule(value);
|
|
739
|
+
}
|
|
740
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
741
|
+
}
|
|
742
|
+
);
|
|
743
|
+
}
|
|
744
|
+
required(rule) {
|
|
745
|
+
return new _TypeDefBuilder(
|
|
746
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
747
|
+
{
|
|
748
|
+
...this.definition,
|
|
749
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
750
|
+
rule: (v) => {
|
|
751
|
+
return this.definition.rule(v) || rule?.(v);
|
|
752
|
+
},
|
|
753
|
+
required: true
|
|
754
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
755
|
+
}
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
readonly() {
|
|
759
|
+
return new _TypeDefBuilder(
|
|
760
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
761
|
+
{
|
|
762
|
+
...this.definition,
|
|
763
|
+
readonly: true
|
|
764
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
765
|
+
}
|
|
766
|
+
);
|
|
767
|
+
}
|
|
768
|
+
// should only be used in tests requiring Types, client code should be happy with validating types
|
|
769
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
770
|
+
get _type() {
|
|
771
|
+
return typeOfType(this);
|
|
772
|
+
}
|
|
609
773
|
get narrow() {
|
|
610
774
|
return {
|
|
611
775
|
definition: this.definition
|
|
776
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
612
777
|
};
|
|
613
778
|
}
|
|
614
779
|
};
|
|
615
|
-
var
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
780
|
+
var ListTypeDefBuilder = class _ListTypeDefBuilder extends TypeDefBuilder {
|
|
781
|
+
readonlyElements() {
|
|
782
|
+
return new _ListTypeDefBuilder({
|
|
783
|
+
...this.definition,
|
|
784
|
+
elements: {
|
|
785
|
+
...this.definition.elements,
|
|
786
|
+
readonly: true
|
|
787
|
+
}
|
|
788
|
+
});
|
|
620
789
|
}
|
|
621
790
|
};
|
|
622
|
-
var RecordTypeDefBuilder = class extends TypeDefBuilder {
|
|
623
|
-
|
|
791
|
+
var RecordTypeDefBuilder = class _RecordTypeDefBuilder extends TypeDefBuilder {
|
|
792
|
+
partialKeys() {
|
|
624
793
|
return this;
|
|
625
794
|
}
|
|
626
|
-
|
|
627
|
-
return
|
|
795
|
+
readonlyKeys() {
|
|
796
|
+
return new _RecordTypeDefBuilder({
|
|
797
|
+
...this.definition,
|
|
798
|
+
valueTypeDef: {
|
|
799
|
+
...this.definition.valueTypeDef,
|
|
800
|
+
readonly: true
|
|
801
|
+
}
|
|
802
|
+
});
|
|
628
803
|
}
|
|
629
804
|
};
|
|
630
805
|
var ObjectTypeDefBuilder = class _ObjectTypeDefBuilder extends TypeDefBuilder {
|
|
631
|
-
|
|
632
|
-
const newFields = {
|
|
633
|
-
[name]: typeDef
|
|
634
|
-
};
|
|
806
|
+
field(name, { definition }, rule) {
|
|
635
807
|
return new _ObjectTypeDefBuilder({
|
|
636
|
-
|
|
808
|
+
...this.definition,
|
|
809
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
637
810
|
fields: {
|
|
638
811
|
...this.definition.fields,
|
|
639
|
-
|
|
812
|
+
[name]: {
|
|
813
|
+
...definition,
|
|
814
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
815
|
+
rule: function(v) {
|
|
816
|
+
return definition.rule(v) || rule?.(v);
|
|
817
|
+
},
|
|
818
|
+
required: true
|
|
819
|
+
}
|
|
640
820
|
}
|
|
641
821
|
});
|
|
642
822
|
}
|
|
643
|
-
|
|
823
|
+
readonlyField(name, { definition }) {
|
|
644
824
|
const newFields = {
|
|
645
|
-
[name]:
|
|
825
|
+
[name]: {
|
|
826
|
+
...definition,
|
|
827
|
+
required: true,
|
|
828
|
+
readonly: true
|
|
829
|
+
}
|
|
646
830
|
};
|
|
647
831
|
return new _ObjectTypeDefBuilder({
|
|
648
|
-
|
|
832
|
+
...this.definition,
|
|
649
833
|
fields: {
|
|
650
834
|
...this.definition.fields,
|
|
651
835
|
...newFields
|
|
652
836
|
}
|
|
653
837
|
});
|
|
654
838
|
}
|
|
655
|
-
|
|
839
|
+
optionalField(name, { definition }) {
|
|
656
840
|
const newFields = {
|
|
657
|
-
[name]:
|
|
841
|
+
[name]: {
|
|
842
|
+
...definition
|
|
843
|
+
}
|
|
658
844
|
};
|
|
659
845
|
return new _ObjectTypeDefBuilder({
|
|
660
|
-
|
|
846
|
+
...this.definition,
|
|
661
847
|
fields: {
|
|
662
848
|
...this.definition.fields,
|
|
663
849
|
...newFields
|
|
664
850
|
}
|
|
665
851
|
});
|
|
666
852
|
}
|
|
667
|
-
|
|
853
|
+
readonlyOptionalField(name, { definition }) {
|
|
668
854
|
const newFields = {
|
|
669
|
-
[name]:
|
|
855
|
+
[name]: {
|
|
856
|
+
...definition,
|
|
857
|
+
readonly: true
|
|
858
|
+
}
|
|
670
859
|
};
|
|
671
860
|
return new _ObjectTypeDefBuilder({
|
|
672
|
-
|
|
861
|
+
...this.definition,
|
|
673
862
|
fields: {
|
|
674
863
|
...this.definition.fields,
|
|
675
864
|
...newFields
|
|
@@ -678,17 +867,15 @@ var ObjectTypeDefBuilder = class _ObjectTypeDefBuilder extends TypeDefBuilder {
|
|
|
678
867
|
}
|
|
679
868
|
};
|
|
680
869
|
var UnionTypeDefBuilder = class _UnionTypeDefBuilder extends TypeDefBuilder {
|
|
681
|
-
|
|
870
|
+
or(k, {
|
|
682
871
|
definition: typeDef
|
|
683
872
|
}) {
|
|
684
873
|
const {
|
|
685
|
-
discriminator,
|
|
686
874
|
unions
|
|
687
875
|
} = this.definition;
|
|
688
876
|
return new _UnionTypeDefBuilder(
|
|
689
877
|
{
|
|
690
|
-
|
|
691
|
-
discriminator,
|
|
878
|
+
...this.definition,
|
|
692
879
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
693
880
|
unions: {
|
|
694
881
|
...unions,
|
|
@@ -699,9 +886,12 @@ var UnionTypeDefBuilder = class _UnionTypeDefBuilder extends TypeDefBuilder {
|
|
|
699
886
|
}
|
|
700
887
|
};
|
|
701
888
|
function literal(value) {
|
|
702
|
-
return new
|
|
889
|
+
return new TypeDefBuilder({
|
|
703
890
|
type: 1 /* Literal */,
|
|
704
|
-
valuePrototype: value
|
|
891
|
+
valuePrototype: value,
|
|
892
|
+
rule: emptyRule,
|
|
893
|
+
readonly: false,
|
|
894
|
+
required: false
|
|
705
895
|
});
|
|
706
896
|
}
|
|
707
897
|
var stringType = literal();
|
|
@@ -716,28 +906,40 @@ function nullable(nonNullable) {
|
|
|
716
906
|
unions: {
|
|
717
907
|
["0"]: nonNullable.definition,
|
|
718
908
|
["1"]: nullType.definition
|
|
719
|
-
}
|
|
909
|
+
},
|
|
910
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
911
|
+
rule: emptyRule,
|
|
912
|
+
readonly: false,
|
|
913
|
+
required: false
|
|
720
914
|
}
|
|
721
915
|
);
|
|
722
916
|
}
|
|
723
917
|
function list(elements) {
|
|
724
918
|
return new ListTypeDefBuilder({
|
|
725
919
|
type: 2 /* List */,
|
|
726
|
-
elements: elements.definition
|
|
920
|
+
elements: elements.definition,
|
|
921
|
+
rule: emptyRule,
|
|
922
|
+
readonly: false,
|
|
923
|
+
required: false
|
|
727
924
|
});
|
|
728
925
|
}
|
|
729
|
-
function record({ definition:
|
|
926
|
+
function record({ definition: valueTypeDef }) {
|
|
730
927
|
return new RecordTypeDefBuilder({
|
|
731
928
|
type: 3 /* Record */,
|
|
732
|
-
// eslint-disable-next-line no-undefined
|
|
733
929
|
keyPrototype: void 0,
|
|
734
|
-
valueTypeDef
|
|
930
|
+
valueTypeDef,
|
|
931
|
+
rule: emptyRule,
|
|
932
|
+
readonly: false,
|
|
933
|
+
required: false
|
|
735
934
|
});
|
|
736
935
|
}
|
|
737
936
|
function object() {
|
|
738
937
|
return new ObjectTypeDefBuilder({
|
|
739
938
|
type: 4 /* Object */,
|
|
740
|
-
fields: {}
|
|
939
|
+
fields: {},
|
|
940
|
+
rule: emptyRule,
|
|
941
|
+
readonly: false,
|
|
942
|
+
required: false
|
|
741
943
|
});
|
|
742
944
|
}
|
|
743
945
|
function union(discriminator) {
|
|
@@ -746,19 +948,98 @@ function union(discriminator) {
|
|
|
746
948
|
type: 5 /* Union */,
|
|
747
949
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
748
950
|
discriminator: discriminator ?? null,
|
|
749
|
-
unions: {}
|
|
951
|
+
unions: {},
|
|
952
|
+
rule: emptyRule,
|
|
953
|
+
readonly: false,
|
|
954
|
+
required: false
|
|
750
955
|
}
|
|
751
956
|
);
|
|
752
957
|
}
|
|
958
|
+
|
|
959
|
+
// validation/validator.ts
|
|
960
|
+
function isFunctionalValidator(v) {
|
|
961
|
+
return typeof v === "function";
|
|
962
|
+
}
|
|
963
|
+
function isAnnotatedValidator(v) {
|
|
964
|
+
return typeof v !== "function";
|
|
965
|
+
}
|
|
966
|
+
function validate(validator, v, valuePath, context) {
|
|
967
|
+
if (isAnnotatedValidator(validator)) {
|
|
968
|
+
return validator.validate(v, valuePath, context);
|
|
969
|
+
} else {
|
|
970
|
+
return validator(v, valuePath, context);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
function annotations(validator, valuePath, context) {
|
|
974
|
+
if (isAnnotatedValidator(validator)) {
|
|
975
|
+
return validator.annotations(valuePath, context);
|
|
976
|
+
} else {
|
|
977
|
+
return {
|
|
978
|
+
required: false,
|
|
979
|
+
readonly: false
|
|
980
|
+
};
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
// validation/validators/defined_validator.ts
|
|
985
|
+
var DefinedValidator = class {
|
|
986
|
+
constructor(error) {
|
|
987
|
+
this.error = error;
|
|
988
|
+
}
|
|
989
|
+
validate(v) {
|
|
990
|
+
if (v == null) {
|
|
991
|
+
return this.error;
|
|
992
|
+
}
|
|
993
|
+
return null;
|
|
994
|
+
}
|
|
995
|
+
annotations() {
|
|
996
|
+
return {
|
|
997
|
+
required: true,
|
|
998
|
+
readonly: false
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
1001
|
+
};
|
|
1002
|
+
|
|
1003
|
+
// validation/validators/minimum_string_length_validator.ts
|
|
1004
|
+
var MinimumStringLengthValidationErrorType = "minimum_string_length";
|
|
1005
|
+
var MinimumStringLengthValidator = class {
|
|
1006
|
+
constructor(minimumLength) {
|
|
1007
|
+
this.minimumLength = minimumLength;
|
|
1008
|
+
}
|
|
1009
|
+
validate(value) {
|
|
1010
|
+
if (value.length < this.minimumLength) {
|
|
1011
|
+
return {
|
|
1012
|
+
type: MinimumStringLengthValidationErrorType,
|
|
1013
|
+
minimumLength: this.minimumLength,
|
|
1014
|
+
receivedLength: value.length
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
return null;
|
|
1018
|
+
}
|
|
1019
|
+
annotations() {
|
|
1020
|
+
return {
|
|
1021
|
+
required: true,
|
|
1022
|
+
readonly: false
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
};
|
|
753
1026
|
export {
|
|
1027
|
+
DefinedValidator,
|
|
1028
|
+
MinimumStringLengthValidationErrorType,
|
|
1029
|
+
MinimumStringLengthValidator,
|
|
754
1030
|
TypeDefType,
|
|
1031
|
+
annotations,
|
|
755
1032
|
booleanType,
|
|
756
1033
|
copy,
|
|
757
|
-
|
|
1034
|
+
flattenAccessorsOfType,
|
|
758
1035
|
flattenJsonValueToTypePathsOf,
|
|
759
|
-
|
|
760
|
-
|
|
1036
|
+
flattenTypesOfType,
|
|
1037
|
+
flattenValidatorsOfValidatingType,
|
|
1038
|
+
flattenValueTo,
|
|
1039
|
+
flattenValuesOfType,
|
|
761
1040
|
getUnionTypeDef,
|
|
1041
|
+
isAnnotatedValidator,
|
|
1042
|
+
isFunctionalValidator,
|
|
762
1043
|
jsonPath,
|
|
763
1044
|
jsonPathPop,
|
|
764
1045
|
list,
|
|
@@ -771,5 +1052,6 @@ export {
|
|
|
771
1052
|
record,
|
|
772
1053
|
stringType,
|
|
773
1054
|
union,
|
|
1055
|
+
validate,
|
|
774
1056
|
valuePathToTypePath
|
|
775
1057
|
};
|