typia 5.0.0-dev.20230823-2 → 5.0.0-dev.20230827

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 (424) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/factories/ExpressionFactory.d.ts +3 -1
  4. package/lib/factories/ExpressionFactory.js +25 -1
  5. package/lib/factories/ExpressionFactory.js.map +1 -1
  6. package/lib/factories/IdentifierFactory.d.ts +2 -1
  7. package/lib/factories/IdentifierFactory.js +11 -0
  8. package/lib/factories/IdentifierFactory.js.map +1 -1
  9. package/lib/factories/LiteralFactory.js +6 -2
  10. package/lib/factories/LiteralFactory.js.map +1 -1
  11. package/lib/factories/MetadataCollection.d.ts +7 -7
  12. package/lib/factories/MetadataCollection.js +4 -5
  13. package/lib/factories/MetadataCollection.js.map +1 -1
  14. package/lib/factories/MetadataCommentTagFactory.js +532 -0
  15. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  16. package/lib/factories/MetadataTypeTagFactory.d.ts +6 -0
  17. package/lib/factories/MetadataTypeTagFactory.js +207 -0
  18. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  19. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  20. package/lib/factories/NumericRangeFactory.js +34 -0
  21. package/lib/factories/NumericRangeFactory.js.map +1 -0
  22. package/lib/factories/ProtobufFactory.js +48 -16
  23. package/lib/factories/ProtobufFactory.js.map +1 -1
  24. package/lib/factories/internal/metadata/emend_metadata_atomics.js +12 -6
  25. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  26. package/lib/factories/internal/metadata/emplace_metadata_alias.js +1 -13
  27. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  28. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
  29. package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
  30. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
  31. package/lib/factories/internal/metadata/emplace_metadata_object.js +0 -1
  32. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  33. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
  34. package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
  35. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_collection.js +20 -12
  39. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  40. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
  41. package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +7 -8
  42. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
  43. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +140 -16
  44. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  45. package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
  46. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  48. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
  50. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  51. package/lib/functional/$any.js +2 -1
  52. package/lib/functional/$any.js.map +1 -1
  53. package/lib/functional/$clone.d.ts +2 -0
  54. package/lib/functional/$clone.js +8 -0
  55. package/lib/functional/$clone.js.map +1 -0
  56. package/lib/functional/Namespace.js +0 -16
  57. package/lib/functional/Namespace.js.map +1 -1
  58. package/lib/module.d.ts +2 -39
  59. package/lib/module.js +3 -17
  60. package/lib/module.js.map +1 -1
  61. package/lib/programmers/AssertProgrammer.js +28 -10
  62. package/lib/programmers/AssertProgrammer.js.map +1 -1
  63. package/lib/programmers/CheckerProgrammer.js +90 -68
  64. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  65. package/lib/programmers/FeatureProgrammer.d.ts +2 -4
  66. package/lib/programmers/FeatureProgrammer.js +6 -6
  67. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  68. package/lib/programmers/IsProgrammer.d.ts +1 -1
  69. package/lib/programmers/IsProgrammer.js +32 -21
  70. package/lib/programmers/IsProgrammer.js.map +1 -1
  71. package/lib/programmers/RandomProgrammer.js +187 -156
  72. package/lib/programmers/RandomProgrammer.js.map +1 -1
  73. package/lib/programmers/ValidateProgrammer.js +28 -10
  74. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  75. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  76. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  77. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  78. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  79. package/lib/programmers/helpers/ICheckEntry.d.ts +4 -3
  80. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  81. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  82. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  83. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  84. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  85. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  86. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  87. package/lib/programmers/helpers/RandomRanger.js +13 -33
  88. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  89. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  90. package/lib/programmers/helpers/UnionExplorer.js +46 -35
  91. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  92. package/lib/programmers/internal/application_alias.js +0 -1
  93. package/lib/programmers/internal/application_alias.js.map +1 -1
  94. package/lib/programmers/internal/application_array.js +60 -20
  95. package/lib/programmers/internal/application_array.js.map +1 -1
  96. package/lib/programmers/internal/application_default_string.js +2 -2
  97. package/lib/programmers/internal/application_default_string.js.map +1 -1
  98. package/lib/programmers/internal/application_number.js +95 -69
  99. package/lib/programmers/internal/application_number.js.map +1 -1
  100. package/lib/programmers/internal/application_object.js +0 -3
  101. package/lib/programmers/internal/application_object.js.map +1 -1
  102. package/lib/programmers/internal/application_resolved.js +2 -2
  103. package/lib/programmers/internal/application_resolved.js.map +1 -1
  104. package/lib/programmers/internal/application_schema.js +39 -22
  105. package/lib/programmers/internal/application_schema.js.map +1 -1
  106. package/lib/programmers/internal/application_string.js +56 -22
  107. package/lib/programmers/internal/application_string.js.map +1 -1
  108. package/lib/programmers/internal/application_tuple.js +10 -9
  109. package/lib/programmers/internal/application_tuple.js.map +1 -1
  110. package/lib/programmers/internal/check_array_length.js +25 -25
  111. package/lib/programmers/internal/check_array_length.js.map +1 -1
  112. package/lib/programmers/internal/check_bigint.js +20 -109
  113. package/lib/programmers/internal/check_bigint.js.map +1 -1
  114. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  115. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  116. package/lib/programmers/internal/check_number.js +57 -147
  117. package/lib/programmers/internal/check_number.js.map +1 -1
  118. package/lib/programmers/internal/check_string.js +21 -33
  119. package/lib/programmers/internal/check_string.js.map +1 -1
  120. package/lib/programmers/internal/check_template.js +31 -49
  121. package/lib/programmers/internal/check_template.js.map +1 -1
  122. package/lib/programmers/internal/check_union_array_like.js +7 -6
  123. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  124. package/lib/programmers/internal/feature_object_entries.js +1 -1
  125. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  126. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  127. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  128. package/lib/programmers/internal/random_custom.js +2 -2
  129. package/lib/programmers/internal/random_custom.js.map +1 -1
  130. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  131. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  132. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
  133. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  134. package/lib/programmers/json/JsonStringifyProgrammer.js +43 -32
  135. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  136. package/lib/programmers/misc/MiscCloneProgrammer.js +21 -17
  137. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  138. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  139. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  140. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  141. package/lib/programmers/misc/MiscLiteralsProgrammer.js +2 -2
  142. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  143. package/lib/programmers/misc/MiscPruneProgrammer.js +21 -17
  144. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  145. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +29 -49
  146. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  147. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  148. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  149. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  150. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  151. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  152. package/lib/schemas/metadata/IMetadata.d.ts +11 -4
  153. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  154. package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
  155. package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
  156. package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
  157. package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
  158. package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
  159. package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
  160. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  161. package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
  162. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  163. package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
  164. package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
  165. package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
  166. package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
  167. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +8 -0
  168. package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
  169. package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
  170. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  171. package/lib/schemas/metadata/Metadata.js +219 -159
  172. package/lib/schemas/metadata/Metadata.js.map +1 -1
  173. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  174. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  175. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  176. package/lib/schemas/metadata/MetadataArray.d.ts +8 -6
  177. package/lib/schemas/metadata/MetadataArray.js +48 -19
  178. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  179. package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
  180. package/lib/schemas/metadata/MetadataArrayType.js +36 -0
  181. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
  182. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  183. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  184. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  185. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  186. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  187. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  188. package/lib/schemas/metadata/MetadataTuple.d.ts +8 -8
  189. package/lib/schemas/metadata/MetadataTuple.js +4 -19
  190. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  191. package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
  192. package/lib/schemas/metadata/MetadataTupleType.js +40 -0
  193. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
  194. package/lib/tags/ExclusiveMaximum.d.ts +10 -0
  195. package/lib/tags/ExclusiveMaximum.js +3 -0
  196. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  197. package/lib/tags/ExclusiveMinimum.d.ts +10 -0
  198. package/lib/tags/ExclusiveMinimum.js +3 -0
  199. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  200. package/lib/tags/Format.d.ts +8 -0
  201. package/lib/{schemas/metadata/ICommentTag.js → tags/Format.js} +1 -1
  202. package/lib/tags/Format.js.map +1 -0
  203. package/lib/tags/MaxItems.d.ts +8 -0
  204. package/lib/{schemas/metadata/IMetadataTag.js → tags/MaxItems.js} +1 -1
  205. package/lib/tags/MaxItems.js.map +1 -0
  206. package/lib/tags/MaxLength.d.ts +8 -0
  207. package/lib/tags/MaxLength.js +3 -0
  208. package/lib/tags/MaxLength.js.map +1 -0
  209. package/lib/tags/Maximum.d.ts +10 -0
  210. package/lib/tags/Maximum.js +3 -0
  211. package/lib/tags/Maximum.js.map +1 -0
  212. package/lib/tags/MinItems.d.ts +8 -0
  213. package/lib/tags/MinItems.js +3 -0
  214. package/lib/tags/MinItems.js.map +1 -0
  215. package/lib/tags/MinLength.d.ts +8 -0
  216. package/lib/tags/MinLength.js +3 -0
  217. package/lib/tags/MinLength.js.map +1 -0
  218. package/lib/tags/Minimum.d.ts +10 -0
  219. package/lib/tags/Minimum.js +3 -0
  220. package/lib/tags/Minimum.js.map +1 -0
  221. package/lib/tags/MultipleOf.d.ts +10 -0
  222. package/lib/tags/MultipleOf.js +3 -0
  223. package/lib/tags/MultipleOf.js.map +1 -0
  224. package/lib/tags/Pattern.d.ts +7 -0
  225. package/lib/tags/Pattern.js +3 -0
  226. package/lib/tags/Pattern.js.map +1 -0
  227. package/lib/tags/TagBase.d.ts +14 -0
  228. package/lib/tags/TagBase.js +3 -0
  229. package/lib/tags/TagBase.js.map +1 -0
  230. package/lib/tags/Type.d.ts +14 -0
  231. package/lib/tags/Type.js +3 -0
  232. package/lib/tags/Type.js.map +1 -0
  233. package/lib/tags/index.d.ts +13 -0
  234. package/lib/tags/index.js +30 -0
  235. package/lib/tags/index.js.map +1 -0
  236. package/lib/transformers/FileTransformer.d.ts +1 -1
  237. package/lib/transformers/FileTransformer.js +15 -2
  238. package/lib/transformers/FileTransformer.js.map +1 -1
  239. package/lib/transformers/IProject.d.ts +1 -0
  240. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -2
  241. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  242. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  243. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  244. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  245. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  246. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  247. package/lib/typings/ProtobufAtomic.js +3 -0
  248. package/lib/typings/ProtobufAtomic.js.map +1 -0
  249. package/package.json +2 -2
  250. package/src/IRandomGenerator.ts +4 -3
  251. package/src/factories/ExpressionFactory.ts +46 -2
  252. package/src/factories/IdentifierFactory.ts +15 -0
  253. package/src/factories/LiteralFactory.ts +10 -3
  254. package/src/factories/MetadataCollection.ts +18 -13
  255. package/src/factories/MetadataCommentTagFactory.ts +583 -0
  256. package/src/factories/MetadataTypeTagFactory.ts +263 -0
  257. package/src/factories/NumericRangeFactory.ts +33 -0
  258. package/src/factories/ProtobufFactory.ts +34 -18
  259. package/src/factories/internal/metadata/emend_metadata_atomics.ts +12 -5
  260. package/src/factories/internal/metadata/emplace_metadata_alias.ts +0 -6
  261. package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
  262. package/src/factories/internal/metadata/emplace_metadata_object.ts +0 -1
  263. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
  264. package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
  265. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +7 -4
  266. package/src/factories/internal/metadata/iterate_metadata_collection.ts +23 -16
  267. package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +4 -8
  268. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +113 -16
  269. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
  270. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
  271. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
  272. package/src/functional/$any.ts +3 -1
  273. package/src/functional/$clone.ts +4 -0
  274. package/src/functional/Namespace.ts +0 -16
  275. package/src/module.ts +2 -55
  276. package/src/programmers/AssertProgrammer.ts +57 -21
  277. package/src/programmers/CheckerProgrammer.ts +81 -123
  278. package/src/programmers/FeatureProgrammer.ts +9 -31
  279. package/src/programmers/IsProgrammer.ts +53 -42
  280. package/src/programmers/RandomProgrammer.ts +242 -239
  281. package/src/programmers/ValidateProgrammer.ts +60 -21
  282. package/src/programmers/helpers/AtomicPredicator.ts +2 -2
  283. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  284. package/src/programmers/helpers/ICheckEntry.ts +4 -3
  285. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  286. package/src/programmers/helpers/RandomJoiner.ts +11 -33
  287. package/src/programmers/helpers/RandomRanger.ts +16 -51
  288. package/src/programmers/helpers/UnionExplorer.ts +46 -51
  289. package/src/programmers/internal/application_alias.ts +0 -1
  290. package/src/programmers/internal/application_array.ts +33 -10
  291. package/src/programmers/internal/application_default_string.ts +6 -2
  292. package/src/programmers/internal/application_number.ts +76 -70
  293. package/src/programmers/internal/application_object.ts +0 -3
  294. package/src/programmers/internal/application_resolved.ts +2 -2
  295. package/src/programmers/internal/application_schema.ts +38 -20
  296. package/src/programmers/internal/application_string.ts +33 -27
  297. package/src/programmers/internal/application_tuple.ts +12 -11
  298. package/src/programmers/internal/check_array_length.ts +34 -28
  299. package/src/programmers/internal/check_bigint.ts +26 -91
  300. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  301. package/src/programmers/internal/check_number.ts +83 -236
  302. package/src/programmers/internal/check_string.ts +37 -17
  303. package/src/programmers/internal/check_template.ts +17 -12
  304. package/src/programmers/internal/check_union_array_like.ts +4 -18
  305. package/src/programmers/internal/feature_object_entries.ts +12 -18
  306. package/src/programmers/internal/metadata_to_pattern.ts +4 -4
  307. package/src/programmers/internal/random_custom.ts +3 -3
  308. package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
  309. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
  310. package/src/programmers/json/JsonStringifyProgrammer.ts +46 -41
  311. package/src/programmers/misc/MiscCloneProgrammer.ts +23 -27
  312. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  313. package/src/programmers/misc/MiscLiteralsProgrammer.ts +2 -2
  314. package/src/programmers/misc/MiscPruneProgrammer.ts +24 -24
  315. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +40 -74
  316. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +154 -99
  317. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  318. package/src/schemas/json/IJsonSchema.ts +11 -38
  319. package/src/schemas/metadata/IMetadata.ts +11 -5
  320. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  321. package/src/schemas/metadata/IMetadataArray.ts +4 -7
  322. package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
  323. package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
  324. package/src/schemas/metadata/IMetadataCollection.ts +4 -4
  325. package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
  326. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  327. package/src/schemas/metadata/IMetadataTuple.ts +4 -7
  328. package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
  329. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -0
  330. package/src/schemas/metadata/Metadata.ts +121 -70
  331. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  332. package/src/schemas/metadata/MetadataArray.ts +28 -34
  333. package/src/schemas/metadata/MetadataArrayType.ts +57 -0
  334. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  335. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  336. package/src/schemas/metadata/MetadataTuple.ts +9 -35
  337. package/src/schemas/metadata/MetadataTupleType.ts +67 -0
  338. package/src/tags/ExclusiveMaximum.ts +13 -0
  339. package/src/tags/ExclusiveMinimum.ts +13 -0
  340. package/src/tags/Format.ts +30 -0
  341. package/src/tags/MaxItems.ts +9 -0
  342. package/src/tags/MaxLength.ts +9 -0
  343. package/src/tags/Maximum.ts +13 -0
  344. package/src/tags/MinItems.ts +9 -0
  345. package/src/tags/MinLength.ts +9 -0
  346. package/src/tags/Minimum.ts +13 -0
  347. package/src/tags/MultipleOf.ts +15 -0
  348. package/src/tags/Pattern.ts +8 -0
  349. package/src/tags/TagBase.ts +22 -0
  350. package/src/tags/Type.ts +27 -0
  351. package/src/tags/index.ts +13 -0
  352. package/src/transformers/FileTransformer.ts +6 -6
  353. package/src/transformers/IProject.ts +1 -0
  354. package/src/transformers/features/json/JsonApplicationTransformer.ts +3 -2
  355. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  356. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  357. package/src/typings/Atomic.ts +1 -0
  358. package/src/typings/ProtobufAtomic.ts +19 -0
  359. package/lib/CustomValidatorMap.d.ts +0 -110
  360. package/lib/CustomValidatorMap.js.map +0 -1
  361. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  362. package/lib/factories/MetadataTagFactory.js +0 -310
  363. package/lib/factories/MetadataTagFactory.js.map +0 -1
  364. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
  365. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
  366. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
  367. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
  368. package/lib/functional/$is_custom.d.ts +0 -2
  369. package/lib/functional/$is_custom.js +0 -13
  370. package/lib/functional/$is_custom.js.map +0 -1
  371. package/lib/functional/$is_date.d.ts +0 -1
  372. package/lib/functional/$is_date.js +0 -7
  373. package/lib/functional/$is_date.js.map +0 -1
  374. package/lib/functional/$is_datetime.d.ts +0 -1
  375. package/lib/functional/$is_datetime.js +0 -8
  376. package/lib/functional/$is_datetime.js.map +0 -1
  377. package/lib/functional/$is_email.d.ts +0 -1
  378. package/lib/functional/$is_email.js +0 -7
  379. package/lib/functional/$is_email.js.map +0 -1
  380. package/lib/functional/$is_ipv4.d.ts +0 -1
  381. package/lib/functional/$is_ipv4.js +0 -7
  382. package/lib/functional/$is_ipv4.js.map +0 -1
  383. package/lib/functional/$is_ipv6.d.ts +0 -1
  384. package/lib/functional/$is_ipv6.js +0 -7
  385. package/lib/functional/$is_ipv6.js.map +0 -1
  386. package/lib/functional/$is_url.d.ts +0 -1
  387. package/lib/functional/$is_url.js +0 -7
  388. package/lib/functional/$is_url.js.map +0 -1
  389. package/lib/functional/$is_uuid.d.ts +0 -1
  390. package/lib/functional/$is_uuid.js +0 -7
  391. package/lib/functional/$is_uuid.js.map +0 -1
  392. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  393. package/lib/programmers/internal/check_array.js +0 -44
  394. package/lib/programmers/internal/check_array.js.map +0 -1
  395. package/lib/programmers/internal/check_custom.d.ts +0 -1
  396. package/lib/programmers/internal/check_custom.js +0 -30
  397. package/lib/programmers/internal/check_custom.js.map +0 -1
  398. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  399. package/lib/programmers/internal/check_string_tags.js +0 -89
  400. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  401. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  402. package/lib/programmers/internal/get_comment_tags.js +0 -25
  403. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  404. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  405. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  406. package/lib/schemas/metadata/IMetadataTag.d.ts +0 -63
  407. package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
  408. package/src/CustomValidatorMap.ts +0 -126
  409. package/src/factories/MetadataTagFactory.ts +0 -364
  410. package/src/functional/$is_custom.ts +0 -14
  411. package/src/functional/$is_date.ts +0 -3
  412. package/src/functional/$is_datetime.ts +0 -2
  413. package/src/functional/$is_email.ts +0 -4
  414. package/src/functional/$is_ipv4.ts +0 -4
  415. package/src/functional/$is_ipv6.ts +0 -4
  416. package/src/functional/$is_url.ts +0 -4
  417. package/src/functional/$is_uuid.ts +0 -4
  418. package/src/programmers/internal/check_array.ts +0 -30
  419. package/src/programmers/internal/check_custom.ts +0 -31
  420. package/src/programmers/internal/check_string_tags.ts +0 -67
  421. package/src/programmers/internal/get_comment_tags.ts +0 -23
  422. package/src/schemas/metadata/ICommentTag.ts +0 -4
  423. package/src/schemas/metadata/IMetadataTag.ts +0 -112
  424. /package/lib/{programmers/internal/check_array.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
1
  import { Metadata } from "../../../schemas/metadata/Metadata";
2
- import { MetadataArray } from "../../../schemas/metadata/MetadataArray";
2
+ import { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";
3
3
  import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
- import { MetadataTuple } from "../../../schemas/metadata/MetadataTuple";
4
+ import { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";
5
5
 
6
6
  import { MetadataCollection } from "../../MetadataCollection";
7
- import { iterate_metadata_tag } from "./iterate_metadata_tag";
7
+ import { iterate_metadata_comment_tags } from "./iterate_metadata_comment_tags";
8
8
 
9
9
  export const iterate_metadata_collection = (
10
10
  collection: MetadataCollection,
@@ -24,7 +24,7 @@ export const iterate_metadata_collection = (
24
24
  );
25
25
  }
26
26
  for (const obj of collection.objects()) {
27
- iterate_metadata_tag(obj);
27
+ iterate_metadata_comment_tags(obj);
28
28
  if (obj.recursive === null) {
29
29
  const visited: Set<Metadata> = new Set();
30
30
  collection.setObjectRecursive(
@@ -39,22 +39,26 @@ export const iterate_metadata_collection = (
39
39
 
40
40
  const isArrayRecursive =
41
41
  (visited: Set<Metadata>) =>
42
- (array: MetadataArray) =>
42
+ (array: MetadataArrayType) =>
43
43
  (meta: Metadata): boolean => {
44
44
  if (visited.has(meta)) return false;
45
45
  visited.add(meta);
46
46
 
47
47
  return (
48
48
  meta.arrays.some(
49
- (a) => a === array || isArrayRecursive(visited)(array)(a.value),
49
+ (a) =>
50
+ a.type === array ||
51
+ isArrayRecursive(visited)(array)(a.type.value),
50
52
  ) ||
51
53
  meta.aliases.some((alias) =>
52
54
  isArrayRecursive(visited)(array)(alias.value),
53
55
  ) ||
54
56
  meta.tuples.some(
55
57
  (t) =>
56
- !t.recursive &&
57
- t.elements.some((e) => isArrayRecursive(visited)(array)(e)),
58
+ !t.type.recursive &&
59
+ t.type.elements.some((e) =>
60
+ isArrayRecursive(visited)(array)(e),
61
+ ),
58
62
  ) ||
59
63
  meta.maps.some((m) => isArrayRecursive(visited)(array)(m.value)) ||
60
64
  meta.sets.some((s) => isArrayRecursive(visited)(array)(s)) ||
@@ -66,7 +70,7 @@ const isArrayRecursive =
66
70
 
67
71
  const isTupleRecursive =
68
72
  (visited: Set<Metadata>) =>
69
- (tuple: MetadataTuple) =>
73
+ (tuple: MetadataTupleType) =>
70
74
  (meta: Metadata): boolean => {
71
75
  if (visited.has(meta)) return false;
72
76
  visited.add(meta);
@@ -74,12 +78,15 @@ const isTupleRecursive =
74
78
  return (
75
79
  meta.tuples.some(
76
80
  (t) =>
77
- t === tuple ||
78
- t.elements.some((e) => isTupleRecursive(visited)(tuple)(e)),
81
+ t.type === tuple ||
82
+ t.type.elements.some((e) =>
83
+ isTupleRecursive(visited)(tuple)(e),
84
+ ),
79
85
  ) ||
80
86
  meta.arrays.some(
81
87
  (a) =>
82
- !a.recursive && isTupleRecursive(visited)(tuple)(a.value),
88
+ !a.type.recursive &&
89
+ isTupleRecursive(visited)(tuple)(a.type.value),
83
90
  ) ||
84
91
  meta.maps.some((m) => isTupleRecursive(visited)(tuple)(m.value)) ||
85
92
  meta.sets.some((s) => isTupleRecursive(visited)(tuple)(s)) ||
@@ -112,13 +119,13 @@ const isObjectRecursive =
112
119
  ) ||
113
120
  meta.arrays.some(
114
121
  (array) =>
115
- !array.recursive &&
116
- isObjectRecursive(visited)(obj)(array.value),
122
+ !array.type.recursive &&
123
+ isObjectRecursive(visited)(obj)(array.type.value),
117
124
  ) ||
118
125
  meta.tuples.some(
119
126
  (tuple) =>
120
- !tuple.recursive &&
121
- tuple.elements.some((elem) =>
127
+ !tuple.type.recursive &&
128
+ tuple.type.elements.some((elem) =>
122
129
  isObjectRecursive(visited)(obj)(elem),
123
130
  ),
124
131
  ) ||
@@ -1,12 +1,10 @@
1
1
  import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
2
2
 
3
- import { Writable } from "../../../typings/Writable";
4
-
5
3
  import { Escaper } from "../../../utils/Escaper";
6
4
 
7
- import { MetadataTagFactory } from "../../MetadataTagFactory";
5
+ import { MetadataCommentTagFactory } from "../../MetadataCommentTagFactory";
8
6
 
9
- export const iterate_metadata_tag = (obj: MetadataObject) => {
7
+ export const iterate_metadata_comment_tags = (obj: MetadataObject) => {
10
8
  if (obj.tagged_ === true) return;
11
9
  obj.tagged_ = true;
12
10
 
@@ -20,12 +18,10 @@ export const iterate_metadata_tag = (obj: MetadataObject) => {
20
18
  ? key.slice(1, -1)
21
19
  : null;
22
20
 
23
- Writable(prop).tags = MetadataTagFactory.generate(prop.value)(
24
- prop.jsDocTags,
25
- )(
21
+ MetadataCommentTagFactory.analyze(
26
22
  variable !== null
27
23
  ? () => `${obj.name}.${variable}`
28
24
  : () => `${obj.name}[${key}]`,
29
- );
25
+ )(prop.value)(prop.jsDocTags);
30
26
  }
31
27
  };
@@ -1,11 +1,17 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { IMetadataTypeTag } from "../../../schemas/metadata/IMetadataTypeTag";
3
4
  import { Metadata } from "../../../schemas/metadata/Metadata";
5
+ import { MetadataAtomic } from "../../../schemas/metadata/MetadataAtomic";
6
+
7
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
4
8
 
5
9
  import { MetadataCollection } from "../../MetadataCollection";
6
10
  import { MetadataFactory } from "../../MetadataFactory";
11
+ import { MetadataTypeTagFactory } from "../../MetadataTypeTagFactory";
7
12
  import { explore_metadata } from "./explore_metadata";
8
13
  import { iterate_metadata } from "./iterate_metadata";
14
+ import { iterate_metadata_array } from "./iterate_metadata_array";
9
15
 
10
16
  export const iterate_metadata_intersection =
11
17
  (checker: ts.TypeChecker) =>
@@ -51,30 +57,121 @@ export const iterate_metadata_intersection =
51
57
  aliased,
52
58
  );
53
59
  return true;
54
- }
60
+ } else if (
61
+ // ONLY OBJECT TYPES -> SPECIAL LOGIC FOR TS V5.2
62
+ children.every((c) => c.objects.length === 1 && c.size() === 1)
63
+ )
64
+ return false;
55
65
 
56
- // ABSORB TO ATOMIC (OR CONSTANT) TYPE
57
- const atomics: Metadata[] = children.filter(
58
- (c) =>
59
- (c.atomics.length ? 1 : 0 + c.constants.length ? 1 : 0) ===
60
- c.bucket(),
66
+ // VALIDATE EACH TYPES
67
+ const individuals: (readonly [Metadata, number])[] = children
68
+ .map((child, i) => [child, i] as const)
69
+ .filter(
70
+ ([c]) =>
71
+ c.size() === 1 &&
72
+ (c.atomics.length === 1 || c.arrays.length === 1),
73
+ );
74
+ const constants: Metadata[] = children.filter(
75
+ (m) =>
76
+ m.size() ===
77
+ m.constants
78
+ .map((c) => c.values.length)
79
+ .reduce((a, b) => a + b, 0) +
80
+ m.templates.length,
61
81
  );
62
82
  const objects: Metadata[] = children.filter(
63
- (c) => c.objects.length && c.objects.length === c.size(),
83
+ (c) =>
84
+ c.nullable === false &&
85
+ c.isRequired() === true &&
86
+ c.objects.length &&
87
+ c.objects.length === c.size() &&
88
+ c.objects.every((o) =>
89
+ o.properties.every((p) => p.value.optional),
90
+ ),
64
91
  );
92
+ const atomics: Set<"boolean" | "bigint" | "number" | "string"> =
93
+ new Set(
94
+ individuals.map(([c]) => c.atomics.map((a) => a.type)).flat(),
95
+ );
96
+ const arrays: Set<string> = new Set(
97
+ individuals.map(([c]) => c.arrays.map((a) => a.type.name)).flat(),
98
+ );
99
+
100
+ // ESCAPE WHEN ONLY CONSTANT TYPES EXIST
65
101
  if (
66
- atomics.length === 0 ||
67
- atomics.length + objects.length !== children.length
102
+ atomics.size + arrays.size > 1 ||
103
+ individuals.length + objects.length + constants.length !==
104
+ children.length
68
105
  )
69
106
  throw new Error(message(children));
107
+ else if (atomics.size === 0 && arrays.size === 0 && constants.length) {
108
+ for (const m of constants) {
109
+ for (const tpl of m.templates)
110
+ ArrayUtil.add(
111
+ meta.templates,
112
+ tpl,
113
+ (a, b) =>
114
+ a.map((ab) => ab.getName()).join(" | ") ===
115
+ b.map((bb) => bb.getName()).join(" | "),
116
+ );
117
+ for (const c of m.constants) {
118
+ const oldbie = meta.constants.find(
119
+ (o) => o.type === c.type,
120
+ );
121
+ if (oldbie)
122
+ for (const elem of c.values)
123
+ ArrayUtil.add(
124
+ oldbie.values,
125
+ elem,
126
+ (a, b) => a === b,
127
+ );
128
+ else meta.constants.push({ ...c });
129
+ }
130
+ }
131
+ return true;
132
+ }
70
133
 
71
- const least: Metadata = atomics.reduce((x, y) => {
72
- if (Metadata.covers(x, y)) return y;
73
- else if (Metadata.covers(y, x)) return x;
74
- throw new Error(message(children));
75
- });
76
- Object.assign(meta, Metadata.merge(meta, least));
77
- collection.entire_.add(least);
134
+ // RE-GENERATE TYPE
135
+ const target: "boolean" | "bigint" | "number" | "string" | "array" =
136
+ atomics.size ? atomics.values().next().value : "array";
137
+ if (
138
+ target === "boolean" ||
139
+ target === "bigint" ||
140
+ target === "number" ||
141
+ target === "string"
142
+ )
143
+ ArrayUtil.add(
144
+ meta.atomics,
145
+ MetadataAtomic.create({
146
+ type: atomics.values().next().value as "string",
147
+ tags: [],
148
+ }),
149
+ (a, b) => a.type === b.type,
150
+ );
151
+ else if (target === "array") {
152
+ const name: string = arrays.values().next().value;
153
+ if (!meta.arrays.some((a) => a.type.name === name)) {
154
+ iterate_metadata_array(checker)(options)(collection)(
155
+ meta,
156
+ type.types[
157
+ individuals.find((i) => i[0].arrays.length === 1)![1]
158
+ ]!,
159
+ );
160
+ }
161
+ }
162
+
163
+ // ASSIGN TAGS
164
+ if (objects.length && target !== "boolean") {
165
+ const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze(
166
+ target,
167
+ )(objects.map((om) => om.objects).flat());
168
+ if (tags.length)
169
+ if (target === "array") meta.arrays.at(-1)!.tags.push(tags);
170
+ else
171
+ meta.atomics
172
+ .find((a) => a.type === target)!
173
+ .tags.push(tags);
174
+ }
78
175
  return true;
79
176
  };
80
177
 
@@ -23,16 +23,16 @@ export const iterate_metadata_object =
23
23
  (type as any).intrinsicName !== "object"
24
24
  )
25
25
  return false;
26
- else if (
27
- type.isIntersection() &&
28
- !type.types.every(
29
- (child) =>
30
- (child.getFlags() & ts.TypeFlags.Object) !== 0 &&
31
- !checker.isArrayType(child) &&
32
- !checker.isTupleType(child),
33
- )
34
- )
35
- return false;
26
+ // else if (
27
+ // type.isIntersection() &&
28
+ // !type.types.every(
29
+ // (child) =>
30
+ // (child.getFlags() & ts.TypeFlags.Object) !== 0 &&
31
+ // !checker.isArrayType(child) &&
32
+ // !checker.isTupleType(child),
33
+ // )
34
+ // )
35
+ // return false;
36
36
  }
37
37
 
38
38
  const obj: MetadataObject = emplace_metadata_object(checker)(options)(
@@ -46,9 +46,9 @@ const iterate =
46
46
  // SORT ARRAYS AND TUPLES
47
47
  if (meta.arrays.length > 1)
48
48
  meta.arrays.sort((x, y) =>
49
- Metadata.covers(x.value, y.value)
49
+ Metadata.covers(x.type.value, y.type.value)
50
50
  ? -1
51
- : Metadata.covers(y.value, x.value)
51
+ : Metadata.covers(y.type.value, x.type.value)
52
52
  ? 1
53
53
  : 0,
54
54
  );
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { Metadata } from "../../../schemas/metadata/Metadata";
4
4
  import { MetadataTuple } from "../../../schemas/metadata/MetadataTuple";
5
+ import { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";
5
6
 
6
7
  import { ArrayUtil } from "../../../utils/ArrayUtil";
7
8
 
@@ -16,9 +17,16 @@ export const iterate_metadata_tuple =
16
17
  (meta: Metadata, type: ts.TupleType): boolean => {
17
18
  if (!checker.isTupleType(type)) return false;
18
19
 
19
- const tuple: MetadataTuple = emplace_metadata_tuple(checker)(options)(
20
- collection,
21
- )(type, meta.nullable);
22
- ArrayUtil.add(meta.tuples, tuple, (elem) => elem.name === tuple.name);
20
+ const tupleType: MetadataTupleType = emplace_metadata_tuple(checker)(
21
+ options,
22
+ )(collection)(type, meta.nullable);
23
+ ArrayUtil.add(
24
+ meta.tuples,
25
+ MetadataTuple.create({
26
+ type: tupleType,
27
+ tags: [],
28
+ }),
29
+ (elem) => elem.type.name === tupleType.name,
30
+ );
23
31
  return true;
24
32
  };
@@ -1,2 +1,4 @@
1
+ import { $clone } from "./$clone";
2
+
1
3
  export const $any = (val: any): any =>
2
- val !== undefined ? JSON.parse(JSON.stringify(val)) : undefined;
4
+ val !== undefined ? $clone(val) : undefined;
@@ -0,0 +1,4 @@
1
+ import { Primitive } from "../Primitive";
2
+
3
+ export const $clone = <T>(value: T): Primitive<T> =>
4
+ JSON.parse(JSON.stringify(value));
@@ -9,14 +9,6 @@ import { $any } from "./$any";
9
9
  import { $every } from "./$every";
10
10
  import { $guard } from "./$guard";
11
11
  import { $is_between } from "./$is_between";
12
- import { $is_custom } from "./$is_custom";
13
- import { $is_date } from "./$is_date";
14
- import { $is_datetime } from "./$is_datetime";
15
- import { $is_email } from "./$is_email";
16
- import { $is_ipv4 } from "./$is_ipv4";
17
- import { $is_ipv6 } from "./$is_ipv6";
18
- import { $is_url } from "./$is_url";
19
- import { $is_uuid } from "./$is_uuid";
20
12
  import { $join } from "./$join";
21
13
  import { $number } from "./$number";
22
14
  import { $report } from "./$report";
@@ -30,15 +22,7 @@ import { $tail } from "./$tail";
30
22
  */
31
23
  export namespace Namespace {
32
24
  export const is = () => ({
33
- is_uuid: $is_uuid,
34
- is_email: $is_email,
35
- is_url: $is_url,
36
- is_ipv4: $is_ipv4,
37
- is_ipv6: $is_ipv6,
38
25
  is_between: $is_between,
39
- is_date: $is_date,
40
- is_datetime: $is_datetime,
41
- is_custom: $is_custom,
42
26
  });
43
27
 
44
28
  export const assert = (method: string) => ({
package/src/module.ts CHANGED
@@ -1,18 +1,15 @@
1
- import { $dictionary } from "./functional/$dictionary";
2
1
  import { Namespace } from "./functional/Namespace";
3
2
 
4
3
  import { IMetadataApplication } from "./schemas/metadata/IMetadataApplication";
5
4
 
6
- import { MapUtil } from "./utils/MapUtil";
7
-
8
- import { CustomValidatorMap } from "./CustomValidatorMap";
9
5
  import { IRandomGenerator } from "./IRandomGenerator";
10
6
  import { IValidation } from "./IValidation";
11
7
  import { Resolved } from "./Resolved";
12
8
 
13
9
  export * as json from "./json";
14
- export * as protobuf from "./protobuf";
15
10
  export * as misc from "./misc";
11
+ export * as protobuf from "./protobuf";
12
+ export * as tags from "./tags";
16
13
 
17
14
  export * from "./schemas/json/IJsonApplication";
18
15
  export * from "./schemas/json/IJsonComponents";
@@ -23,56 +20,6 @@ export * from "./Primitive";
23
20
  export * from "./Resolved";
24
21
  export * from "./TypeGuardError";
25
22
 
26
- /**
27
- * Custom validators.
28
- *
29
- * If you want to add a custom validation logic utilizing comment tags,
30
- * add a closure function with its tag and type name. Below example code
31
- * would helpful to understand how to use this instance.
32
- *
33
- * ```ts
34
- * typia.customValidators.insert("powerOf")("number")(
35
- * (text: string) => {
36
- * const denominator: number = Math.log(Number(text));
37
- * return (value: number) => {
38
- * value = Math.log(value) / denominator;
39
- * return value === Math.floor(value);
40
- * };
41
- * }
42
- * );
43
- * typia.customValidators.insert("dollar")("string")(
44
- * () => (value: string) => value.startsWith("$"),
45
- * );
46
- *
47
- * interface TagCustom {
48
- * /**
49
- * * @powerOf 10
50
- * *\/
51
- * powerOf: number;
52
- *
53
- * /**
54
- * * @dollar
55
- * *\/
56
- * dollar: string;
57
- * }
58
- * ```
59
- *
60
- * @author Jeongho Nam - https://github.com/samchon
61
- */
62
- export const customValidators: CustomValidatorMap = {
63
- size: (name?: string) =>
64
- name ? $dictionary.get(name)?.size ?? 0 : $dictionary.size,
65
- has: (name) => (type) => $dictionary.get(name)?.has(type) ?? false,
66
- get: (name) => (type) => $dictionary.get(name)?.get(type),
67
- insert: (name) => (type) => (closure) => {
68
- const internal = MapUtil.take($dictionary)(name, () => new Map());
69
- if (internal.has(type)) return false;
70
- internal.set(type, closure);
71
- return true;
72
- },
73
- erase: (name) => (type) => $dictionary.get(name)?.delete(type) ?? false,
74
- };
75
-
76
23
  /* -----------------------------------------------------------
77
24
  BASIC VALIDATORS
78
25
  ----------------------------------------------------------- */
@@ -31,29 +31,65 @@ export namespace AssertProgrammer {
31
31
  trace: true,
32
32
  numeric: OptionPredicator.numeric(project.options),
33
33
  equals,
34
- atomist: (explore) => (tuple) => (input) =>
34
+ atomist: (explore) => (entry) => (input) =>
35
35
  [
36
- tuple.expression,
37
- ...tuple.tags.map((tag) =>
38
- ts.factory.createLogicalOr(
39
- tag.expression,
40
- create_guard_call(importer)(
41
- explore.from === "top"
42
- ? ts.factory.createTrue()
43
- : ts.factory.createIdentifier(
44
- "_exceptionable",
36
+ ...(entry.expression ? [entry.expression] : []),
37
+ ...(entry.conditions.length === 0
38
+ ? []
39
+ : entry.conditions.length === 1
40
+ ? entry.conditions[0]!.map((cond) =>
41
+ ts.factory.createLogicalOr(
42
+ cond.expression,
43
+ create_guard_call(importer)(
44
+ explore.from === "top"
45
+ ? ts.factory.createTrue()
46
+ : ts.factory.createIdentifier(
47
+ "_exceptionable",
48
+ ),
49
+ )(
50
+ ts.factory.createIdentifier(
51
+ explore.postfix
52
+ ? `_path + ${explore.postfix}`
53
+ : "_path",
45
54
  ),
46
- )(
47
- ts.factory.createIdentifier(
48
- explore.postfix
49
- ? `_path + ${explore.postfix}`
50
- : "_path",
51
- ),
52
- tag.expected,
53
- input,
54
- ),
55
- ),
56
- ),
55
+ cond.expected,
56
+ input,
57
+ ),
58
+ ),
59
+ )
60
+ : [
61
+ ts.factory.createLogicalOr(
62
+ entry.conditions
63
+ .map((set) =>
64
+ set
65
+ .map((s) => s.expression)
66
+ .reduce((a, b) =>
67
+ ts.factory.createLogicalAnd(
68
+ a,
69
+ b,
70
+ ),
71
+ ),
72
+ )
73
+ .reduce((a, b) =>
74
+ ts.factory.createLogicalOr(a, b),
75
+ ),
76
+ create_guard_call(importer)(
77
+ explore.from === "top"
78
+ ? ts.factory.createTrue()
79
+ : ts.factory.createIdentifier(
80
+ "_exceptionable",
81
+ ),
82
+ )(
83
+ ts.factory.createIdentifier(
84
+ explore.postfix
85
+ ? `_path + ${explore.postfix}`
86
+ : "_path",
87
+ ),
88
+ entry.expected,
89
+ input,
90
+ ),
91
+ ),
92
+ ]),
57
93
  ].reduce((x, y) => ts.factory.createLogicalAnd(x, y)),
58
94
  combiner: combiner(equals)(importer),
59
95
  joiner: joiner(equals)(importer),