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
@@ -3,9 +3,9 @@ import ts from "typescript";
3
3
  import { IMetadataCollection } from "../schemas/metadata/IMetadataCollection";
4
4
  import { Metadata } from "../schemas/metadata/Metadata";
5
5
  import { MetadataAlias } from "../schemas/metadata/MetadataAlias";
6
- import { MetadataArray } from "../schemas/metadata/MetadataArray";
6
+ import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
7
7
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
8
- import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
8
+ import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
9
9
 
10
10
  import { Writable } from "../typings/Writable";
11
11
 
@@ -18,8 +18,8 @@ export class MetadataCollection {
18
18
  private readonly objects_: Map<ts.Type, MetadataObject>;
19
19
  private readonly object_unions_: Map<string, MetadataObject[]>;
20
20
  private readonly aliases_: Map<ts.Type, MetadataAlias>;
21
- private readonly arrays_: Map<ts.Type, MetadataArray>;
22
- private readonly tuples_: Map<ts.Type, MetadataTuple>;
21
+ private readonly arrays_: Map<ts.Type, MetadataArrayType>;
22
+ private readonly tuples_: Map<ts.Type, MetadataTupleType>;
23
23
 
24
24
  private readonly names_: Map<string, Map<ts.Type, string>>;
25
25
  private object_index_: number;
@@ -61,11 +61,11 @@ export class MetadataCollection {
61
61
  return [...this.object_unions_.values()];
62
62
  }
63
63
 
64
- public arrays(): MetadataArray[] {
64
+ public arrays(): MetadataArrayType[] {
65
65
  return [...this.arrays_.values()];
66
66
  }
67
67
 
68
- public tuples(): MetadataTuple[] {
68
+ public tuples(): MetadataTupleType[] {
69
69
  return [...this.tuples_.values()];
70
70
  }
71
71
 
@@ -149,7 +149,6 @@ export class MetadataCollection {
149
149
  description: CommentFactory.description(symbol) ?? null,
150
150
  recursive: null!,
151
151
  nullables: [],
152
- tags: [],
153
152
  jsDocTags: symbol.getJsDocTags() ?? [],
154
153
  });
155
154
  this.aliases_.set(type, alias);
@@ -159,12 +158,12 @@ export class MetadataCollection {
159
158
  public emplaceArray(
160
159
  checker: ts.TypeChecker,
161
160
  type: ts.Type,
162
- ): [MetadataArray, boolean, (meta: Metadata) => void] {
161
+ ): [MetadataArrayType, boolean, (meta: Metadata) => void] {
163
162
  const oldbie = this.arrays_.get(type);
164
163
  if (oldbie !== undefined) return [oldbie, false, () => {}];
165
164
 
166
165
  const $id = this.getName(checker, type);
167
- const array: MetadataArray = MetadataArray.create({
166
+ const array: MetadataArrayType = MetadataArrayType.create({
168
167
  name: $id,
169
168
  value: null!,
170
169
  index: null,
@@ -178,12 +177,12 @@ export class MetadataCollection {
178
177
  public emplaceTuple(
179
178
  checker: ts.TypeChecker,
180
179
  type: ts.TupleType,
181
- ): [MetadataTuple, boolean, (elements: Metadata[]) => void] {
180
+ ): [MetadataTupleType, boolean, (elements: Metadata[]) => void] {
182
181
  const oldbie = this.tuples_.get(type);
183
182
  if (oldbie !== undefined) return [oldbie, false, () => {}];
184
183
 
185
184
  const $id = this.getName(checker, type);
186
- const tuple: MetadataTuple = MetadataTuple.create({
185
+ const tuple: MetadataTupleType = MetadataTupleType.create({
187
186
  name: $id,
188
187
  elements: null!,
189
188
  index: null,
@@ -215,12 +214,18 @@ export class MetadataCollection {
215
214
  /**
216
215
  * @internal
217
216
  */
218
- public setArrayRecursive(array: MetadataArray, recursive: boolean): void {
217
+ public setArrayRecursive(
218
+ array: MetadataArrayType,
219
+ recursive: boolean,
220
+ ): void {
219
221
  Writable(array).recursive = recursive;
220
222
  if (recursive) Writable(array).index = this.recursive_array_index_++;
221
223
  }
222
224
 
223
- public setTupleRecursive(tuple: MetadataTuple, recursive: boolean): void {
225
+ public setTupleRecursive(
226
+ tuple: MetadataTupleType,
227
+ recursive: boolean,
228
+ ): void {
224
229
  Writable(tuple).recursive = recursive;
225
230
  if (recursive) Writable(tuple).index = this.recursive_tuple_index_++;
226
231
  }
@@ -0,0 +1,583 @@
1
+ import ts from "typescript";
2
+
3
+ import { IMetadataTypeTag } from "../schemas/metadata/IMetadataTypeTag";
4
+ import { Metadata } from "../schemas/metadata/Metadata";
5
+
6
+ import { MetadataTypeTagFactory } from "./MetadataTypeTagFactory";
7
+
8
+ /**
9
+ * Extremely hard coded, but no reason to maintain.
10
+ *
11
+ * @internal
12
+ */
13
+ export namespace MetadataCommentTagFactory {
14
+ export const analyze =
15
+ (identifier: () => string) =>
16
+ (metadata: Metadata) =>
17
+ (commentList: ts.JSDocTagInfo[]) => {
18
+ for (const comment of commentList) {
19
+ const tagger: TagRecord = parse(identifier)(comment);
20
+ for (const [key, value] of Object.entries(tagger)) {
21
+ if (key === "array") {
22
+ if (metadata.arrays.length === 0)
23
+ throw new Error(
24
+ `${LABEL}: ${
25
+ comment.name
26
+ } requires array type, no on "${identifier()}".`,
27
+ );
28
+ for (const a of metadata.arrays)
29
+ for (const tags of a.tags ?? [])
30
+ MetadataTypeTagFactory.validate("array")([
31
+ ...tags,
32
+ ...value,
33
+ ]);
34
+ for (const a of metadata.arrays)
35
+ if (a.tags.length === 0) a.tags.push(value);
36
+ else for (const tags of a.tags) tags.push(...value);
37
+ } else {
38
+ const atomic = metadata.atomics.find(
39
+ (a) => a.type == key,
40
+ );
41
+ if (atomic === undefined) {
42
+ if (key === "bigint" || key === "number") {
43
+ const opposite =
44
+ key === "bigint" ? "number" : "bigint";
45
+ if (
46
+ tagger[opposite] !== undefined &&
47
+ metadata.atomics.some(
48
+ (a) => a.type === opposite,
49
+ )
50
+ )
51
+ continue;
52
+ } else if (
53
+ key === "string" &&
54
+ value[0]?.kind === "format" &&
55
+ value[0]?.value === "date-time"
56
+ )
57
+ continue;
58
+ throw new Error(
59
+ `${LABEL}: ${
60
+ comment.name
61
+ } requires ${key} type, no on "${identifier()}".`,
62
+ );
63
+ }
64
+ for (const tags of atomic.tags ?? [])
65
+ MetadataTypeTagFactory.validate(key as "string")([
66
+ ...tags,
67
+ ...value,
68
+ ]);
69
+
70
+ if (atomic.tags.length === 0) atomic.tags.push(value);
71
+ else
72
+ for (const tags of atomic.tags) tags.push(...value);
73
+ }
74
+ }
75
+ }
76
+ };
77
+
78
+ const parse =
79
+ (identifier: () => string) =>
80
+ (comment: ts.JSDocTagInfo): TagRecord => {
81
+ const parser = PARSER[comment.name];
82
+ if (parser === undefined) return {};
83
+
84
+ const text = (comment.text || [])[0]?.text;
85
+ if (text === undefined)
86
+ throw new Error(
87
+ `${LABEL}: no comment tag value on ${identifier()}`,
88
+ );
89
+
90
+ return parser(identifier)(text);
91
+ };
92
+ }
93
+
94
+ type TagRecord = {
95
+ [P in Target]?: IMetadataTypeTag[];
96
+ };
97
+ type Target = "bigint" | "number" | "string" | "array";
98
+
99
+ const PARSER: Record<
100
+ string,
101
+ (identifier: () => string) => (text: string) => {
102
+ [P in Target]?: IMetadataTypeTag[];
103
+ }
104
+ > = {
105
+ /* -----------------------------------------------------------
106
+ ARRAY
107
+ ----------------------------------------------------------- */
108
+ items: (identifier) => (Value) => ({
109
+ array: [
110
+ {
111
+ name: `MinItems<${Value}>`,
112
+ target: "array",
113
+ kind: "minItems",
114
+ value: parse_integer(identifier)(true)(Value),
115
+ validate: `${Value} <= $input.length`,
116
+ exclusive: true,
117
+ },
118
+ {
119
+ name: `MaxItems<${Value}>`,
120
+ target: "array",
121
+ kind: "maxItems",
122
+ value: parse_integer(identifier)(true)(Value),
123
+ validate: `$input.length <= ${Value}`,
124
+ exclusive: true,
125
+ },
126
+ ],
127
+ }),
128
+ minItems: (identifier) => (Value) => ({
129
+ array: [
130
+ {
131
+ name: `MinItems<${Value}>`,
132
+ target: "array",
133
+ kind: "minItems",
134
+ value: parse_integer(identifier)(true)(Value),
135
+ validate: `${Value} <= $input.length`,
136
+ exclusive: true,
137
+ },
138
+ ],
139
+ }),
140
+ maxItems: (identifier) => (Value) => ({
141
+ array: [
142
+ {
143
+ name: `MaxItems<${Value}>`,
144
+ target: "array",
145
+ kind: "maxItems",
146
+ value: parse_integer(identifier)(true)(Value),
147
+ validate: `$input.length <= ${Value}`,
148
+ exclusive: true,
149
+ },
150
+ ],
151
+ }),
152
+
153
+ /* -----------------------------------------------------------
154
+ NUMBER
155
+ ----------------------------------------------------------- */
156
+ type: () => (Value) => {
157
+ // EMENDATIONS
158
+ if (Value.startsWith("{") && Value.endsWith("}"))
159
+ Value = Value.substring(1, Value.length - 1);
160
+ if (Value === "int") Value = "int32";
161
+ else if (Value === "uint") Value = "uint32";
162
+
163
+ // MUST BE ONE OF THEM
164
+ if (
165
+ ["int32", "uint32", "int64", "uint64", "float", "double"].includes(
166
+ Value,
167
+ ) === false
168
+ )
169
+ return {};
170
+ return {
171
+ number: [
172
+ {
173
+ name: `Type<${Value}>`,
174
+ target: "number",
175
+ kind: "type",
176
+ value: Value,
177
+ validate:
178
+ Value === "int32"
179
+ ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`
180
+ : Value === "uint32"
181
+ ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`
182
+ : Value === "int64"
183
+ ? `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`
184
+ : Value === "uint64"
185
+ ? `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`
186
+ : Value === "float"
187
+ ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`
188
+ : `true`,
189
+ exclusive: true,
190
+ },
191
+ ],
192
+ bigint:
193
+ Value === "int64" || "uint64"
194
+ ? [
195
+ {
196
+ name: `Type<${Value}>`,
197
+ target: "bigint",
198
+ kind: "type",
199
+ value: Value,
200
+ validate:
201
+ Value === "int64"
202
+ ? "true"
203
+ : "BigInt(0) <= $input",
204
+ exclusive: true,
205
+ },
206
+ ]
207
+ : [],
208
+ };
209
+ },
210
+ minimum: (identifier) => (Value) => ({
211
+ number: [
212
+ {
213
+ name: `Minimum<${Value}>`,
214
+ target: "number",
215
+ kind: "minimum",
216
+ value: parse_number(identifier)(Value),
217
+ validate: `${Value} <= $input`,
218
+ exclusive: ["minimum", "exclusiveMinimum"],
219
+ },
220
+ ],
221
+ bigint: [
222
+ {
223
+ name: `Minimum<${Value}n>`,
224
+ target: "bigint",
225
+ kind: "minimum",
226
+ value: BigInt(parse_integer(identifier)(false)(Value)),
227
+ validate: `${Value} <= $input`,
228
+ exclusive: ["minimum", "exclusiveMinimum"],
229
+ },
230
+ ],
231
+ }),
232
+ maximum: (identifier) => (Value) => ({
233
+ number: [
234
+ {
235
+ name: `Maximum<${Value}>`,
236
+ target: "number",
237
+ kind: "maximum",
238
+ value: parse_number(identifier)(Value),
239
+ validate: `$input <= ${Value}`,
240
+ exclusive: ["maximum", "exclusiveMaximum"],
241
+ },
242
+ ],
243
+ bigint: [
244
+ {
245
+ name: `Maximum<${Value}n>`,
246
+ target: "bigint",
247
+ kind: "maximum",
248
+ value: BigInt(parse_integer(identifier)(false)(Value)),
249
+ validate: `$input <= ${Value}`,
250
+ exclusive: ["maximum", "exclusiveMaximum"],
251
+ },
252
+ ],
253
+ }),
254
+ exclusiveMinimum: (identifier) => (Value) => ({
255
+ number: [
256
+ {
257
+ name: `ExclusiveMinimum<${Value}>`,
258
+ target: "number",
259
+ kind: "exclusiveMinimum",
260
+ value: parse_number(identifier)(Value),
261
+ validate: `${Value} < $input`,
262
+ exclusive: ["minimum", "exclusiveMinimum"],
263
+ },
264
+ ],
265
+ bigint: [
266
+ {
267
+ name: `ExclusiveMinimum<${Value}n>`,
268
+ target: "bigint",
269
+ kind: "exclusiveMinimum",
270
+ value: BigInt(parse_integer(identifier)(false)(Value)),
271
+ validate: `${Value} < $input`,
272
+ exclusive: ["minimum", "exclusiveMinimum"],
273
+ },
274
+ ],
275
+ }),
276
+ exclusiveMaximum: (identifier) => (Value) => ({
277
+ number: [
278
+ {
279
+ name: `ExclusiveMaximum<${Value}>`,
280
+ target: "number",
281
+ kind: "exclusiveMaximum",
282
+ value: parse_number(identifier)(Value),
283
+ validate: `$input < ${Value}`,
284
+ exclusive: ["maximum", "exclusiveMaximum"],
285
+ },
286
+ ],
287
+ bigint: [
288
+ {
289
+ name: `ExclusiveMaximum<${Value}n>`,
290
+ target: "bigint",
291
+ kind: "exclusiveMaximum",
292
+ value: BigInt(parse_integer(identifier)(false)(Value)),
293
+ validate: `$input < ${Value}`,
294
+ exclusive: ["maximum", "exclusiveMaximum"],
295
+ },
296
+ ],
297
+ }),
298
+ multipleOf: (identifier) => (Value) => ({
299
+ number: [
300
+ {
301
+ name: `MultipleOf<${Value}>`,
302
+ target: "number",
303
+ kind: "multipleOf",
304
+ value: parse_number(identifier)(Value),
305
+ validate: `$input % ${Value} === 0`,
306
+ exclusive: true,
307
+ },
308
+ ],
309
+ bigint: [
310
+ {
311
+ name: `MultipleOf<${Value}n>`,
312
+ target: "bigint",
313
+ kind: "multipleOf",
314
+ value: BigInt(parse_integer(identifier)(false)(Value)),
315
+ validate: `$input % ${Value}n === 0n`,
316
+ exclusive: true,
317
+ },
318
+ ],
319
+ }),
320
+
321
+ /* -----------------------------------------------------------
322
+ STRING
323
+ ----------------------------------------------------------- */
324
+ format: () => (Value) => {
325
+ const matched = FORMATS.get(Value);
326
+ if (matched === undefined) return {};
327
+ return {
328
+ string: [
329
+ {
330
+ name: `Format<${matched[0]}>`,
331
+ target: "string",
332
+ kind: "format",
333
+ value: matched[0],
334
+ validate: matched[1],
335
+ exclusive: true,
336
+ },
337
+ ],
338
+ };
339
+ },
340
+ pattern: () => (Value) => ({
341
+ string: [
342
+ {
343
+ name: `Pattern<${Value}>`,
344
+ target: "string",
345
+ kind: "pattern",
346
+ value: Value,
347
+ validate: `RegExp(/${Value}/).test($input)`,
348
+ exclusive: ["format"],
349
+ },
350
+ ],
351
+ }),
352
+ length: (identifier) => (Value) => ({
353
+ string: [
354
+ {
355
+ name: `MinLength<${Value}>`,
356
+ target: "string",
357
+ kind: "minLength",
358
+ value: parse_number(identifier)(Value),
359
+ validate: `${Value} <= $input.length`,
360
+ exclusive: true,
361
+ },
362
+ {
363
+ name: `MaxLength<${Value}>`,
364
+ target: "string",
365
+ kind: "maxLength",
366
+ value: parse_number(identifier)(Value),
367
+ validate: `$input.length <= ${Value}`,
368
+ exclusive: true,
369
+ },
370
+ ],
371
+ }),
372
+ minLength: (identifier) => (Value) => ({
373
+ string: [
374
+ {
375
+ name: `MinLength<${Value}>`,
376
+ target: "string",
377
+ kind: "minLength",
378
+ value: parse_number(identifier)(Value),
379
+ validate: `${Value} <= $input.length`,
380
+ exclusive: true,
381
+ },
382
+ ],
383
+ }),
384
+ maxLength: (identifier) => (Value) => ({
385
+ string: [
386
+ {
387
+ name: `MaxLength<${Value}>`,
388
+ target: "string",
389
+ kind: "maxLength",
390
+ value: parse_number(identifier)(Value),
391
+ validate: `$input.length <= ${Value}`,
392
+ exclusive: true,
393
+ },
394
+ ],
395
+ }),
396
+ };
397
+
398
+ const parse_number =
399
+ (identifier: () => string) =>
400
+ (str: string): number => {
401
+ const value: number = Number(str);
402
+ if (isNaN(value) === true)
403
+ throw new Error(`${LABEL}: invalid number on "${identifier()}".`);
404
+ return value;
405
+ };
406
+
407
+ const parse_integer =
408
+ (identifier: () => string) =>
409
+ (unsigned: boolean) =>
410
+ (str: string): number => {
411
+ const value: number = parse_number(identifier)(str);
412
+ if (Math.floor(value) !== value)
413
+ throw new Error(`${LABEL}: invalid integer on "${identifier()}".`);
414
+ else if (unsigned === true && value < 0)
415
+ throw new Error(
416
+ `${LABEL}: invalid unsigned integer on "${identifier()}".`,
417
+ );
418
+ return value;
419
+ };
420
+
421
+ type IMetadataCommentTag =
422
+ // NUMBER
423
+ | IMetadataCommentTag.IType
424
+ | IMetadataCommentTag.IMinimum
425
+ | IMetadataCommentTag.IMaximum
426
+ | IMetadataCommentTag.IExclusiveMinimum
427
+ | IMetadataCommentTag.IExclusiveMaximum
428
+ | IMetadataCommentTag.IMultipleOf
429
+ | IMetadataCommentTag.IStep
430
+ // STRING
431
+ | IMetadataCommentTag.IFormat
432
+ | IMetadataCommentTag.IPattern
433
+ | IMetadataCommentTag.ILength
434
+ | IMetadataCommentTag.IMinLength
435
+ | IMetadataCommentTag.IMaxLength
436
+ // ARRAY
437
+ | IMetadataCommentTag.IItems
438
+ | IMetadataCommentTag.IMinItems
439
+ | IMetadataCommentTag.IMaxItems;
440
+
441
+ namespace IMetadataCommentTag {
442
+ /* -----------------------------------------------------------
443
+ NUMBER
444
+ ----------------------------------------------------------- */
445
+ export interface IType {
446
+ kind: "type";
447
+ value:
448
+ | "int"
449
+ | "uint"
450
+ | "int32"
451
+ | "uint32"
452
+ | "int64"
453
+ | "uint64"
454
+ | "float";
455
+ }
456
+
457
+ export interface IMinimum {
458
+ kind: "minimum";
459
+ value: number;
460
+ }
461
+
462
+ export interface IMaximum {
463
+ kind: "maximum";
464
+ value: number;
465
+ }
466
+
467
+ export interface IExclusiveMinimum {
468
+ kind: "exclusiveMinimum";
469
+ value: number;
470
+ }
471
+
472
+ export interface IExclusiveMaximum {
473
+ kind: "exclusiveMaximum";
474
+ value: number;
475
+ }
476
+
477
+ export interface IMultipleOf {
478
+ kind: "multipleOf";
479
+ value: number;
480
+ }
481
+
482
+ export interface IStep {
483
+ kind: "step";
484
+ value: number;
485
+ }
486
+
487
+ /* -----------------------------------------------------------
488
+ STRING
489
+ ----------------------------------------------------------- */
490
+ export interface IFormat {
491
+ kind: "format";
492
+ value:
493
+ | "uuid"
494
+ | "email"
495
+ | "url"
496
+ | "ipv4"
497
+ | "ipv6"
498
+ | "date"
499
+ | "date-time";
500
+ }
501
+
502
+ export interface IPattern {
503
+ kind: "pattern";
504
+ value: string;
505
+ }
506
+
507
+ export interface ILength {
508
+ kind: "length";
509
+ value: number;
510
+ }
511
+
512
+ export interface IMinLength {
513
+ kind: "minLength";
514
+ value: number;
515
+ }
516
+
517
+ export interface IMaxLength {
518
+ kind: "maxLength";
519
+ value: number;
520
+ }
521
+
522
+ /* -----------------------------------------------------------
523
+ ARRAY
524
+ ----------------------------------------------------------- */
525
+ export interface IItems {
526
+ kind: "items";
527
+ value: number;
528
+ }
529
+
530
+ export interface IMinItems {
531
+ kind: "minItems";
532
+ value: number;
533
+ }
534
+
535
+ export interface IMaxItems {
536
+ kind: "maxItems";
537
+ value: number;
538
+ }
539
+ }
540
+
541
+ const LABEL = "Error on typia.MetadataCommentTagFactory.generate()";
542
+ const FORMATS: Map<string, [IMetadataCommentTag.IFormat["value"], string]> =
543
+ new Map([
544
+ [
545
+ "email",
546
+ [
547
+ "email",
548
+ `/^(([^<>()[\\]\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\"]+)*)|(\\".+\\"))@(([^<>()[\\]\\.,;:\\s@\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\"]{2,})$/i.test($input)`,
549
+ ],
550
+ ],
551
+ [
552
+ "uuid",
553
+ [
554
+ "uuid",
555
+ `/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)`,
556
+ ],
557
+ ],
558
+ [
559
+ "ipv4",
560
+ [
561
+ "ipv4",
562
+ `/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test($input)`,
563
+ ],
564
+ ],
565
+ [
566
+ "ipv6",
567
+ [
568
+ "ipv6",
569
+ `/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test($input)`,
570
+ ],
571
+ ],
572
+ [
573
+ "url",
574
+ [
575
+ "url",
576
+ `/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)`,
577
+ ],
578
+ ],
579
+ ["date", ["date", `/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)`]],
580
+ ["datetime", ["date-time", `!isNaN(new Date($input).getTime())`]],
581
+ ["date-time", ["date-time", `!isNaN(new Date($input).getTime())`]],
582
+ ["dateTime", ["date-time", `!isNaN(new Date($input).getTime())`]],
583
+ ]);