@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.
Files changed (199) hide show
  1. package/.out/index.d.ts +17 -11
  2. package/.out/index.js +17 -11
  3. package/.out/transformers/copies/copy.d.ts +3 -3
  4. package/.out/transformers/copies/copy_to.d.ts +3 -3
  5. package/.out/transformers/copies/copy_to.js +4 -0
  6. package/.out/transformers/copies/mobx_copy.d.ts +4 -4
  7. package/.out/transformers/copies/mobx_copy.js +1 -1
  8. package/.out/transformers/copies/specs/copy_to.tests.js +8 -8
  9. package/.out/transformers/copies/specs/mobx_copy.tests.js +1 -1
  10. package/.out/transformers/flatteners/flatten_accessors_of_type.d.ts +5 -0
  11. package/.out/transformers/flatteners/flatten_accessors_of_type.js +11 -0
  12. package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.d.ts +2 -2
  13. package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.js +2 -2
  14. package/.out/transformers/flatteners/{flatten_type_def_to.d.ts → flatten_type_to.d.ts} +1 -1
  15. package/.out/transformers/flatteners/{flatten_type_def_to.js → flatten_type_to.js} +1 -1
  16. package/.out/transformers/flatteners/{flatten_type_defs_of.d.ts → flatten_types_of_type.d.ts} +1 -1
  17. package/.out/transformers/flatteners/flatten_types_of_type.js +7 -0
  18. package/.out/transformers/flatteners/flatten_validation_errors_of_type.d.ts +22 -0
  19. package/.out/transformers/flatteners/flatten_validation_errors_of_type.js +10 -0
  20. package/.out/transformers/flatteners/flatten_validators_of_validating_type.d.ts +4 -0
  21. package/.out/transformers/flatteners/flatten_validators_of_validating_type.js +17 -0
  22. package/.out/transformers/flatteners/{flatten_value_type_to.d.ts → flatten_value_to.d.ts} +4 -4
  23. package/.out/transformers/flatteners/{flatten_value_type_to.js → flatten_value_to.js} +7 -2
  24. package/.out/transformers/flatteners/flatten_values_of_type.d.ts +3 -0
  25. package/.out/transformers/flatteners/flatten_values_of_type.js +7 -0
  26. package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.js → flatten_accessors_of_type.tests.js} +5 -6
  27. package/.out/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.js +6 -6
  28. package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.js → flatten_type_to.tests.js} +15 -13
  29. package/.out/transformers/flatteners/specs/flatten_types_of_type.tests.js +18 -0
  30. package/.out/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.js +25 -0
  31. package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.js → flatten_value_to.tests.js} +81 -58
  32. package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.js → flatten_values_of_type.tests.js} +4 -4
  33. package/.out/transformers/flatteners/specs/value_path_to_type_path.tests.js +5 -3
  34. package/.out/transformers/flatteners/value_path_to_type_path.d.ts +1 -1
  35. package/.out/tsconfig.tsbuildinfo +1 -1
  36. package/.out/types/builders.d.ts +55 -29
  37. package/.out/types/builders.js +116 -32
  38. package/.out/types/definitions.d.ts +1 -1
  39. package/.out/types/flattened_accessors_of_type.d.ts +9 -0
  40. package/.out/types/{flattened_type_defs_of.d.ts → flattened_types_of_type.d.ts} +9 -6
  41. package/.out/types/flattened_types_of_validating_type.d.ts +25 -0
  42. package/.out/types/flattened_validators_of_validating_type.d.ts +10 -0
  43. package/.out/types/flattened_values_of_type.d.ts +6 -0
  44. package/.out/types/{mobx_value_type_of.d.ts → mobx_value_of_type.d.ts} +2 -2
  45. package/.out/types/{partial_type_def_of.d.ts → partial_type_of_type.d.ts} +1 -1
  46. package/.out/types/path_of.d.ts +1 -0
  47. package/.out/types/{json_paths_of.d.ts → paths_of_type.d.ts} +5 -5
  48. package/.out/types/readonly_type_of_type.d.ts +29 -0
  49. package/.out/types/specs/builder.tests.js +73 -23
  50. package/.out/types/specs/{flattened_accessors_of.tests.js → flattened_accessors_of_type.tests.js} +1 -1
  51. package/.out/types/specs/{flattened_type_defs_of.tests.js → flattened_types_of_type.tests.js} +22 -15
  52. package/.out/types/specs/flattened_validators_of_validating_type.tests.js +24 -0
  53. package/.out/types/specs/flattened_values_of_type.tests.js +18 -0
  54. package/.out/types/specs/{partial_type_def_of.tests.js → partial_type_of_type.tests.js} +4 -4
  55. package/.out/types/specs/{json_paths_of.tests.js → paths_of_type.tests.js} +19 -19
  56. package/.out/types/specs/{readonly_type_def_of.tests.js → readonly_type_of_type.tests.js} +6 -6
  57. package/.out/types/specs/type_of_type.tests.d.ts +1 -0
  58. package/.out/types/specs/type_of_type.tests.js +27 -0
  59. package/.out/types/specs/value_of_type.tests.d.ts +1 -0
  60. package/.out/types/specs/{value_type_of.tests.js → value_of_type.tests.js} +1 -1
  61. package/.out/types/specs/value_to_type_paths_of_type.tests.d.ts +1 -0
  62. package/.out/types/specs/{value_to_type_paths_of.tests.js → value_to_type_paths_of_type.tests.js} +9 -9
  63. package/.out/types/specs/value_types_of_discriminated_union.tests.js +2 -2
  64. package/.out/types/strict_definitions.d.ts +2 -2
  65. package/.out/types/type_of_type.d.ts +49 -0
  66. package/.out/types/type_of_type.js +70 -0
  67. package/.out/types/validating_definitions.d.ts +49 -0
  68. package/.out/types/validating_definitions.js +1 -0
  69. package/.out/types/validating_type_def_with_error.d.ts +55 -0
  70. package/.out/types/validating_type_def_with_error.js +1 -0
  71. package/.out/types/value_of_type.d.ts +24 -0
  72. package/.out/types/value_of_type.js +1 -0
  73. package/.out/types/{value_to_type_paths_of.d.ts → value_to_type_paths_of_type.d.ts} +13 -13
  74. package/.out/types/value_to_type_paths_of_type.js +1 -0
  75. package/.out/types/value_types_of_discriminated_union.d.ts +5 -4
  76. package/.out/validation/errors_of_validators.d.ts +4 -0
  77. package/.out/validation/errors_of_validators.js +1 -0
  78. package/.out/validation/specs/errors_of_validators.tests.d.ts +1 -0
  79. package/.out/validation/specs/errors_of_validators.tests.js +9 -0
  80. package/.out/validation/specs/validators_of_values.tests.d.ts +1 -0
  81. package/.out/validation/specs/validators_of_values.tests.js +21 -0
  82. package/.out/validation/validator.d.ts +21 -0
  83. package/.out/validation/validator.js +26 -0
  84. package/.out/validation/validators/defined_validator.d.ts +10 -0
  85. package/.out/validation/validators/defined_validator.js +18 -0
  86. package/.out/validation/validators/minimum_string_length_validator.d.ts +16 -0
  87. package/.out/validation/validators/minimum_string_length_validator.js +23 -0
  88. package/.out/validation/validators_of_values.d.ts +4 -0
  89. package/.out/validation/validators_of_values.js +1 -0
  90. package/.turbo/turbo-build.log +9 -9
  91. package/.turbo/turbo-check-types.log +1 -1
  92. package/.turbo/turbo-release$colon$exports.log +1 -1
  93. package/README.md +16 -2
  94. package/dist/index.cjs +364 -76
  95. package/dist/index.d.cts +365 -114
  96. package/dist/index.d.ts +365 -114
  97. package/dist/index.js +355 -73
  98. package/index.ts +17 -11
  99. package/package.json +11 -3
  100. package/transformers/copies/copy.ts +4 -4
  101. package/transformers/copies/copy_to.ts +11 -7
  102. package/transformers/copies/mobx_copy.ts +6 -6
  103. package/transformers/copies/specs/copy_to.tests.ts +8 -8
  104. package/transformers/copies/specs/mobx_copy.tests.ts +3 -3
  105. package/transformers/flatteners/{flatten_accessors_of.ts → flatten_accessors_of_type.ts} +10 -10
  106. package/transformers/flatteners/flatten_json_value_to_type_paths_of.ts +5 -5
  107. package/transformers/flatteners/{flatten_type_def_to.ts → flatten_type_to.ts} +1 -1
  108. package/transformers/flatteners/{flatten_type_defs_of.ts → flatten_types_of_type.ts} +3 -3
  109. package/transformers/flatteners/flatten_validation_errors_of_type.ts +93 -0
  110. package/transformers/flatteners/flatten_validators_of_validating_type.ts +32 -0
  111. package/transformers/flatteners/{flatten_value_type_to.ts → flatten_value_to.ts} +12 -7
  112. package/transformers/flatteners/{flatten_value_types_of.ts → flatten_values_of_type.ts} +6 -6
  113. package/transformers/flatteners/specs/{flatten_accessors_of.tests.ts → flatten_accessors_of_type.tests.ts} +10 -11
  114. package/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.ts +6 -6
  115. package/transformers/flatteners/specs/{flatten_type_def_to.tests.ts → flatten_type_to.tests.ts} +15 -13
  116. package/transformers/flatteners/specs/flatten_types_of_type.tests.ts +27 -0
  117. package/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.ts +48 -0
  118. package/transformers/flatteners/specs/{flatten_value_type_to.tests.ts → flatten_value_to.tests.ts} +124 -91
  119. package/transformers/flatteners/specs/{flatten_value_types_of.tests.ts → flatten_values_of_type.tests.ts} +4 -4
  120. package/transformers/flatteners/specs/value_path_to_type_path.tests.ts +20 -18
  121. package/transformers/flatteners/value_path_to_type_path.ts +4 -4
  122. package/types/builders.ts +239 -71
  123. package/types/definitions.ts +2 -2
  124. package/types/{flattened_accessors_of.ts → flattened_accessors_of_type.ts} +3 -3
  125. package/types/{flattened_type_defs_of.ts → flattened_types_of_type.ts} +22 -12
  126. package/types/flattened_types_of_validating_type.ts +152 -0
  127. package/types/flattened_validators_of_validating_type.ts +33 -0
  128. package/types/flattened_values_of_type.ts +11 -0
  129. package/types/{mobx_value_type_of.ts → mobx_value_of_type.ts} +2 -2
  130. package/types/{partial_type_def_of.ts → partial_type_of_type.ts} +3 -1
  131. package/types/{json_path_of.ts → path_of.ts} +1 -1
  132. package/types/{json_paths_of.ts → paths_of_type.ts} +5 -5
  133. package/types/readonly_type_of_type.ts +54 -0
  134. package/types/specs/builder.tests.ts +205 -54
  135. package/types/specs/{flattened_accessors_of.tests.ts → flattened_accessors_of_type.tests.ts} +3 -3
  136. package/types/specs/{flattened_type_defs_of.tests.ts → flattened_types_of_type.tests.ts} +82 -34
  137. package/types/specs/flattened_validators_of_validating_type.tests.ts +47 -0
  138. package/types/specs/flattened_values_of_type.tests.ts +39 -0
  139. package/types/specs/{partial_type_def_of.tests.ts → partial_type_of_type.tests.ts} +11 -11
  140. package/types/specs/{json_paths_of.tests.ts → paths_of_type.tests.ts} +47 -47
  141. package/types/specs/{readonly_type_def_of.tests.ts → readonly_type_of_type.tests.ts} +14 -14
  142. package/types/specs/type_of_type.tests.ts +60 -0
  143. package/types/specs/{value_type_of.tests.ts → value_of_type.tests.ts} +15 -15
  144. package/types/specs/{value_to_type_paths_of.tests.ts → value_to_type_paths_of_type.tests.ts} +26 -25
  145. package/types/specs/value_types_of_discriminated_union.tests.ts +6 -6
  146. package/types/strict_definitions.ts +3 -3
  147. package/types/type_of_type.ts +178 -0
  148. package/types/validating_definitions.ts +109 -0
  149. package/types/validating_type_def_with_error.ts +93 -0
  150. package/types/value_of_type.ts +84 -0
  151. package/types/{value_to_type_paths_of.ts → value_to_type_paths_of_type.ts} +30 -29
  152. package/types/value_types_of_discriminated_union.ts +4 -3
  153. package/validation/errors_of_validators.ts +10 -0
  154. package/validation/specs/errors_of_validators.tests.ts +20 -0
  155. package/validation/specs/validators_of_values.tests.ts +68 -0
  156. package/validation/validator.ts +103 -0
  157. package/validation/validators/defined_validator.ts +22 -0
  158. package/validation/validators/minimum_string_length_validator.ts +36 -0
  159. package/validation/validators_of_values.ts +17 -0
  160. package/.out/transformers/flatteners/flatten_accessors_of.d.ts +0 -5
  161. package/.out/transformers/flatteners/flatten_accessors_of.js +0 -11
  162. package/.out/transformers/flatteners/flatten_type_defs_of.js +0 -7
  163. package/.out/transformers/flatteners/flatten_value_types_of.d.ts +0 -3
  164. package/.out/transformers/flatteners/flatten_value_types_of.js +0 -7
  165. package/.out/transformers/flatteners/specs/flatten_type_defs_of.tests.js +0 -17
  166. package/.out/types/flattened_accessors_of.d.ts +0 -9
  167. package/.out/types/flattened_value_types_of.d.ts +0 -6
  168. package/.out/types/json_path_of.d.ts +0 -1
  169. package/.out/types/readonly_type_def_of.d.ts +0 -29
  170. package/.out/types/specs/flattened_value_types_of.tests.js +0 -11
  171. package/.out/types/value_type_of.d.ts +0 -24
  172. package/transformers/flatteners/specs/flatten_type_defs_of.tests.ts +0 -26
  173. package/types/flattened_value_types_of.ts +0 -11
  174. package/types/readonly_type_def_of.ts +0 -53
  175. package/types/specs/flattened_value_types_of.tests.ts +0 -21
  176. package/types/value_type_of.ts +0 -84
  177. /package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.d.ts → flatten_accessors_of_type.tests.d.ts} +0 -0
  178. /package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.d.ts → flatten_type_to.tests.d.ts} +0 -0
  179. /package/.out/transformers/flatteners/specs/{flatten_type_defs_of.tests.d.ts → flatten_types_of_type.tests.d.ts} +0 -0
  180. /package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.d.ts → flatten_validation_errors_of_type.tests.d.ts} +0 -0
  181. /package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.d.ts → flatten_value_to.tests.d.ts} +0 -0
  182. /package/.out/{types/flattened_accessors_of.js → transformers/flatteners/specs/flatten_values_of_type.tests.d.ts} +0 -0
  183. /package/.out/types/{flattened_type_defs_of.js → flattened_accessors_of_type.js} +0 -0
  184. /package/.out/types/{flattened_value_types_of.js → flattened_types_of_type.js} +0 -0
  185. /package/.out/types/{json_path_of.js → flattened_types_of_validating_type.js} +0 -0
  186. /package/.out/types/{json_paths_of.js → flattened_validators_of_validating_type.js} +0 -0
  187. /package/.out/types/{partial_type_def_of.js → flattened_values_of_type.js} +0 -0
  188. /package/.out/types/{mobx_value_type_of.js → mobx_value_of_type.js} +0 -0
  189. /package/.out/types/{readonly_type_def_of.js → partial_type_of_type.js} +0 -0
  190. /package/.out/types/{specs/flattened_accessors_of.tests.d.ts → path_of.js} +0 -0
  191. /package/.out/types/{specs/flattened_type_defs_of.tests.d.ts → paths_of_type.js} +0 -0
  192. /package/.out/types/{specs/flattened_value_types_of.tests.d.ts → readonly_type_of_type.js} +0 -0
  193. /package/.out/types/specs/{json_paths_of.tests.d.ts → flattened_accessors_of_type.tests.d.ts} +0 -0
  194. /package/.out/types/specs/{partial_type_def_of.tests.d.ts → flattened_types_of_type.tests.d.ts} +0 -0
  195. /package/.out/types/specs/{readonly_type_def_of.tests.d.ts → flattened_validators_of_validating_type.tests.d.ts} +0 -0
  196. /package/.out/types/specs/{value_to_type_paths_of.tests.d.ts → flattened_values_of_type.tests.d.ts} +0 -0
  197. /package/.out/types/specs/{value_type_of.tests.d.ts → partial_type_of_type.tests.d.ts} +0 -0
  198. /package/.out/types/{value_to_type_paths_of.js → specs/paths_of_type.tests.d.ts} +0 -0
  199. /package/.out/types/{value_type_of.js → specs/readonly_type_of_type.tests.d.ts} +0 -0
package/dist/index.cjs CHANGED
@@ -20,14 +20,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ DefinedValidator: () => DefinedValidator,
24
+ MinimumStringLengthValidationErrorType: () => MinimumStringLengthValidationErrorType,
25
+ MinimumStringLengthValidator: () => MinimumStringLengthValidator,
23
26
  TypeDefType: () => TypeDefType,
27
+ annotations: () => annotations,
24
28
  booleanType: () => booleanType,
25
29
  copy: () => copy,
26
- flattenAccessorsOf: () => flattenAccessorsOf,
30
+ flattenAccessorsOfType: () => flattenAccessorsOfType,
27
31
  flattenJsonValueToTypePathsOf: () => flattenJsonValueToTypePathsOf,
28
- flattenTypeDefsOf: () => flattenTypeDefsOf,
29
- flattenValueTypeTo: () => flattenValueTypeTo,
32
+ flattenTypesOfType: () => flattenTypesOfType,
33
+ flattenValidatorsOfValidatingType: () => flattenValidatorsOfValidatingType,
34
+ flattenValueTo: () => flattenValueTo,
35
+ flattenValuesOfType: () => flattenValuesOfType,
30
36
  getUnionTypeDef: () => getUnionTypeDef,
37
+ isAnnotatedValidator: () => isAnnotatedValidator,
38
+ isFunctionalValidator: () => isFunctionalValidator,
31
39
  jsonPath: () => jsonPath,
32
40
  jsonPathPop: () => jsonPathPop,
33
41
  list: () => list,
@@ -40,6 +48,7 @@ __export(index_exports, {
40
48
  record: () => record,
41
49
  stringType: () => stringType,
42
50
  union: () => union,
51
+ validate: () => validate,
43
52
  valuePathToTypePath: () => valuePathToTypePath
44
53
  });
45
54
  module.exports = __toCommonJS(index_exports);
@@ -66,6 +75,9 @@ function copyTo({ definition }, value, copier) {
66
75
  );
67
76
  }
68
77
  function internalCopyTo(definition, value, copier) {
78
+ if (value === void 0) {
79
+ return void 0;
80
+ }
69
81
  switch (definition.type) {
70
82
  case 1 /* Literal */:
71
83
  return copyLiteral(
@@ -190,7 +202,7 @@ function copy(t, proto) {
190
202
  var import_base3 = require("@strictly/base");
191
203
  var import_mobx = require("mobx");
192
204
 
193
- // transformers/flatteners/flatten_value_type_to.ts
205
+ // transformers/flatteners/flatten_value_to.ts
194
206
  var import_base2 = require("@strictly/base");
195
207
 
196
208
  // transformers/flatteners/json_path.ts
@@ -209,8 +221,8 @@ function jsonPathPop(path) {
209
221
  ];
210
222
  }
211
223
 
212
- // transformers/flatteners/flatten_value_type_to.ts
213
- function flattenValueTypeTo({ definition }, v, setter, mapper) {
224
+ // transformers/flatteners/flatten_value_to.ts
225
+ function flattenValueTo({ definition }, v, setter, mapper2) {
214
226
  const r = {};
215
227
  internalFlattenValue(
216
228
  "$",
@@ -218,32 +230,35 @@ function flattenValueTypeTo({ definition }, v, setter, mapper) {
218
230
  definition,
219
231
  v,
220
232
  setter,
221
- mapper,
233
+ mapper2,
222
234
  r
223
235
  );
224
236
  return r;
225
237
  }
226
- function internalFlattenValue(valuePath, typePath, typeDef, v, setter, mapper, r) {
227
- r[valuePath] = mapper(typeDef, v, setter, typePath, valuePath);
228
- return internalFlattenValueChildren(valuePath, typePath, "", typeDef, v, mapper, r);
238
+ function internalFlattenValue(valuePath, typePath, typeDef, v, setter, mapper2, r) {
239
+ r[valuePath] = mapper2(typeDef, v, setter, typePath, valuePath);
240
+ if (v !== void 0) {
241
+ return internalFlattenValueChildren(valuePath, typePath, "", typeDef, v, mapper2, r);
242
+ }
243
+ return r;
229
244
  }
230
- function internalFlattenValueChildren(valuePath, typePath, qualifier, typeDef, v, mapper, r) {
245
+ function internalFlattenValueChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r) {
231
246
  switch (typeDef.type) {
232
247
  case 1 /* Literal */:
233
248
  return r;
234
249
  case 2 /* List */:
235
- return internalFlattenListChildren(valuePath, typePath, typeDef, v, mapper, r);
250
+ return internalFlattenListChildren(valuePath, typePath, typeDef, v, mapper2, r);
236
251
  case 3 /* Record */:
237
- return internalFlattenRecordChildren(valuePath, typePath, typeDef, v, mapper, r);
252
+ return internalFlattenRecordChildren(valuePath, typePath, typeDef, v, mapper2, r);
238
253
  case 4 /* Object */:
239
- return internalFlattenObjectChildren(valuePath, typePath, qualifier, typeDef, v, mapper, r);
254
+ return internalFlattenObjectChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r);
240
255
  case 5 /* Union */:
241
- return internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper, r);
256
+ return internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r);
242
257
  default:
243
258
  throw new import_base2.UnreachableError(typeDef);
244
259
  }
245
260
  }
246
- function internalFlattenListChildren(valuePath, typePath, { elements }, v, mapper, r) {
261
+ function internalFlattenListChildren(valuePath, typePath, { elements }, v, mapper2, r) {
247
262
  const newTypePath = jsonPath(typePath, "*");
248
263
  return v.reduce(function(r2, e, i) {
249
264
  return internalFlattenValue(
@@ -254,12 +269,12 @@ function internalFlattenListChildren(valuePath, typePath, { elements }, v, mappe
254
269
  (e2) => {
255
270
  v[i] = e2;
256
271
  },
257
- mapper,
272
+ mapper2,
258
273
  r2
259
274
  );
260
275
  }, r);
261
276
  }
262
- function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v, mapper, r) {
277
+ function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v, mapper2, r) {
263
278
  const newTypePath = jsonPath(typePath, "*");
264
279
  return (0, import_base2.reduce)(
265
280
  v,
@@ -272,14 +287,14 @@ function internalFlattenRecordChildren(valuePath, typePath, { valueTypeDef }, v,
272
287
  (value2) => {
273
288
  v[k] = value2;
274
289
  },
275
- mapper,
290
+ mapper2,
276
291
  r2
277
292
  );
278
293
  },
279
294
  r
280
295
  );
281
296
  }
282
- function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields }, v, mapper, r) {
297
+ function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields }, v, mapper2, r) {
283
298
  return (0, import_base2.reduce)(
284
299
  fields,
285
300
  function(r2, k, fieldTypeDef) {
@@ -292,14 +307,14 @@ function internalFlattenObjectChildren(valuePath, typePath, qualifier, { fields
292
307
  (value) => {
293
308
  v[k] = value;
294
309
  },
295
- mapper,
310
+ mapper2,
296
311
  r2
297
312
  );
298
313
  },
299
314
  r
300
315
  );
301
316
  }
302
- function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper, r) {
317
+ function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v, mapper2, r) {
303
318
  const childTypeDef = getUnionTypeDef(typeDef, v);
304
319
  const newQualifier = typeDef.discriminator != null ? `${qualifier}${v[typeDef.discriminator]}:` : qualifier;
305
320
  return internalFlattenValueChildren(
@@ -308,7 +323,7 @@ function internalFlattenUnionChildren(valuePath, typePath, qualifier, typeDef, v
308
323
  newQualifier,
309
324
  childTypeDef,
310
325
  v,
311
- mapper,
326
+ mapper2,
312
327
  r
313
328
  );
314
329
  }
@@ -378,15 +393,15 @@ function mobxCopy(t, proto) {
378
393
  return copyTo(t, proto, observeValue);
379
394
  }
380
395
 
381
- // transformers/flatteners/flatten_accessors_of.ts
396
+ // transformers/flatteners/flatten_accessors_of_type.ts
382
397
  function mapAccessor(_t, value, set) {
383
398
  return {
384
399
  value,
385
400
  set
386
401
  };
387
402
  }
388
- function flattenAccessorsOf(t, value, setValue) {
389
- return flattenValueTypeTo(
403
+ function flattenAccessorsOfType(t, value, setValue) {
404
+ return flattenValueTo(
390
405
  t,
391
406
  value,
392
407
  setValue,
@@ -399,7 +414,7 @@ function mapTypePaths(_t, _value, _set, typePath) {
399
414
  return typePath;
400
415
  }
401
416
  function flattenJsonValueToTypePathsOf(t, value) {
402
- return flattenValueTypeTo(
417
+ return flattenValueTo(
403
418
  t,
404
419
  value,
405
420
  function() {
@@ -408,14 +423,14 @@ function flattenJsonValueToTypePathsOf(t, value) {
408
423
  );
409
424
  }
410
425
 
411
- // transformers/flatteners/flatten_type_def_to.ts
426
+ // transformers/flatteners/flatten_type_to.ts
412
427
  var import_base4 = require("@strictly/base");
413
- function flattenTypeDefTo({ definition }, mapper) {
428
+ function flattenTypeTo({ definition }, mapper2) {
414
429
  const typeDefs = internalFlattenTypeDef("$", definition, {});
415
430
  return (0, import_base4.reduce)(
416
431
  typeDefs,
417
432
  function(acc, key, typeDef) {
418
- acc[key] = mapper(typeDef);
433
+ acc[key] = mapper2(typeDef);
419
434
  return acc;
420
435
  },
421
436
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
@@ -479,9 +494,9 @@ function internalFlattenUnionTypeDefChildren(path, qualifier, {
479
494
  );
480
495
  }
481
496
 
482
- // transformers/flatteners/flatten_type_defs_of.ts
483
- function flattenTypeDefsOf(t) {
484
- return flattenTypeDefTo(
497
+ // transformers/flatteners/flatten_types_of_type.ts
498
+ function flattenTypesOfType(t) {
499
+ return flattenTypeTo(
485
500
  t,
486
501
  function(definition) {
487
502
  return { definition };
@@ -489,6 +504,41 @@ function flattenTypeDefsOf(t) {
489
504
  );
490
505
  }
491
506
 
507
+ // transformers/flatteners/flatten_validators_of_validating_type.ts
508
+ function flattenValidatorsOfValidatingType(type) {
509
+ return flattenTypeTo(type, function(definition) {
510
+ const {
511
+ rule,
512
+ readonly,
513
+ required
514
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
515
+ } = definition;
516
+ return {
517
+ annotations: function() {
518
+ return {
519
+ readonly,
520
+ required
521
+ };
522
+ },
523
+ validate: rule
524
+ };
525
+ });
526
+ }
527
+
528
+ // transformers/flatteners/flatten_values_of_type.ts
529
+ function mapper(_t, v) {
530
+ return v;
531
+ }
532
+ function flattenValuesOfType(typeDef, value) {
533
+ return flattenValueTo(
534
+ typeDef,
535
+ value,
536
+ () => {
537
+ },
538
+ mapper
539
+ );
540
+ }
541
+
492
542
  // transformers/flatteners/value_path_to_type_path.ts
493
543
  var import_base5 = require("@strictly/base");
494
544
  function valuePathToTypePath({ definition: typeDef }, valuePath, allowMissingPaths = false) {
@@ -621,77 +671,222 @@ function internalJsonValuePathToTypePath(typeDef, valueSteps, allowMissingPaths,
621
671
  }
622
672
  }
623
673
 
674
+ // types/type_of_type.ts
675
+ var import_base6 = require("@strictly/base");
676
+ function typeOfType({ definition }) {
677
+ return {
678
+ definition: typeDefOfTypeDef(definition)
679
+ };
680
+ }
681
+ function typeDefOfTypeDef(t) {
682
+ switch (t.type) {
683
+ case 1 /* Literal */:
684
+ return typeDefOfLiteralTypeDef(t);
685
+ case 2 /* List */:
686
+ return typeDefOfListTypeDef(t);
687
+ case 3 /* Record */:
688
+ return typeDefOfRecordTypeDef(t);
689
+ case 4 /* Object */:
690
+ return typeDefOfObjectTypeDef(t);
691
+ case 5 /* Union */:
692
+ return typeDefOfUnionTypeDef(t);
693
+ default:
694
+ throw new import_base6.UnreachableError(t);
695
+ }
696
+ }
697
+ function typeDefOfLiteralTypeDef({
698
+ type,
699
+ valuePrototype
700
+ }) {
701
+ return {
702
+ type,
703
+ valuePrototype
704
+ };
705
+ }
706
+ function typeDefOfListTypeDef({
707
+ type,
708
+ elements
709
+ }) {
710
+ return {
711
+ type,
712
+ elements: typeDefOfTypeDef(elements)
713
+ };
714
+ }
715
+ function typeDefOfRecordTypeDef({
716
+ type,
717
+ keyPrototype,
718
+ valueTypeDef
719
+ }) {
720
+ return {
721
+ type,
722
+ keyPrototype,
723
+ valueTypeDef: typeDefOfTypeDef(valueTypeDef)
724
+ };
725
+ }
726
+ function typeDefOfObjectTypeDef({
727
+ type,
728
+ fields
729
+ }) {
730
+ return {
731
+ type,
732
+ fields: (0, import_base6.map)(fields, function(_k, v) {
733
+ return typeDefOfTypeDef(v);
734
+ })
735
+ };
736
+ }
737
+ function typeDefOfUnionTypeDef({
738
+ type,
739
+ discriminator,
740
+ unions
741
+ }) {
742
+ return {
743
+ type,
744
+ discriminator,
745
+ unions: (0, import_base6.map)(unions, function(_k, v) {
746
+ return typeDefOfTypeDef(v);
747
+ })
748
+ };
749
+ }
750
+
624
751
  // types/builders.ts
625
- var TypeDefBuilder = class {
752
+ function emptyRule() {
753
+ return null;
754
+ }
755
+ var TypeDefBuilder = class _TypeDefBuilder {
626
756
  constructor(definition) {
627
757
  this.definition = definition;
628
758
  }
629
- // returns just the relevant types, which can help typescript
630
- // from complaining about infinitely deep data structures
759
+ enforce(rule) {
760
+ return new _TypeDefBuilder(
761
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
762
+ {
763
+ ...this.definition,
764
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
765
+ rule: (value) => {
766
+ return this.definition.rule(value) || rule(value);
767
+ }
768
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
769
+ }
770
+ );
771
+ }
772
+ required(rule) {
773
+ return new _TypeDefBuilder(
774
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
775
+ {
776
+ ...this.definition,
777
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
778
+ rule: (v) => {
779
+ return this.definition.rule(v) || rule?.(v);
780
+ },
781
+ required: true
782
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
783
+ }
784
+ );
785
+ }
786
+ readonly() {
787
+ return new _TypeDefBuilder(
788
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
789
+ {
790
+ ...this.definition,
791
+ readonly: true
792
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
793
+ }
794
+ );
795
+ }
796
+ // should only be used in tests requiring Types, client code should be happy with validating types
797
+ // eslint-disable-next-line @typescript-eslint/naming-convention
798
+ get _type() {
799
+ return typeOfType(this);
800
+ }
631
801
  get narrow() {
632
802
  return {
633
803
  definition: this.definition
804
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
634
805
  };
635
806
  }
636
807
  };
637
- var LiteralTypeDefBuilder = class extends TypeDefBuilder {
638
- };
639
- var ListTypeDefBuilder = class extends TypeDefBuilder {
640
- readonly() {
641
- return this;
808
+ var ListTypeDefBuilder = class _ListTypeDefBuilder extends TypeDefBuilder {
809
+ readonlyElements() {
810
+ return new _ListTypeDefBuilder({
811
+ ...this.definition,
812
+ elements: {
813
+ ...this.definition.elements,
814
+ readonly: true
815
+ }
816
+ });
642
817
  }
643
818
  };
644
- var RecordTypeDefBuilder = class extends TypeDefBuilder {
645
- partial() {
819
+ var RecordTypeDefBuilder = class _RecordTypeDefBuilder extends TypeDefBuilder {
820
+ partialKeys() {
646
821
  return this;
647
822
  }
648
- readonly() {
649
- return this;
823
+ readonlyKeys() {
824
+ return new _RecordTypeDefBuilder({
825
+ ...this.definition,
826
+ valueTypeDef: {
827
+ ...this.definition.valueTypeDef,
828
+ readonly: true
829
+ }
830
+ });
650
831
  }
651
832
  };
652
833
  var ObjectTypeDefBuilder = class _ObjectTypeDefBuilder extends TypeDefBuilder {
653
- set(name, { definition: typeDef }) {
654
- const newFields = {
655
- [name]: typeDef
656
- };
834
+ field(name, { definition }, rule) {
657
835
  return new _ObjectTypeDefBuilder({
658
- type: 4 /* Object */,
836
+ ...this.definition,
837
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
659
838
  fields: {
660
839
  ...this.definition.fields,
661
- ...newFields
840
+ [name]: {
841
+ ...definition,
842
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
843
+ rule: function(v) {
844
+ return definition.rule(v) || rule?.(v);
845
+ },
846
+ required: true
847
+ }
662
848
  }
663
849
  });
664
850
  }
665
- setReadonly(name, { definition: typeDef }) {
851
+ readonlyField(name, { definition }) {
666
852
  const newFields = {
667
- [name]: typeDef
853
+ [name]: {
854
+ ...definition,
855
+ required: true,
856
+ readonly: true
857
+ }
668
858
  };
669
859
  return new _ObjectTypeDefBuilder({
670
- type: 4 /* Object */,
860
+ ...this.definition,
671
861
  fields: {
672
862
  ...this.definition.fields,
673
863
  ...newFields
674
864
  }
675
865
  });
676
866
  }
677
- setOptional(name, { definition: typeDef }) {
867
+ optionalField(name, { definition }) {
678
868
  const newFields = {
679
- [name]: typeDef
869
+ [name]: {
870
+ ...definition
871
+ }
680
872
  };
681
873
  return new _ObjectTypeDefBuilder({
682
- type: 4 /* Object */,
874
+ ...this.definition,
683
875
  fields: {
684
876
  ...this.definition.fields,
685
877
  ...newFields
686
878
  }
687
879
  });
688
880
  }
689
- setReadonlyOptional(name, { definition: typeDef }) {
881
+ readonlyOptionalField(name, { definition }) {
690
882
  const newFields = {
691
- [name]: typeDef
883
+ [name]: {
884
+ ...definition,
885
+ readonly: true
886
+ }
692
887
  };
693
888
  return new _ObjectTypeDefBuilder({
694
- type: 4 /* Object */,
889
+ ...this.definition,
695
890
  fields: {
696
891
  ...this.definition.fields,
697
892
  ...newFields
@@ -700,17 +895,15 @@ var ObjectTypeDefBuilder = class _ObjectTypeDefBuilder extends TypeDefBuilder {
700
895
  }
701
896
  };
702
897
  var UnionTypeDefBuilder = class _UnionTypeDefBuilder extends TypeDefBuilder {
703
- add(k, {
898
+ or(k, {
704
899
  definition: typeDef
705
900
  }) {
706
901
  const {
707
- discriminator,
708
902
  unions
709
903
  } = this.definition;
710
904
  return new _UnionTypeDefBuilder(
711
905
  {
712
- type: 5 /* Union */,
713
- discriminator,
906
+ ...this.definition,
714
907
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
715
908
  unions: {
716
909
  ...unions,
@@ -721,9 +914,12 @@ var UnionTypeDefBuilder = class _UnionTypeDefBuilder extends TypeDefBuilder {
721
914
  }
722
915
  };
723
916
  function literal(value) {
724
- return new LiteralTypeDefBuilder({
917
+ return new TypeDefBuilder({
725
918
  type: 1 /* Literal */,
726
- valuePrototype: value
919
+ valuePrototype: value,
920
+ rule: emptyRule,
921
+ readonly: false,
922
+ required: false
727
923
  });
728
924
  }
729
925
  var stringType = literal();
@@ -738,28 +934,40 @@ function nullable(nonNullable) {
738
934
  unions: {
739
935
  ["0"]: nonNullable.definition,
740
936
  ["1"]: nullType.definition
741
- }
937
+ },
938
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
939
+ rule: emptyRule,
940
+ readonly: false,
941
+ required: false
742
942
  }
743
943
  );
744
944
  }
745
945
  function list(elements) {
746
946
  return new ListTypeDefBuilder({
747
947
  type: 2 /* List */,
748
- elements: elements.definition
948
+ elements: elements.definition,
949
+ rule: emptyRule,
950
+ readonly: false,
951
+ required: false
749
952
  });
750
953
  }
751
- function record({ definition: typeDef }) {
954
+ function record({ definition: valueTypeDef }) {
752
955
  return new RecordTypeDefBuilder({
753
956
  type: 3 /* Record */,
754
- // eslint-disable-next-line no-undefined
755
957
  keyPrototype: void 0,
756
- valueTypeDef: typeDef
958
+ valueTypeDef,
959
+ rule: emptyRule,
960
+ readonly: false,
961
+ required: false
757
962
  });
758
963
  }
759
964
  function object() {
760
965
  return new ObjectTypeDefBuilder({
761
966
  type: 4 /* Object */,
762
- fields: {}
967
+ fields: {},
968
+ rule: emptyRule,
969
+ readonly: false,
970
+ required: false
763
971
  });
764
972
  }
765
973
  function union(discriminator) {
@@ -768,20 +976,99 @@ function union(discriminator) {
768
976
  type: 5 /* Union */,
769
977
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
770
978
  discriminator: discriminator ?? null,
771
- unions: {}
979
+ unions: {},
980
+ rule: emptyRule,
981
+ readonly: false,
982
+ required: false
772
983
  }
773
984
  );
774
985
  }
986
+
987
+ // validation/validator.ts
988
+ function isFunctionalValidator(v) {
989
+ return typeof v === "function";
990
+ }
991
+ function isAnnotatedValidator(v) {
992
+ return typeof v !== "function";
993
+ }
994
+ function validate(validator, v, valuePath, context) {
995
+ if (isAnnotatedValidator(validator)) {
996
+ return validator.validate(v, valuePath, context);
997
+ } else {
998
+ return validator(v, valuePath, context);
999
+ }
1000
+ }
1001
+ function annotations(validator, valuePath, context) {
1002
+ if (isAnnotatedValidator(validator)) {
1003
+ return validator.annotations(valuePath, context);
1004
+ } else {
1005
+ return {
1006
+ required: false,
1007
+ readonly: false
1008
+ };
1009
+ }
1010
+ }
1011
+
1012
+ // validation/validators/defined_validator.ts
1013
+ var DefinedValidator = class {
1014
+ constructor(error) {
1015
+ this.error = error;
1016
+ }
1017
+ validate(v) {
1018
+ if (v == null) {
1019
+ return this.error;
1020
+ }
1021
+ return null;
1022
+ }
1023
+ annotations() {
1024
+ return {
1025
+ required: true,
1026
+ readonly: false
1027
+ };
1028
+ }
1029
+ };
1030
+
1031
+ // validation/validators/minimum_string_length_validator.ts
1032
+ var MinimumStringLengthValidationErrorType = "minimum_string_length";
1033
+ var MinimumStringLengthValidator = class {
1034
+ constructor(minimumLength) {
1035
+ this.minimumLength = minimumLength;
1036
+ }
1037
+ validate(value) {
1038
+ if (value.length < this.minimumLength) {
1039
+ return {
1040
+ type: MinimumStringLengthValidationErrorType,
1041
+ minimumLength: this.minimumLength,
1042
+ receivedLength: value.length
1043
+ };
1044
+ }
1045
+ return null;
1046
+ }
1047
+ annotations() {
1048
+ return {
1049
+ required: true,
1050
+ readonly: false
1051
+ };
1052
+ }
1053
+ };
775
1054
  // Annotate the CommonJS export names for ESM import in node:
776
1055
  0 && (module.exports = {
1056
+ DefinedValidator,
1057
+ MinimumStringLengthValidationErrorType,
1058
+ MinimumStringLengthValidator,
777
1059
  TypeDefType,
1060
+ annotations,
778
1061
  booleanType,
779
1062
  copy,
780
- flattenAccessorsOf,
1063
+ flattenAccessorsOfType,
781
1064
  flattenJsonValueToTypePathsOf,
782
- flattenTypeDefsOf,
783
- flattenValueTypeTo,
1065
+ flattenTypesOfType,
1066
+ flattenValidatorsOfValidatingType,
1067
+ flattenValueTo,
1068
+ flattenValuesOfType,
784
1069
  getUnionTypeDef,
1070
+ isAnnotatedValidator,
1071
+ isFunctionalValidator,
785
1072
  jsonPath,
786
1073
  jsonPathPop,
787
1074
  list,
@@ -794,5 +1081,6 @@ function union(discriminator) {
794
1081
  record,
795
1082
  stringType,
796
1083
  union,
1084
+ validate,
797
1085
  valuePathToTypePath
798
1086
  });