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

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 (316) hide show
  1. package/lib/factories/ExpressionFactory.d.ts +2 -0
  2. package/lib/factories/ExpressionFactory.js +24 -0
  3. package/lib/factories/ExpressionFactory.js.map +1 -1
  4. package/lib/factories/IdentifierFactory.d.ts +2 -1
  5. package/lib/factories/IdentifierFactory.js +11 -0
  6. package/lib/factories/IdentifierFactory.js.map +1 -1
  7. package/lib/factories/MetadataCollection.d.ts +7 -7
  8. package/lib/factories/MetadataCollection.js +4 -4
  9. package/lib/factories/MetadataCollection.js.map +1 -1
  10. package/lib/factories/MetadataTagFactory.d.ts +2 -2
  11. package/lib/factories/MetadataTagFactory.js +9 -7
  12. package/lib/factories/MetadataTagFactory.js.map +1 -1
  13. package/lib/factories/ProtobufFactory.js +9 -8
  14. package/lib/factories/ProtobufFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
  16. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  17. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
  18. package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
  19. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
  20. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
  21. package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
  22. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  25. package/lib/factories/internal/metadata/iterate_metadata_collection.js +20 -12
  26. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  27. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
  28. package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +4 -4
  29. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
  30. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +138 -16
  31. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
  33. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  35. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
  37. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +3 -0
  39. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +157 -0
  40. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +1 -0
  41. package/lib/functional/$any.js +2 -1
  42. package/lib/functional/$any.js.map +1 -1
  43. package/lib/functional/$clone.d.ts +2 -0
  44. package/lib/functional/$clone.js +8 -0
  45. package/lib/functional/$clone.js.map +1 -0
  46. package/lib/module.d.ts +2 -39
  47. package/lib/module.js +3 -17
  48. package/lib/module.js.map +1 -1
  49. package/lib/programmers/AssertProgrammer.js +1 -3
  50. package/lib/programmers/AssertProgrammer.js.map +1 -1
  51. package/lib/programmers/CheckerProgrammer.js +38 -29
  52. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  53. package/lib/programmers/FeatureProgrammer.d.ts +4 -4
  54. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  55. package/lib/programmers/IsProgrammer.d.ts +1 -1
  56. package/lib/programmers/IsProgrammer.js +1 -3
  57. package/lib/programmers/IsProgrammer.js.map +1 -1
  58. package/lib/programmers/RandomProgrammer.js +44 -33
  59. package/lib/programmers/RandomProgrammer.js.map +1 -1
  60. package/lib/programmers/ValidateProgrammer.js +1 -3
  61. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  62. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  63. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  64. package/lib/programmers/helpers/ICheckEntry.d.ts +1 -1
  65. package/lib/programmers/helpers/ProtobufUtil.js +2 -2
  66. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  67. package/lib/programmers/helpers/RandomJoiner.d.ts +4 -4
  68. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  69. package/lib/programmers/helpers/RandomRanger.d.ts +6 -6
  70. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  71. package/lib/programmers/helpers/UnionExplorer.d.ts +8 -8
  72. package/lib/programmers/helpers/UnionExplorer.js +40 -29
  73. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  74. package/lib/programmers/internal/application_array.js +1 -1
  75. package/lib/programmers/internal/application_array.js.map +1 -1
  76. package/lib/programmers/internal/application_default_string.js +2 -2
  77. package/lib/programmers/internal/application_default_string.js.map +1 -1
  78. package/lib/programmers/internal/application_resolved.js +2 -2
  79. package/lib/programmers/internal/application_resolved.js.map +1 -1
  80. package/lib/programmers/internal/application_schema.js +5 -5
  81. package/lib/programmers/internal/application_schema.js.map +1 -1
  82. package/lib/programmers/internal/application_string.js.map +1 -1
  83. package/lib/programmers/internal/application_tuple.js +10 -9
  84. package/lib/programmers/internal/application_tuple.js.map +1 -1
  85. package/lib/programmers/internal/check_array_length.js.map +1 -1
  86. package/lib/programmers/internal/check_array_tags.js +39 -0
  87. package/lib/programmers/internal/check_array_tags.js.map +1 -0
  88. package/lib/programmers/internal/check_bigint.js +88 -74
  89. package/lib/programmers/internal/check_bigint.js.map +1 -1
  90. package/lib/programmers/internal/check_number.js +142 -131
  91. package/lib/programmers/internal/check_number.js.map +1 -1
  92. package/lib/programmers/internal/check_string.js +30 -6
  93. package/lib/programmers/internal/check_string.js.map +1 -1
  94. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  95. package/lib/programmers/internal/check_template.js +16 -49
  96. package/lib/programmers/internal/check_template.js.map +1 -1
  97. package/lib/programmers/internal/check_union_array_like.js +3 -2
  98. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  99. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  100. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  101. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  102. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  103. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
  104. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  105. package/lib/programmers/json/JsonStringifyProgrammer.js +29 -23
  106. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  107. package/lib/programmers/misc/MiscCloneProgrammer.js +10 -10
  108. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  109. package/lib/programmers/misc/MiscLiteralsProgrammer.js +2 -2
  110. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  111. package/lib/programmers/misc/MiscPruneProgrammer.js +13 -13
  112. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  113. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
  114. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  115. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +2 -2
  116. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  117. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  118. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  119. package/lib/schemas/json/IJsonSchema.d.ts +2 -2
  120. package/lib/schemas/metadata/IMetadata.d.ts +11 -4
  121. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -2
  122. package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
  123. package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
  124. package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
  125. package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
  126. package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
  127. package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
  128. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  129. package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
  130. package/lib/schemas/metadata/{IMetadataTag.d.ts → IMetadataCommentTag.d.ts} +2 -2
  131. package/lib/schemas/metadata/IMetadataCommentTag.js +3 -0
  132. package/lib/schemas/metadata/IMetadataCommentTag.js.map +1 -0
  133. package/lib/schemas/metadata/IMetadataProperty.d.ts +2 -2
  134. package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
  135. package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
  136. package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
  137. package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
  138. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +6 -0
  139. package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
  140. package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
  141. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  142. package/lib/schemas/metadata/Metadata.js +206 -146
  143. package/lib/schemas/metadata/Metadata.js.map +1 -1
  144. package/lib/schemas/metadata/MetadataAlias.d.ts +2 -2
  145. package/lib/schemas/metadata/MetadataArray.d.ts +6 -6
  146. package/lib/schemas/metadata/MetadataArray.js +5 -19
  147. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  148. package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
  149. package/lib/schemas/metadata/MetadataArrayType.js +36 -0
  150. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
  151. package/lib/schemas/metadata/MetadataProperty.d.ts +2 -2
  152. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -6
  153. package/lib/schemas/metadata/MetadataTuple.js +5 -19
  154. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  155. package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
  156. package/lib/schemas/metadata/MetadataTupleType.js +40 -0
  157. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
  158. package/lib/tags/ExclusiveMaximum.d.ts +8 -0
  159. package/lib/tags/ExclusiveMaximum.js +3 -0
  160. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  161. package/lib/tags/ExclusiveMinimum.d.ts +8 -0
  162. package/lib/tags/ExclusiveMinimum.js +3 -0
  163. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  164. package/lib/tags/Format.d.ts +8 -0
  165. package/lib/{schemas/metadata/IMetadataTag.js → tags/Format.js} +1 -1
  166. package/lib/tags/Format.js.map +1 -0
  167. package/lib/tags/MaxItems.d.ts +8 -0
  168. package/lib/tags/MaxItems.js +3 -0
  169. package/lib/tags/MaxItems.js.map +1 -0
  170. package/lib/tags/MaxLength.d.ts +8 -0
  171. package/lib/tags/MaxLength.js +3 -0
  172. package/lib/tags/MaxLength.js.map +1 -0
  173. package/lib/tags/Maximum.d.ts +8 -0
  174. package/lib/tags/Maximum.js +3 -0
  175. package/lib/tags/Maximum.js.map +1 -0
  176. package/lib/tags/MinItems.d.ts +8 -0
  177. package/lib/tags/MinItems.js +3 -0
  178. package/lib/tags/MinItems.js.map +1 -0
  179. package/lib/tags/MinLength.d.ts +8 -0
  180. package/lib/tags/MinLength.js +3 -0
  181. package/lib/tags/MinLength.js.map +1 -0
  182. package/lib/tags/Minimum.d.ts +8 -0
  183. package/lib/tags/Minimum.js +3 -0
  184. package/lib/tags/Minimum.js.map +1 -0
  185. package/lib/tags/MultipleOf.d.ts +8 -0
  186. package/lib/tags/MultipleOf.js +3 -0
  187. package/lib/tags/MultipleOf.js.map +1 -0
  188. package/lib/tags/Pattern.d.ts +8 -0
  189. package/lib/tags/Pattern.js +3 -0
  190. package/lib/tags/Pattern.js.map +1 -0
  191. package/lib/tags/TagBase.d.ts +10 -0
  192. package/lib/tags/TagBase.js +3 -0
  193. package/lib/tags/TagBase.js.map +1 -0
  194. package/lib/tags/Type.d.ts +13 -0
  195. package/lib/tags/Type.js +3 -0
  196. package/lib/tags/Type.js.map +1 -0
  197. package/lib/tags/index.d.ts +12 -0
  198. package/lib/tags/index.js +29 -0
  199. package/lib/tags/index.js.map +1 -0
  200. package/lib/transformers/FileTransformer.d.ts +1 -1
  201. package/lib/transformers/FileTransformer.js +12 -1
  202. package/lib/transformers/FileTransformer.js.map +1 -1
  203. package/lib/transformers/IProject.d.ts +1 -0
  204. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -2
  205. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  206. package/package.json +1 -1
  207. package/src/factories/ExpressionFactory.ts +44 -0
  208. package/src/factories/IdentifierFactory.ts +15 -0
  209. package/src/factories/MetadataCollection.ts +18 -12
  210. package/src/factories/MetadataTagFactory.ts +22 -21
  211. package/src/factories/ProtobufFactory.ts +10 -8
  212. package/src/factories/internal/metadata/emend_metadata_atomics.ts +7 -5
  213. package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
  214. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
  215. package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
  216. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +6 -4
  217. package/src/factories/internal/metadata/iterate_metadata_collection.ts +23 -16
  218. package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +1 -1
  219. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +109 -15
  220. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
  221. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
  222. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
  223. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +183 -0
  224. package/src/functional/$any.ts +3 -1
  225. package/src/functional/$clone.ts +4 -0
  226. package/src/module.ts +2 -55
  227. package/src/programmers/AssertProgrammer.ts +1 -1
  228. package/src/programmers/CheckerProgrammer.ts +80 -47
  229. package/src/programmers/FeatureProgrammer.ts +6 -6
  230. package/src/programmers/IsProgrammer.ts +1 -1
  231. package/src/programmers/RandomProgrammer.ts +68 -45
  232. package/src/programmers/ValidateProgrammer.ts +1 -1
  233. package/src/programmers/helpers/AtomicPredicator.ts +2 -2
  234. package/src/programmers/helpers/ICheckEntry.ts +1 -1
  235. package/src/programmers/helpers/ProtobufUtil.ts +1 -1
  236. package/src/programmers/helpers/RandomJoiner.ts +8 -4
  237. package/src/programmers/helpers/RandomRanger.ts +8 -8
  238. package/src/programmers/helpers/UnionExplorer.ts +48 -34
  239. package/src/programmers/internal/application_array.ts +5 -4
  240. package/src/programmers/internal/application_default_string.ts +6 -2
  241. package/src/programmers/internal/application_resolved.ts +2 -2
  242. package/src/programmers/internal/application_schema.ts +5 -5
  243. package/src/programmers/internal/application_string.ts +2 -2
  244. package/src/programmers/internal/application_tuple.ts +12 -11
  245. package/src/programmers/internal/check_array_length.ts +2 -2
  246. package/src/programmers/internal/check_array_tags.ts +45 -0
  247. package/src/programmers/internal/check_bigint.ts +45 -17
  248. package/src/programmers/internal/check_number.ts +97 -70
  249. package/src/programmers/internal/check_string.ts +43 -12
  250. package/src/programmers/internal/check_string_tags.ts +3 -3
  251. package/src/programmers/internal/check_template.ts +1 -12
  252. package/src/programmers/internal/check_union_array_like.ts +6 -5
  253. package/src/programmers/internal/metadata_to_pattern.ts +4 -4
  254. package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
  255. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
  256. package/src/programmers/json/JsonStringifyProgrammer.ts +41 -25
  257. package/src/programmers/misc/MiscCloneProgrammer.ts +24 -14
  258. package/src/programmers/misc/MiscLiteralsProgrammer.ts +2 -2
  259. package/src/programmers/misc/MiscPruneProgrammer.ts +27 -17
  260. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +12 -12
  261. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +14 -14
  262. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -6
  263. package/src/schemas/json/IJsonSchema.ts +2 -2
  264. package/src/schemas/metadata/IMetadata.ts +11 -5
  265. package/src/schemas/metadata/IMetadataAlias.ts +2 -2
  266. package/src/schemas/metadata/IMetadataArray.ts +4 -7
  267. package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
  268. package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
  269. package/src/schemas/metadata/IMetadataCollection.ts +4 -4
  270. package/src/schemas/metadata/{IMetadataTag.ts → IMetadataCommentTag.ts} +17 -17
  271. package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
  272. package/src/schemas/metadata/IMetadataProperty.ts +2 -2
  273. package/src/schemas/metadata/IMetadataTuple.ts +4 -7
  274. package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
  275. package/src/schemas/metadata/IMetadataTypeTag.ts +6 -0
  276. package/src/schemas/metadata/Metadata.ts +109 -44
  277. package/src/schemas/metadata/MetadataAlias.ts +2 -2
  278. package/src/schemas/metadata/MetadataArray.ts +10 -34
  279. package/src/schemas/metadata/MetadataArrayType.ts +57 -0
  280. package/src/schemas/metadata/MetadataProperty.ts +2 -2
  281. package/src/schemas/metadata/MetadataTuple.ts +10 -37
  282. package/src/schemas/metadata/MetadataTupleType.ts +67 -0
  283. package/src/tags/ExclusiveMaximum.ts +8 -0
  284. package/src/tags/ExclusiveMinimum.ts +8 -0
  285. package/src/tags/Format.ts +29 -0
  286. package/src/tags/MaxItems.ts +8 -0
  287. package/src/tags/MaxLength.ts +8 -0
  288. package/src/tags/Maximum.ts +8 -0
  289. package/src/tags/MinItems.ts +8 -0
  290. package/src/tags/MinLength.ts +8 -0
  291. package/src/tags/Minimum.ts +8 -0
  292. package/src/tags/MultipleOf.ts +10 -0
  293. package/src/tags/Pattern.ts +8 -0
  294. package/src/tags/TagBase.ts +17 -0
  295. package/src/tags/Type.ts +30 -0
  296. package/src/tags/index.ts +12 -0
  297. package/src/transformers/FileTransformer.ts +2 -2
  298. package/src/transformers/IProject.ts +1 -0
  299. package/src/transformers/features/json/JsonApplicationTransformer.ts +3 -2
  300. package/src/typings/Atomic.ts +1 -0
  301. package/lib/CustomValidatorMap.d.ts +0 -110
  302. package/lib/CustomValidatorMap.js.map +0 -1
  303. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
  304. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
  305. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
  306. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
  307. package/lib/programmers/internal/check_array.js +0 -44
  308. package/lib/programmers/internal/check_array.js.map +0 -1
  309. package/lib/programmers/internal/check_custom.d.ts +0 -1
  310. package/lib/programmers/internal/check_custom.js +0 -30
  311. package/lib/programmers/internal/check_custom.js.map +0 -1
  312. package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
  313. package/src/CustomValidatorMap.ts +0 -126
  314. package/src/programmers/internal/check_array.ts +0 -30
  315. package/src/programmers/internal/check_custom.ts +0 -31
  316. /package/lib/programmers/internal/{check_array.d.ts → check_array_tags.d.ts} +0 -0
@@ -1,19 +1,24 @@
1
- import { Atomic } from "../../typings/Atomic";
1
+ import { $clone } from "../../functional/$clone";
2
+
2
3
  import { ClassProperties } from "../../typings/ClassProperties";
3
4
  import { Writable } from "../../typings/Writable";
4
5
 
5
6
  import { ArrayUtil } from "../../utils/ArrayUtil";
6
7
 
7
8
  import { IMetadata } from "./IMetadata";
9
+ import { IMetadataAtomic } from "./IMetadataAtomic";
8
10
  import { IMetadataCollection } from "./IMetadataCollection";
9
11
  import { IMetadataDictionary } from "./IMetadataDictionary";
12
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
10
13
  import { MetadataAlias } from "./MetadataAlias";
11
14
  import { MetadataArray } from "./MetadataArray";
15
+ import { MetadataArrayType } from "./MetadataArrayType";
12
16
  import { MetadataConstant } from "./MetadataConstant";
13
17
  import { MetadataEscaped } from "./MetadataEscaped";
14
18
  import { MetadataObject } from "./MetadataObject";
15
19
  import { MetadataProperty } from "./MetadataProperty";
16
20
  import { MetadataTuple } from "./MetadataTuple";
21
+ import { MetadataTupleType } from "./MetadataTupleType";
17
22
 
18
23
  export class Metadata {
19
24
  public any: boolean;
@@ -23,7 +28,7 @@ export class Metadata {
23
28
  public functional: boolean;
24
29
 
25
30
  public escaped: MetadataEscaped | null;
26
- public atomics: Atomic.Literal[];
31
+ public atomics: IMetadataAtomic[];
27
32
  public constants: MetadataConstant[];
28
33
  public templates: Metadata[][];
29
34
 
@@ -115,16 +120,22 @@ export class Metadata {
115
120
  nullable: this.nullable,
116
121
  functional: this.functional,
117
122
 
118
- atomics: this.atomics.slice(),
119
- constants: JSON.parse(JSON.stringify(this.constants)),
123
+ atomics: $clone(this.atomics),
124
+ constants: $clone(this.constants),
120
125
  templates: this.templates.map((tpl) =>
121
126
  tpl.map((meta) => meta.toJSON()),
122
127
  ),
123
128
  escaped: this.escaped ? this.escaped.toJSON() : null,
124
129
 
125
130
  rest: this.rest ? this.rest.toJSON() : null,
126
- arrays: this.arrays.map((array) => array.name),
127
- tuples: this.tuples.map((tuple) => tuple.name),
131
+ arrays: this.arrays.map((array) => ({
132
+ name: array.type.name,
133
+ tags: $clone(array.tags),
134
+ })),
135
+ tuples: this.tuples.map((tuple) => ({
136
+ name: tuple.type.name,
137
+ tags: $clone(tuple.tags),
138
+ })),
128
139
  objects: this.objects.map((obj) => obj.name),
129
140
  aliases: this.aliases.map((alias) => alias.name),
130
141
 
@@ -157,13 +168,13 @@ export class Metadata {
157
168
  arrays: new Map(
158
169
  collection.arrays.map((arr) => [
159
170
  arr.name,
160
- MetadataArray._From_without_value(arr),
171
+ MetadataArrayType._From_without_value(arr),
161
172
  ]),
162
173
  ),
163
174
  tuples: new Map(
164
175
  collection.tuples.map((tpl) => [
165
176
  tpl.name,
166
- MetadataTuple._From_without_elements(tpl),
177
+ MetadataTupleType._From_without_elements(tpl),
167
178
  ]),
168
179
  ),
169
180
  };
@@ -204,8 +215,8 @@ export class Metadata {
204
215
  nullable: meta.nullable,
205
216
  functional: meta.functional,
206
217
 
207
- constants: JSON.parse(JSON.stringify(meta.constants)),
208
- atomics: meta.atomics.slice(),
218
+ constants: $clone(meta.constants),
219
+ atomics: $clone(meta.atomics),
209
220
  templates: meta.templates.map((tpl) =>
210
221
  tpl.map((meta) => this._From(meta, dict)),
211
222
  ),
@@ -214,21 +225,27 @@ export class Metadata {
214
225
  : null,
215
226
 
216
227
  rest: meta.rest ? this._From(meta.rest, dict) : null,
217
- arrays: meta.arrays.map((id) => {
218
- const array = dict.arrays.get(id);
219
- if (array === undefined)
228
+ arrays: meta.arrays.map((ref) => {
229
+ const type = dict.arrays.get(ref.name);
230
+ if (type === undefined)
220
231
  throw new Error(
221
- `Error on Metadata.from(): failed to find array "${id}".`,
232
+ `Error on Metadata.from(): failed to find array "${ref.name}".`,
222
233
  );
223
- return array;
234
+ return MetadataArray.create({
235
+ type,
236
+ tags: $clone(ref.tags),
237
+ });
224
238
  }),
225
- tuples: meta.tuples.map((id) => {
226
- const tuple = dict.tuples.get(id);
227
- if (tuple === undefined)
239
+ tuples: meta.tuples.map((t) => {
240
+ const type = dict.tuples.get(t.name);
241
+ if (type === undefined)
228
242
  throw new Error(
229
- `Error on Metadata.from(): failed to find tuple "${id}".`,
243
+ `Error on Metadata.from(): failed to find tuple "${t.name}".`,
230
244
  );
231
- return tuple;
245
+ return MetadataTuple.create({
246
+ type,
247
+ tags: $clone(t.tags),
248
+ });
232
249
  }),
233
250
  objects: meta.objects.map((name) => {
234
251
  const found = dict.objects.get(name);
@@ -294,8 +311,8 @@ export class Metadata {
294
311
  */
295
312
  public binarySize(): number {
296
313
  return (
297
- new Set([
298
- ...this.atomics,
314
+ new Set<string>([
315
+ ...this.atomics.map((a) => a.type),
299
316
  ...this.constants.map((c) => c.type),
300
317
  ...(this.templates.length ? ["string"] : []),
301
318
  ]).size +
@@ -403,7 +420,7 @@ export namespace Metadata {
403
420
  //----
404
421
  // ATOMICS
405
422
  for (const atomic of x.atomics)
406
- if (y.atomics.includes(atomic)) return true;
423
+ if (y.atomics.some((ya) => atomic.type === ya.type)) return true;
407
424
 
408
425
  // CONSTANTS
409
426
  for (const constant of x.constants) {
@@ -440,7 +457,7 @@ export namespace Metadata {
440
457
  for (const ya of y.arrays)
441
458
  if (
442
459
  !x.arrays.some((xa) =>
443
- covers(xa.value, ya.value, level + 1),
460
+ covers(xa.type.value, ya.type.value, level + 1),
444
461
  )
445
462
  ) {
446
463
  return false;
@@ -449,14 +466,15 @@ export namespace Metadata {
449
466
  // TUPLES
450
467
  for (const yt of y.tuples)
451
468
  if (
452
- yt.elements.length !== 0 &&
469
+ yt.type.elements.length !== 0 &&
453
470
  x.tuples.some(
454
471
  (xt) =>
455
- xt.elements.length >= yt.elements.length &&
456
- xt.elements
457
- .slice(yt.elements.length)
472
+ xt.type.elements.length >=
473
+ yt.type.elements.length &&
474
+ xt.type.elements
475
+ .slice(yt.type.elements.length)
458
476
  .every((xv, i) =>
459
- covers(xv, yt.elements[i]!, level + 1),
477
+ covers(xv, yt.type.elements[i]!, level + 1),
460
478
  ),
461
479
  ) === false
462
480
  )
@@ -485,12 +503,16 @@ export namespace Metadata {
485
503
  // VALUES
486
504
  //----
487
505
  // ATOMICS
488
- if (y.atomics.some((atomic) => x.atomics.includes(atomic) === false))
506
+ if (
507
+ y.atomics.some(
508
+ (ya) => x.atomics.some((xa) => xa.type === ya.type) === false,
509
+ )
510
+ )
489
511
  return false;
490
512
 
491
513
  // CONSTANTS
492
514
  for (const yc of y.constants) {
493
- if (x.atomics.some((type) => yc.type === type)) continue;
515
+ if (x.atomics.some((atom) => yc.type === atom.type)) continue;
494
516
  const xc: MetadataConstant | undefined = x.constants.find(
495
517
  (elem) => elem.type === yc.type,
496
518
  );
@@ -523,8 +545,7 @@ export namespace Metadata {
523
545
 
524
546
  escaped:
525
547
  x.escaped !== null && y.escaped !== null
526
- ? //? merge(x.resolved, y.resolved)
527
- MetadataEscaped.create({
548
+ ? MetadataEscaped.create({
528
549
  original: merge(
529
550
  x.escaped.original,
530
551
  y.escaped.original,
@@ -532,7 +553,11 @@ export namespace Metadata {
532
553
  returns: merge(x.escaped.returns, y.escaped.returns),
533
554
  })
534
555
  : x.escaped ?? y.escaped,
535
- atomics: [...new Set([...x.atomics, ...y.atomics])],
556
+ atomics: mergeTaggedTypes({
557
+ container: x.atomics,
558
+ equals: (x, y) => x.type === y.type,
559
+ getter: (x) => x.tags,
560
+ })(y.atomics),
536
561
  constants: [...x.constants],
537
562
  templates: x.templates.slice(),
538
563
 
@@ -540,8 +565,17 @@ export namespace Metadata {
540
565
  x.rest !== null && y.rest !== null
541
566
  ? merge(x.rest, y.rest)
542
567
  : x.rest ?? y.rest,
543
- arrays: x.arrays.slice(),
544
- tuples: x.tuples.slice(),
568
+ // arrays: x.arrays.slice(),
569
+ arrays: mergeTaggedTypes({
570
+ container: x.arrays,
571
+ equals: (x, y) => x.type.name === y.type.name,
572
+ getter: (x) => x.tags,
573
+ })(y.arrays),
574
+ tuples: mergeTaggedTypes({
575
+ container: x.tuples,
576
+ equals: (x, y) => x.type.name === y.type.name,
577
+ getter: (x) => x.tags,
578
+ })(y.tuples),
545
579
  objects: x.objects.slice(),
546
580
  aliases: x.aliases.slice(),
547
581
 
@@ -561,10 +595,6 @@ export namespace Metadata {
561
595
  for (const value of constant.values)
562
596
  ArrayUtil.add(target.values, value);
563
597
  }
564
- for (const array of y.arrays)
565
- ArrayUtil.set(output.arrays, array, (elem) => elem.name);
566
- for (const tuple of y.tuples)
567
- ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
568
598
  for (const obj of y.objects)
569
599
  ArrayUtil.set(output.objects, obj, (elem) => elem.name);
570
600
  for (const alias of y.aliases)
@@ -584,8 +614,8 @@ const getName = (metadata: Metadata): string => {
584
614
  if (metadata.isRequired() === false) elements.push("undefined");
585
615
 
586
616
  // ATOMIC
587
- for (const type of metadata.atomics) {
588
- elements.push(type);
617
+ for (const atom of metadata.atomics) {
618
+ elements.push(atom.type);
589
619
  }
590
620
  for (const constant of metadata.constants)
591
621
  for (const value of constant.values)
@@ -613,8 +643,8 @@ const getName = (metadata: Metadata): string => {
613
643
 
614
644
  // INSTANCES
615
645
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
616
- for (const tuple of metadata.tuples) elements.push(tuple.name);
617
- for (const array of metadata.arrays) elements.push(array.name);
646
+ for (const tuple of metadata.tuples) elements.push(tuple.type.name);
647
+ for (const array of metadata.arrays) elements.push(array.type.name);
618
648
  for (const object of metadata.objects) elements.push(object.name);
619
649
  for (const alias of metadata.aliases) elements.push(alias.name);
620
650
  if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
@@ -632,3 +662,38 @@ export namespace Metadata {
632
662
  value: Metadata;
633
663
  }
634
664
  }
665
+
666
+ const mergeTaggedTypes =
667
+ <T>(props: {
668
+ container: T[];
669
+ equals: (x: T, y: T) => boolean;
670
+ getter: (x: T) => IMetadataTypeTag[][];
671
+ }) =>
672
+ (opposite: T[]) => {
673
+ const output: T[] = [...props.container];
674
+ for (const elem of opposite) {
675
+ const equal = props.container.find((x) => props.equals(x, elem));
676
+ if (equal === undefined) {
677
+ output.push(elem);
678
+ continue;
679
+ }
680
+
681
+ const matrix: string[][] = props
682
+ .getter(equal)
683
+ .map((tags) => tags.map((t) => t.name))
684
+ .sort();
685
+ for (const tags of props.getter(elem)) {
686
+ const names: string[] = tags.map((t) => t.name).sort();
687
+ if (
688
+ matrix.some(
689
+ (m) =>
690
+ m.length === names.length &&
691
+ m.every((s, i) => s === names[i]),
692
+ )
693
+ )
694
+ continue;
695
+ props.getter(equal).push(tags);
696
+ }
697
+ }
698
+ return output;
699
+ };
@@ -2,14 +2,14 @@ import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
4
  import { IMetadataAlias } from "./IMetadataAlias";
5
- import { IMetadataTag } from "./IMetadataTag";
5
+ import { IMetadataCommentTag } from "./IMetadataCommentTag";
6
6
  import { Metadata } from "./Metadata";
7
7
 
8
8
  export class MetadataAlias {
9
9
  public readonly name: string;
10
10
  public readonly value: Metadata;
11
11
  public readonly description: string | null;
12
- public readonly tags: IMetadataTag[];
12
+ public readonly tags: IMetadataCommentTag[];
13
13
  public readonly jsDocTags: IJsDocTagInfo[];
14
14
  public readonly recursive: boolean;
15
15
  public readonly nullables: boolean[];
@@ -1,55 +1,31 @@
1
+ import { $clone } from "../../functional/$clone";
2
+
1
3
  import { ClassProperties } from "../../typings/ClassProperties";
2
4
 
3
5
  import { IMetadataArray } from "./IMetadataArray";
4
- import { Metadata } from "./Metadata";
6
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
7
+ import { MetadataArrayType } from "./MetadataArrayType";
5
8
 
6
9
  export class MetadataArray {
7
- public readonly name: string;
8
- public readonly value: Metadata;
9
- public readonly nullables: boolean[];
10
- public readonly recursive: boolean;
11
- public readonly index: number | null;
10
+ public readonly type: MetadataArrayType;
11
+ public readonly tags: IMetadataTypeTag[][];
12
12
 
13
13
  /**
14
14
  * @hidden
15
15
  */
16
16
  private constructor(props: ClassProperties<MetadataArray>) {
17
- this.name = props.name;
18
- this.value = props.value;
19
- this.index = props.index;
20
- this.recursive = props.recursive;
21
- this.nullables = props.nullables;
17
+ this.type = props.type;
18
+ this.tags = props.tags;
22
19
  }
23
20
 
24
- /**
25
- * @internal
26
- */
27
- public static _From_without_value(
28
- props: Omit<IMetadataArray, "value">,
29
- ): MetadataArray {
30
- return this.create({
31
- name: props.name,
32
- value: null!,
33
- index: props.index,
34
- recursive: props.recursive,
35
- nullables: props.nullables,
36
- });
37
- }
38
-
39
- /**
40
- * @internal
41
- */
42
21
  public static create(props: ClassProperties<MetadataArray>): MetadataArray {
43
22
  return new MetadataArray(props);
44
23
  }
45
24
 
46
25
  public toJSON(): IMetadataArray {
47
26
  return {
48
- name: this.name,
49
- value: this.value.toJSON(),
50
- nullables: this.nullables,
51
- recursive: this.recursive,
52
- index: this.index,
27
+ type: this.type.toJSON(),
28
+ tags: $clone(this.tags),
53
29
  };
54
30
  }
55
31
  }
@@ -0,0 +1,57 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataArrayType } from "./IMetadataArrayType";
4
+ import { Metadata } from "./Metadata";
5
+
6
+ export class MetadataArrayType {
7
+ public readonly name: string;
8
+ public readonly value: Metadata;
9
+ public readonly nullables: boolean[];
10
+ public readonly recursive: boolean;
11
+ public readonly index: number | null;
12
+
13
+ /**
14
+ * @hidden
15
+ */
16
+ private constructor(props: ClassProperties<MetadataArrayType>) {
17
+ this.name = props.name;
18
+ this.value = props.value;
19
+ this.index = props.index;
20
+ this.recursive = props.recursive;
21
+ this.nullables = props.nullables;
22
+ }
23
+
24
+ /**
25
+ * @internal
26
+ */
27
+ public static _From_without_value(
28
+ props: Omit<IMetadataArrayType, "value">,
29
+ ): MetadataArrayType {
30
+ return this.create({
31
+ name: props.name,
32
+ value: null!,
33
+ index: props.index,
34
+ recursive: props.recursive,
35
+ nullables: props.nullables,
36
+ });
37
+ }
38
+
39
+ /**
40
+ * @internal
41
+ */
42
+ public static create(
43
+ props: ClassProperties<MetadataArrayType>,
44
+ ): MetadataArrayType {
45
+ return new MetadataArrayType(props);
46
+ }
47
+
48
+ public toJSON(): IMetadataArrayType {
49
+ return {
50
+ name: this.name,
51
+ value: this.value.toJSON(),
52
+ nullables: this.nullables,
53
+ recursive: this.recursive,
54
+ index: this.index,
55
+ };
56
+ }
57
+ }
@@ -1,16 +1,16 @@
1
1
  import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
+ import { IMetadataCommentTag } from "./IMetadataCommentTag";
4
5
  import { IMetadataDictionary } from "./IMetadataDictionary";
5
6
  import { IMetadataProperty } from "./IMetadataProperty";
6
- import { IMetadataTag } from "./IMetadataTag";
7
7
  import { Metadata } from "./Metadata";
8
8
 
9
9
  export class MetadataProperty {
10
10
  public readonly key: Metadata;
11
11
  public readonly value: Metadata;
12
12
  public readonly description: string | null;
13
- public readonly tags: IMetadataTag[];
13
+ public readonly tags: IMetadataCommentTag[];
14
14
  public readonly jsDocTags: IJsDocTagInfo[];
15
15
 
16
16
  /* -----------------------------------------------------------
@@ -1,45 +1,21 @@
1
+ import { $clone } from "../../functional/$clone";
2
+
1
3
  import { ClassProperties } from "../../typings/ClassProperties";
2
4
 
3
5
  import { IMetadataTuple } from "./IMetadataTuple";
4
- import { Metadata } from "./Metadata";
6
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
7
+ import { MetadataTupleType } from "./MetadataTupleType";
5
8
 
6
9
  export class MetadataTuple {
7
- public readonly name: string;
8
- public readonly elements: Metadata[];
9
-
10
- public readonly index: number | null;
11
- public readonly recursive: boolean;
12
- public readonly nullables: boolean[];
13
-
14
- /**
15
- * @internal
16
- */
17
- public of_map?: boolean;
10
+ public readonly type: MetadataTupleType;
11
+ public readonly tags: IMetadataTypeTag[][];
18
12
 
19
13
  /**
20
14
  * @internal
21
15
  */
22
16
  private constructor(props: ClassProperties<MetadataTuple>) {
23
- this.name = props.name;
24
- this.elements = props.elements;
25
- this.index = props.index;
26
- this.recursive = props.recursive;
27
- this.nullables = props.nullables;
28
- }
29
-
30
- /**
31
- * @internal
32
- */
33
- public static _From_without_elements(
34
- props: Omit<IMetadataTuple, "elements">,
35
- ): MetadataTuple {
36
- return this.create({
37
- name: props.name,
38
- index: props.index,
39
- elements: null!,
40
- recursive: props.recursive,
41
- nullables: props.nullables.slice(),
42
- });
17
+ this.type = props.type;
18
+ this.tags = props.tags;
43
19
  }
44
20
 
45
21
  public static create(props: ClassProperties<MetadataTuple>): MetadataTuple {
@@ -48,11 +24,8 @@ export class MetadataTuple {
48
24
 
49
25
  public toJSON(): IMetadataTuple {
50
26
  return {
51
- name: this.name,
52
- index: this.index,
53
- elements: this.elements.map((elem) => elem.toJSON()),
54
- recursive: this.recursive,
55
- nullables: this.nullables.slice(),
27
+ type: this.type.toJSON(),
28
+ tags: $clone(this.tags),
56
29
  };
57
30
  }
58
31
  }
@@ -0,0 +1,67 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataTupleType } from "./IMetadataTupleType";
4
+ import { Metadata } from "./Metadata";
5
+
6
+ export class MetadataTupleType {
7
+ public readonly name: string;
8
+ public readonly elements: Metadata[];
9
+
10
+ public readonly index: number | null;
11
+ public readonly recursive: boolean;
12
+ public readonly nullables: boolean[];
13
+
14
+ /**
15
+ * @internal
16
+ */
17
+ public of_map?: boolean;
18
+
19
+ /**
20
+ * @internal
21
+ */
22
+ private constructor(props: ClassProperties<MetadataTupleType>) {
23
+ this.name = props.name;
24
+ this.elements = props.elements;
25
+ this.index = props.index;
26
+ this.recursive = props.recursive;
27
+ this.nullables = props.nullables;
28
+ }
29
+
30
+ /**
31
+ * @internal
32
+ */
33
+ public static _From_without_elements(
34
+ props: Omit<IMetadataTupleType, "elements">,
35
+ ): MetadataTupleType {
36
+ return this.create({
37
+ name: props.name,
38
+ index: props.index,
39
+ elements: null!,
40
+ recursive: props.recursive,
41
+ nullables: props.nullables.slice(),
42
+ });
43
+ }
44
+
45
+ public static create(
46
+ props: ClassProperties<MetadataTupleType>,
47
+ ): MetadataTupleType {
48
+ return new MetadataTupleType(props);
49
+ }
50
+
51
+ public isRest(): boolean {
52
+ return (
53
+ this.elements.length > 0 &&
54
+ this.elements[this.elements.length - 1]!.rest !== null
55
+ );
56
+ }
57
+
58
+ public toJSON(): IMetadataTupleType {
59
+ return {
60
+ name: this.name,
61
+ index: this.index,
62
+ elements: this.elements.map((elem) => elem.toJSON()),
63
+ recursive: this.recursive,
64
+ nullables: this.nullables.slice(),
65
+ };
66
+ }
67
+ }
@@ -0,0 +1,8 @@
1
+ export type ExclusiveMaximum<Fixed extends number | bigint> = {
2
+ "typia.tag"?: {
3
+ target: Fixed extends number ? "number" : "bigint";
4
+ kind: "exclusiveMaximum";
5
+ value: Fixed;
6
+ validate?: `$input < ${Fixed}`;
7
+ };
8
+ };
@@ -0,0 +1,8 @@
1
+ export type ExclusiveMinimum<Fixed extends number | bigint> = {
2
+ "typia.tag"?: {
3
+ target: Fixed extends number ? "number" : "bigint";
4
+ kind: "exclusiveMinimum";
5
+ value: Fixed;
6
+ validate?: `${Fixed} < $input`;
7
+ };
8
+ };
@@ -0,0 +1,29 @@
1
+ export type Format<
2
+ Value extends
3
+ | "email"
4
+ | "uuid"
5
+ | "ipv4"
6
+ | "ipv6"
7
+ | "url"
8
+ | "date"
9
+ | "date-time",
10
+ > = {
11
+ "typia.tag"?: {
12
+ target: "string";
13
+ kind: "format";
14
+ value: Value;
15
+ validate: Value extends "email"
16
+ ? `/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test($input)`
17
+ : Value extends "uuid"
18
+ ? `/^(?:[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)`
19
+ : Value extends "ipv4"
20
+ ? `/^(?: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)`
21
+ : Value extends "ipv6"
22
+ ? `/^(([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)`
23
+ : Value extends "url"
24
+ ? `/^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)`
25
+ : Value extends "date"
26
+ ? `/^(\d{4})-(\d{2})-(\d{2})$/.test($input)`
27
+ : `!isNaN(new Date($input).getTime())`;
28
+ };
29
+ };
@@ -0,0 +1,8 @@
1
+ export type MaxItems<Size extends number> = {
2
+ "typia.tag"?: {
3
+ target: "array";
4
+ kind: "maxItems";
5
+ value: Size;
6
+ validate: `$input.length <= ${Size}`;
7
+ };
8
+ };
@@ -0,0 +1,8 @@
1
+ export type MaxLength<Fixed extends number> = {
2
+ "typia.tag"?: {
3
+ target: "array";
4
+ kind: "maxLength";
5
+ value: number;
6
+ validate: `$input.length <= ${Fixed}`;
7
+ };
8
+ };