typia 5.0.0-dev.20230824 → 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 (292) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/factories/ExpressionFactory.d.ts +1 -1
  4. package/lib/factories/ExpressionFactory.js +1 -1
  5. package/lib/factories/ExpressionFactory.js.map +1 -1
  6. package/lib/factories/LiteralFactory.js +6 -2
  7. package/lib/factories/LiteralFactory.js.map +1 -1
  8. package/lib/factories/MetadataCollection.js +0 -1
  9. package/lib/factories/MetadataCollection.js.map +1 -1
  10. package/lib/factories/MetadataCommentTagFactory.js +532 -0
  11. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  12. package/lib/factories/MetadataTypeTagFactory.d.ts +6 -0
  13. package/lib/factories/MetadataTypeTagFactory.js +207 -0
  14. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  15. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  16. package/lib/factories/NumericRangeFactory.js +34 -0
  17. package/lib/factories/NumericRangeFactory.js.map +1 -0
  18. package/lib/factories/ProtobufFactory.js +41 -10
  19. package/lib/factories/ProtobufFactory.js.map +1 -1
  20. package/lib/factories/internal/metadata/emend_metadata_atomics.js +7 -1
  21. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_alias.js +1 -13
  23. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  24. package/lib/factories/internal/metadata/emplace_metadata_object.js +0 -1
  25. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  27. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +3 -4
  29. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -6
  31. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  32. package/lib/functional/Namespace.js +0 -16
  33. package/lib/functional/Namespace.js.map +1 -1
  34. package/lib/programmers/AssertProgrammer.js +28 -8
  35. package/lib/programmers/AssertProgrammer.js.map +1 -1
  36. package/lib/programmers/CheckerProgrammer.js +65 -52
  37. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  38. package/lib/programmers/FeatureProgrammer.d.ts +3 -5
  39. package/lib/programmers/FeatureProgrammer.js +6 -6
  40. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  41. package/lib/programmers/IsProgrammer.d.ts +1 -1
  42. package/lib/programmers/IsProgrammer.js +32 -19
  43. package/lib/programmers/IsProgrammer.js.map +1 -1
  44. package/lib/programmers/RandomProgrammer.js +155 -135
  45. package/lib/programmers/RandomProgrammer.js.map +1 -1
  46. package/lib/programmers/ValidateProgrammer.js +28 -8
  47. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  48. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  49. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  50. package/lib/programmers/helpers/ICheckEntry.d.ts +3 -2
  51. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  52. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  53. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  54. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  55. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  56. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  57. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  58. package/lib/programmers/helpers/RandomRanger.js +13 -33
  59. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  60. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  61. package/lib/programmers/helpers/UnionExplorer.js +6 -6
  62. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  63. package/lib/programmers/internal/application_alias.js +0 -1
  64. package/lib/programmers/internal/application_alias.js.map +1 -1
  65. package/lib/programmers/internal/application_array.js +60 -20
  66. package/lib/programmers/internal/application_array.js.map +1 -1
  67. package/lib/programmers/internal/application_number.js +95 -69
  68. package/lib/programmers/internal/application_number.js.map +1 -1
  69. package/lib/programmers/internal/application_object.js +0 -3
  70. package/lib/programmers/internal/application_object.js.map +1 -1
  71. package/lib/programmers/internal/application_schema.js +37 -20
  72. package/lib/programmers/internal/application_schema.js.map +1 -1
  73. package/lib/programmers/internal/application_string.js +56 -22
  74. package/lib/programmers/internal/application_string.js.map +1 -1
  75. package/lib/programmers/internal/check_array_length.js +25 -25
  76. package/lib/programmers/internal/check_array_length.js.map +1 -1
  77. package/lib/programmers/internal/check_bigint.js +13 -116
  78. package/lib/programmers/internal/check_bigint.js.map +1 -1
  79. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  80. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  81. package/lib/programmers/internal/check_number.js +62 -163
  82. package/lib/programmers/internal/check_number.js.map +1 -1
  83. package/lib/programmers/internal/check_string.js +16 -52
  84. package/lib/programmers/internal/check_string.js.map +1 -1
  85. package/lib/programmers/internal/check_template.js +16 -1
  86. package/lib/programmers/internal/check_template.js.map +1 -1
  87. package/lib/programmers/internal/check_union_array_like.js +4 -4
  88. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  89. package/lib/programmers/internal/feature_object_entries.js +1 -1
  90. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  91. package/lib/programmers/internal/random_custom.js +2 -2
  92. package/lib/programmers/internal/random_custom.js.map +1 -1
  93. package/lib/programmers/json/JsonStringifyProgrammer.js +21 -16
  94. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  95. package/lib/programmers/misc/MiscCloneProgrammer.js +13 -9
  96. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  97. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  98. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  99. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  100. package/lib/programmers/misc/MiscPruneProgrammer.js +10 -6
  101. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  102. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +24 -44
  103. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  104. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  105. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  106. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  107. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  108. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  109. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  110. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  111. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -0
  112. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  113. package/lib/schemas/metadata/Metadata.js +25 -25
  114. package/lib/schemas/metadata/Metadata.js.map +1 -1
  115. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  116. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  117. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  118. package/lib/schemas/metadata/MetadataArray.d.ts +2 -0
  119. package/lib/schemas/metadata/MetadataArray.js +45 -2
  120. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  121. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  122. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  123. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  124. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  125. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  126. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  127. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -2
  128. package/lib/schemas/metadata/MetadataTuple.js +1 -2
  129. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  130. package/lib/tags/ExclusiveMaximum.d.ts +10 -8
  131. package/lib/tags/ExclusiveMinimum.d.ts +10 -8
  132. package/lib/tags/Format.d.ts +8 -8
  133. package/lib/tags/MaxItems.d.ts +8 -8
  134. package/lib/tags/MaxLength.d.ts +8 -8
  135. package/lib/tags/Maximum.d.ts +10 -8
  136. package/lib/tags/MinItems.d.ts +8 -8
  137. package/lib/tags/MinLength.d.ts +8 -8
  138. package/lib/tags/Minimum.d.ts +10 -8
  139. package/lib/tags/MultipleOf.d.ts +10 -8
  140. package/lib/tags/Pattern.d.ts +7 -8
  141. package/lib/tags/TagBase.d.ts +10 -6
  142. package/lib/tags/Type.d.ts +14 -13
  143. package/lib/tags/index.d.ts +1 -0
  144. package/lib/tags/index.js +1 -0
  145. package/lib/tags/index.js.map +1 -1
  146. package/lib/transformers/FileTransformer.js +3 -1
  147. package/lib/transformers/FileTransformer.js.map +1 -1
  148. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  149. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  150. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  151. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  152. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  153. package/lib/{schemas/metadata/ICommentTag.js → typings/ProtobufAtomic.js} +1 -1
  154. package/lib/typings/ProtobufAtomic.js.map +1 -0
  155. package/package.json +2 -2
  156. package/src/IRandomGenerator.ts +4 -3
  157. package/src/factories/ExpressionFactory.ts +2 -2
  158. package/src/factories/LiteralFactory.ts +10 -3
  159. package/src/factories/MetadataCollection.ts +0 -1
  160. package/src/factories/MetadataCommentTagFactory.ts +583 -0
  161. package/src/factories/MetadataTypeTagFactory.ts +263 -0
  162. package/src/factories/NumericRangeFactory.ts +33 -0
  163. package/src/factories/ProtobufFactory.ts +27 -13
  164. package/src/factories/internal/metadata/emend_metadata_atomics.ts +6 -1
  165. package/src/factories/internal/metadata/emplace_metadata_alias.ts +0 -6
  166. package/src/factories/internal/metadata/emplace_metadata_object.ts +0 -1
  167. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +2 -1
  168. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +3 -7
  169. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +13 -10
  170. package/src/functional/Namespace.ts +0 -16
  171. package/src/programmers/AssertProgrammer.ts +57 -21
  172. package/src/programmers/CheckerProgrammer.ts +43 -118
  173. package/src/programmers/FeatureProgrammer.ts +11 -33
  174. package/src/programmers/IsProgrammer.ts +52 -41
  175. package/src/programmers/RandomProgrammer.ts +206 -226
  176. package/src/programmers/ValidateProgrammer.ts +60 -21
  177. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  178. package/src/programmers/helpers/ICheckEntry.ts +3 -2
  179. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  180. package/src/programmers/helpers/RandomJoiner.ts +11 -37
  181. package/src/programmers/helpers/RandomRanger.ts +16 -51
  182. package/src/programmers/helpers/UnionExplorer.ts +1 -20
  183. package/src/programmers/internal/application_alias.ts +0 -1
  184. package/src/programmers/internal/application_array.ts +32 -10
  185. package/src/programmers/internal/application_number.ts +76 -70
  186. package/src/programmers/internal/application_object.ts +0 -3
  187. package/src/programmers/internal/application_schema.ts +36 -18
  188. package/src/programmers/internal/application_string.ts +33 -27
  189. package/src/programmers/internal/check_array_length.ts +34 -28
  190. package/src/programmers/internal/check_bigint.ts +25 -118
  191. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  192. package/src/programmers/internal/check_number.ts +81 -261
  193. package/src/programmers/internal/check_string.ts +28 -39
  194. package/src/programmers/internal/check_template.ts +17 -1
  195. package/src/programmers/internal/check_union_array_like.ts +1 -16
  196. package/src/programmers/internal/feature_object_entries.ts +12 -18
  197. package/src/programmers/internal/random_custom.ts +3 -3
  198. package/src/programmers/json/JsonStringifyProgrammer.ts +25 -36
  199. package/src/programmers/misc/MiscCloneProgrammer.ts +10 -24
  200. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  201. package/src/programmers/misc/MiscPruneProgrammer.ts +8 -18
  202. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +34 -68
  203. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +153 -98
  204. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  205. package/src/schemas/json/IJsonSchema.ts +11 -38
  206. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  207. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  208. package/src/schemas/metadata/IMetadataTypeTag.ts +2 -0
  209. package/src/schemas/metadata/Metadata.ts +28 -42
  210. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  211. package/src/schemas/metadata/MetadataArray.ts +21 -3
  212. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  213. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  214. package/src/schemas/metadata/MetadataTuple.ts +5 -4
  215. package/src/tags/ExclusiveMaximum.ts +13 -8
  216. package/src/tags/ExclusiveMinimum.ts +13 -8
  217. package/src/tags/Format.ts +21 -20
  218. package/src/tags/MaxItems.ts +9 -8
  219. package/src/tags/MaxLength.ts +9 -8
  220. package/src/tags/Maximum.ts +13 -8
  221. package/src/tags/MinItems.ts +9 -8
  222. package/src/tags/MinLength.ts +9 -8
  223. package/src/tags/Minimum.ts +13 -8
  224. package/src/tags/MultipleOf.ts +15 -10
  225. package/src/tags/Pattern.ts +8 -8
  226. package/src/tags/TagBase.ts +18 -13
  227. package/src/tags/Type.ts +26 -29
  228. package/src/tags/index.ts +1 -0
  229. package/src/transformers/FileTransformer.ts +4 -4
  230. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  231. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  232. package/src/typings/ProtobufAtomic.ts +19 -0
  233. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  234. package/lib/factories/MetadataTagFactory.js +0 -312
  235. package/lib/factories/MetadataTagFactory.js.map +0 -1
  236. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +0 -3
  237. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +0 -157
  238. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +0 -1
  239. package/lib/functional/$is_custom.d.ts +0 -2
  240. package/lib/functional/$is_custom.js +0 -13
  241. package/lib/functional/$is_custom.js.map +0 -1
  242. package/lib/functional/$is_date.d.ts +0 -1
  243. package/lib/functional/$is_date.js +0 -7
  244. package/lib/functional/$is_date.js.map +0 -1
  245. package/lib/functional/$is_datetime.d.ts +0 -1
  246. package/lib/functional/$is_datetime.js +0 -8
  247. package/lib/functional/$is_datetime.js.map +0 -1
  248. package/lib/functional/$is_email.d.ts +0 -1
  249. package/lib/functional/$is_email.js +0 -7
  250. package/lib/functional/$is_email.js.map +0 -1
  251. package/lib/functional/$is_ipv4.d.ts +0 -1
  252. package/lib/functional/$is_ipv4.js +0 -7
  253. package/lib/functional/$is_ipv4.js.map +0 -1
  254. package/lib/functional/$is_ipv6.d.ts +0 -1
  255. package/lib/functional/$is_ipv6.js +0 -7
  256. package/lib/functional/$is_ipv6.js.map +0 -1
  257. package/lib/functional/$is_url.d.ts +0 -1
  258. package/lib/functional/$is_url.js +0 -7
  259. package/lib/functional/$is_url.js.map +0 -1
  260. package/lib/functional/$is_uuid.d.ts +0 -1
  261. package/lib/functional/$is_uuid.js +0 -7
  262. package/lib/functional/$is_uuid.js.map +0 -1
  263. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  264. package/lib/programmers/internal/check_array_tags.js +0 -39
  265. package/lib/programmers/internal/check_array_tags.js.map +0 -1
  266. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  267. package/lib/programmers/internal/check_string_tags.js +0 -89
  268. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  269. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  270. package/lib/programmers/internal/get_comment_tags.js +0 -25
  271. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  272. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  273. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  274. package/lib/schemas/metadata/IMetadataCommentTag.d.ts +0 -63
  275. package/lib/schemas/metadata/IMetadataCommentTag.js +0 -3
  276. package/lib/schemas/metadata/IMetadataCommentTag.js.map +0 -1
  277. package/src/factories/MetadataTagFactory.ts +0 -365
  278. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +0 -183
  279. package/src/functional/$is_custom.ts +0 -14
  280. package/src/functional/$is_date.ts +0 -3
  281. package/src/functional/$is_datetime.ts +0 -2
  282. package/src/functional/$is_email.ts +0 -4
  283. package/src/functional/$is_ipv4.ts +0 -4
  284. package/src/functional/$is_ipv6.ts +0 -4
  285. package/src/functional/$is_url.ts +0 -4
  286. package/src/functional/$is_uuid.ts +0 -4
  287. package/src/programmers/internal/check_array_tags.ts +0 -45
  288. package/src/programmers/internal/check_string_tags.ts +0 -67
  289. package/src/programmers/internal/get_comment_tags.ts +0 -23
  290. package/src/schemas/metadata/ICommentTag.ts +0 -4
  291. package/src/schemas/metadata/IMetadataCommentTag.ts +0 -112
  292. /package/lib/{programmers/internal/check_array_tags.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -1,18 +1,16 @@
1
- import { $clone } from "../../functional/$clone";
2
-
3
1
  import { ClassProperties } from "../../typings/ClassProperties";
4
2
  import { Writable } from "../../typings/Writable";
5
3
 
6
4
  import { ArrayUtil } from "../../utils/ArrayUtil";
7
5
 
8
6
  import { IMetadata } from "./IMetadata";
9
- import { IMetadataAtomic } from "./IMetadataAtomic";
10
7
  import { IMetadataCollection } from "./IMetadataCollection";
11
8
  import { IMetadataDictionary } from "./IMetadataDictionary";
12
9
  import { IMetadataTypeTag } from "./IMetadataTypeTag";
13
10
  import { MetadataAlias } from "./MetadataAlias";
14
11
  import { MetadataArray } from "./MetadataArray";
15
12
  import { MetadataArrayType } from "./MetadataArrayType";
13
+ import { MetadataAtomic } from "./MetadataAtomic";
16
14
  import { MetadataConstant } from "./MetadataConstant";
17
15
  import { MetadataEscaped } from "./MetadataEscaped";
18
16
  import { MetadataObject } from "./MetadataObject";
@@ -28,7 +26,7 @@ export class Metadata {
28
26
  public functional: boolean;
29
27
 
30
28
  public escaped: MetadataEscaped | null;
31
- public atomics: IMetadataAtomic[];
29
+ public atomics: MetadataAtomic[];
32
30
  public constants: MetadataConstant[];
33
31
  public templates: Metadata[][];
34
32
 
@@ -120,8 +118,16 @@ export class Metadata {
120
118
  nullable: this.nullable,
121
119
  functional: this.functional,
122
120
 
123
- atomics: $clone(this.atomics),
124
- constants: $clone(this.constants),
121
+ atomics: this.atomics.map((a) =>
122
+ MetadataAtomic.create({
123
+ type: a.type,
124
+ tags: a.tags.map((r) => r.slice()),
125
+ }),
126
+ ),
127
+ constants: this.constants.map((c) => ({
128
+ type: c.type,
129
+ values: c.values.slice() as any,
130
+ })),
125
131
  templates: this.templates.map((tpl) =>
126
132
  tpl.map((meta) => meta.toJSON()),
127
133
  ),
@@ -130,11 +136,11 @@ export class Metadata {
130
136
  rest: this.rest ? this.rest.toJSON() : null,
131
137
  arrays: this.arrays.map((array) => ({
132
138
  name: array.type.name,
133
- tags: $clone(array.tags),
139
+ tags: array.tags.map((r) => r.slice()),
134
140
  })),
135
141
  tuples: this.tuples.map((tuple) => ({
136
142
  name: tuple.type.name,
137
- tags: $clone(tuple.tags),
143
+ tags: tuple.tags.map((r) => r.slice()),
138
144
  })),
139
145
  objects: this.objects.map((obj) => obj.name),
140
146
  aliases: this.aliases.map((alias) => alias.name),
@@ -215,8 +221,10 @@ export class Metadata {
215
221
  nullable: meta.nullable,
216
222
  functional: meta.functional,
217
223
 
218
- constants: $clone(meta.constants),
219
- atomics: $clone(meta.atomics),
224
+ constants: meta.constants.slice(),
225
+ atomics: meta.atomics.map((a) =>
226
+ MetadataAtomic.create({ type: a.type, tags: a.tags }),
227
+ ),
220
228
  templates: meta.templates.map((tpl) =>
221
229
  tpl.map((meta) => this._From(meta, dict)),
222
230
  ),
@@ -233,7 +241,7 @@ export class Metadata {
233
241
  );
234
242
  return MetadataArray.create({
235
243
  type,
236
- tags: $clone(ref.tags),
244
+ tags: ref.tags.map((row) => row.slice()),
237
245
  });
238
246
  }),
239
247
  tuples: meta.tuples.map((t) => {
@@ -244,7 +252,7 @@ export class Metadata {
244
252
  );
245
253
  return MetadataTuple.create({
246
254
  type,
247
- tags: $clone(t.tags),
255
+ tags: t.tags.map((r) => r.slice()),
248
256
  });
249
257
  }),
250
258
  objects: meta.objects.map((name) => {
@@ -277,8 +285,7 @@ export class Metadata {
277
285
  ACCESSORS
278
286
  ----------------------------------------------------------- */
279
287
  public getName(): string {
280
- this.name_ ??= getName(this);
281
- return this.name_;
288
+ return (this.name_ ??= getName(this));
282
289
  }
283
290
 
284
291
  public empty(): boolean {
@@ -306,24 +313,6 @@ export class Metadata {
306
313
  );
307
314
  }
308
315
 
309
- /**
310
- * @internal
311
- */
312
- public binarySize(): number {
313
- return (
314
- new Set<string>([
315
- ...this.atomics.map((a) => a.type),
316
- ...this.constants.map((c) => c.type),
317
- ...(this.templates.length ? ["string"] : []),
318
- ]).size +
319
- this.arrays.length +
320
- this.tuples.length +
321
- this.natives.length +
322
- this.objects.length +
323
- this.maps.length
324
- );
325
- }
326
-
327
316
  public bucket(): number {
328
317
  return (
329
318
  (this.any ? 1 : 0) +
@@ -361,13 +350,6 @@ export class Metadata {
361
350
  return emended > 1;
362
351
  }
363
352
 
364
- /**
365
- * @internal
366
- */
367
- public isBinaryUnion(): boolean {
368
- return this.binarySize() > 1;
369
- }
370
-
371
353
  /**
372
354
  * @internal
373
355
  */
@@ -615,11 +597,15 @@ const getName = (metadata: Metadata): string => {
615
597
 
616
598
  // ATOMIC
617
599
  for (const atom of metadata.atomics) {
618
- elements.push(atom.type);
600
+ elements.push(atom.getName());
619
601
  }
620
602
  for (const constant of metadata.constants)
621
603
  for (const value of constant.values)
622
- elements.push(JSON.stringify(value));
604
+ elements.push(
605
+ constant.type === "string"
606
+ ? JSON.stringify(value)
607
+ : value.toString(),
608
+ );
623
609
  for (const template of metadata.templates)
624
610
  elements.push(
625
611
  "`" +
@@ -644,7 +630,7 @@ const getName = (metadata: Metadata): string => {
644
630
  // INSTANCES
645
631
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
646
632
  for (const tuple of metadata.tuples) elements.push(tuple.type.name);
647
- for (const array of metadata.arrays) elements.push(array.type.name);
633
+ for (const array of metadata.arrays) elements.push(array.getName());
648
634
  for (const object of metadata.objects) elements.push(object.name);
649
635
  for (const alias of metadata.aliases) elements.push(alias.name);
650
636
  if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
@@ -2,14 +2,12 @@ import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
4
  import { IMetadataAlias } from "./IMetadataAlias";
5
- import { IMetadataCommentTag } from "./IMetadataCommentTag";
6
5
  import { Metadata } from "./Metadata";
7
6
 
8
7
  export class MetadataAlias {
9
8
  public readonly name: string;
10
9
  public readonly value: Metadata;
11
10
  public readonly description: string | null;
12
- public readonly tags: IMetadataCommentTag[];
13
11
  public readonly jsDocTags: IJsDocTagInfo[];
14
12
  public readonly recursive: boolean;
15
13
  public readonly nullables: boolean[];
@@ -24,7 +22,6 @@ export class MetadataAlias {
24
22
  this.name = props.name;
25
23
  this.value = props.value;
26
24
  this.description = props.description;
27
- this.tags = props.tags;
28
25
  this.jsDocTags = props.jsDocTags;
29
26
  this.recursive = props.recursive;
30
27
  this.nullables = props.nullables;
@@ -46,7 +43,6 @@ export class MetadataAlias {
46
43
  value: null!,
47
44
  description: props.description,
48
45
  recursive: props.recursive,
49
- tags: props.tags.slice(),
50
46
  jsDocTags: props.jsDocTags.slice(),
51
47
  nullables: props.nullables.slice(),
52
48
  });
@@ -58,7 +54,6 @@ export class MetadataAlias {
58
54
  value: this.value.toJSON(),
59
55
  description: this.description,
60
56
  recursive: this.recursive,
61
- tags: this.tags.slice(),
62
57
  jsDocTags: this.jsDocTags.slice(),
63
58
  nullables: this.nullables.slice(),
64
59
  };
@@ -1,5 +1,3 @@
1
- import { $clone } from "../../functional/$clone";
2
-
3
1
  import { ClassProperties } from "../../typings/ClassProperties";
4
2
 
5
3
  import { IMetadataArray } from "./IMetadataArray";
@@ -10,6 +8,8 @@ export class MetadataArray {
10
8
  public readonly type: MetadataArrayType;
11
9
  public readonly tags: IMetadataTypeTag[][];
12
10
 
11
+ private name_?: string;
12
+
13
13
  /**
14
14
  * @hidden
15
15
  */
@@ -22,10 +22,28 @@ export class MetadataArray {
22
22
  return new MetadataArray(props);
23
23
  }
24
24
 
25
+ public getName(): string {
26
+ return (this.name_ ??= (() => {
27
+ if (this.tags.length === 0) return this.type.name;
28
+ else if (this.tags.length === 1) {
29
+ const str: string = [
30
+ this.type.name,
31
+ ...this.tags[0]!.map((t) => t.name),
32
+ ].join(" & ");
33
+ return `(${str})`;
34
+ }
35
+ const rows: string[] = this.tags.map((row) => {
36
+ const str: string = row.map((t) => t.name).join(" & ");
37
+ return row.length === 1 ? str : `(${str})`;
38
+ });
39
+ return `(${this.type.name} & (${rows.join(" | ")}))`;
40
+ })());
41
+ }
42
+
25
43
  public toJSON(): IMetadataArray {
26
44
  return {
27
45
  type: this.type.toJSON(),
28
- tags: $clone(this.tags),
46
+ tags: this.tags.map((row) => row.slice()),
29
47
  };
30
48
  }
31
49
  }
@@ -0,0 +1,42 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
4
+
5
+ export class MetadataAtomic {
6
+ public readonly type: "boolean" | "bigint" | "number" | "string";
7
+ public readonly tags: IMetadataTypeTag[][];
8
+
9
+ private name_?: string;
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ private constructor(props: ClassProperties<MetadataAtomic>) {
15
+ this.type = props.type;
16
+ this.tags = props.tags;
17
+ }
18
+
19
+ public static create(
20
+ props: ClassProperties<MetadataAtomic>,
21
+ ): MetadataAtomic {
22
+ return new MetadataAtomic(props);
23
+ }
24
+
25
+ public getName(): string {
26
+ return (this.name_ ??= (() => {
27
+ if (this.tags.length === 0) return this.type;
28
+ else if (this.tags.length === 1) {
29
+ const str: string = [
30
+ this.type,
31
+ ...this.tags[0]!.map((t) => t.name),
32
+ ].join(" & ");
33
+ return `(${str})`;
34
+ }
35
+ const rows: string[] = this.tags.map((row) => {
36
+ const str: string = row.map((t) => t.name).join(" & ");
37
+ return row.length === 1 ? str : `(${str})`;
38
+ });
39
+ return `(${this.type} & (${rows.join(" | ")}))`;
40
+ })());
41
+ }
42
+ }
@@ -1,7 +1,6 @@
1
1
  import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
- import { IMetadataCommentTag } from "./IMetadataCommentTag";
5
4
  import { IMetadataDictionary } from "./IMetadataDictionary";
6
5
  import { IMetadataProperty } from "./IMetadataProperty";
7
6
  import { Metadata } from "./Metadata";
@@ -10,7 +9,6 @@ export class MetadataProperty {
10
9
  public readonly key: Metadata;
11
10
  public readonly value: Metadata;
12
11
  public readonly description: string | null;
13
- public readonly tags: IMetadataCommentTag[];
14
12
  public readonly jsDocTags: IJsDocTagInfo[];
15
13
 
16
14
  /* -----------------------------------------------------------
@@ -23,7 +21,6 @@ export class MetadataProperty {
23
21
  this.key = props.key;
24
22
  this.value = props.value;
25
23
  this.description = props.description;
26
- this.tags = props.tags;
27
24
  this.jsDocTags = props.jsDocTags;
28
25
  }
29
26
 
@@ -47,7 +44,6 @@ export class MetadataProperty {
47
44
  key: Metadata._From(property.key, dict),
48
45
  value: Metadata._From(property.value, dict),
49
46
  description: property.description,
50
- tags: property.tags.slice(),
51
47
  jsDocTags: property.jsDocTags.slice(),
52
48
  });
53
49
  }
@@ -57,7 +53,6 @@ export class MetadataProperty {
57
53
  key: this.key.toJSON(),
58
54
  value: this.value.toJSON(),
59
55
  description: this.description,
60
- tags: this.tags,
61
56
  jsDocTags: this.jsDocTags,
62
57
  };
63
58
  }
@@ -1,5 +1,3 @@
1
- import { $clone } from "../../functional/$clone";
2
-
3
1
  import { ClassProperties } from "../../typings/ClassProperties";
4
2
 
5
3
  import { IMetadataTuple } from "./IMetadataTuple";
@@ -11,13 +9,16 @@ export class MetadataTuple {
11
9
  public readonly tags: IMetadataTypeTag[][];
12
10
 
13
11
  /**
14
- * @internal
12
+ * @hidden
15
13
  */
16
14
  private constructor(props: ClassProperties<MetadataTuple>) {
17
15
  this.type = props.type;
18
16
  this.tags = props.tags;
19
17
  }
20
18
 
19
+ /**
20
+ * @internal
21
+ */
21
22
  public static create(props: ClassProperties<MetadataTuple>): MetadataTuple {
22
23
  return new MetadataTuple(props);
23
24
  }
@@ -25,7 +26,7 @@ export class MetadataTuple {
25
26
  public toJSON(): IMetadataTuple {
26
27
  return {
27
28
  type: this.type.toJSON(),
28
- tags: $clone(this.tags),
29
+ tags: this.tags.map((row) => row.slice()),
29
30
  };
30
31
  }
31
32
  }
@@ -1,8 +1,13 @@
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
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type ExclusiveMaximum<Value extends number | bigint> = TagBase<{
4
+ target: Value extends number ? "number" : "bigint";
5
+ kind: "exclusiveMaximum";
6
+ value: Value;
7
+ validate: `$input < ${Numeric<Value>}`;
8
+ exclusive: ["exclusiveMaximum", "maximum"];
9
+ }>;
10
+
11
+ type Numeric<Value extends number | bigint> = Value extends number
12
+ ? Value
13
+ : `BigInt(${Value})`;
@@ -1,8 +1,13 @@
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
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type ExclusiveMinimum<Value extends number | bigint> = TagBase<{
4
+ target: Value extends number ? "number" : "bigint";
5
+ kind: "exclusiveMinimum";
6
+ value: Value;
7
+ validate: `${Numeric<Value>} < $input`;
8
+ exclusive: ["exclusiveMinimum", "minimum"];
9
+ }>;
10
+
11
+ type Numeric<Value extends number | bigint> = Value extends number
12
+ ? Value
13
+ : `BigInt(${Value})`;
@@ -1,3 +1,5 @@
1
+ import { TagBase } from "./TagBase";
2
+
1
3
  export type Format<
2
4
  Value extends
3
5
  | "email"
@@ -7,23 +9,22 @@ export type Format<
7
9
  | "url"
8
10
  | "date"
9
11
  | "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
- };
12
+ > = TagBase<{
13
+ target: "string";
14
+ kind: "format";
15
+ value: Value;
16
+ validate: Value extends "email"
17
+ ? `/^(([^<>()[\\]\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\"]+)*)|(\\".+\\"))@(([^<>()[\\]\\.,;:\\s@\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\"]{2,})$/i.test($input)`
18
+ : Value extends "uuid"
19
+ ? `/^(?:[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)`
20
+ : Value extends "ipv4"
21
+ ? `/^(?: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)`
22
+ : Value extends "ipv6"
23
+ ? `/^(([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)`
24
+ : Value extends "url"
25
+ ? `/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)`
26
+ : Value extends "date"
27
+ ? `/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)`
28
+ : `!isNaN(new Date($input).getTime())`;
29
+ exclusive: ["pattern"];
30
+ }>;
@@ -1,8 +1,9 @@
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
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type MaxItems<Value extends number> = TagBase<{
4
+ target: "array";
5
+ kind: "maxItems";
6
+ value: Value;
7
+ validate: `$input.length <= ${Value}`;
8
+ exclusive: true;
9
+ }>;
@@ -1,8 +1,9 @@
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
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type MaxLength<Value extends number> = TagBase<{
4
+ target: "string";
5
+ kind: "maxLength";
6
+ value: Value;
7
+ validate: `$input.length <= ${Value}`;
8
+ exclusive: true;
9
+ }>;
@@ -1,8 +1,13 @@
1
- export type Maximum<Fixed extends number | bigint> = {
2
- "typia.tag"?: {
3
- target: Fixed extends number ? "number" : "bigint";
4
- kind: "maximum";
5
- value: Fixed;
6
- validate: `$input <= ${Fixed}`;
7
- };
8
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type Maximum<Value extends number | bigint> = TagBase<{
4
+ target: Value extends number ? "number" : "bigint";
5
+ kind: "maximum";
6
+ value: Value;
7
+ validate: `$input <= ${Numeric<Value>}`;
8
+ exclusive: ["maximum", "exclusiveMaximum"];
9
+ }>;
10
+
11
+ type Numeric<Value extends number | bigint> = Value extends number
12
+ ? Value
13
+ : `BigInt(${Value})`;
@@ -1,8 +1,9 @@
1
- export type MinItems<Size extends number> = {
2
- "typia.tag"?: {
3
- target: "array";
4
- kind: "minItems";
5
- value: Size;
6
- validate: `${Size} <= $input.length`;
7
- };
8
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type MinItems<Value extends number> = TagBase<{
4
+ target: "array";
5
+ kind: "minItems";
6
+ value: Value;
7
+ validate: `${Value} <= $input.length`;
8
+ exclusive: true;
9
+ }>;
@@ -1,8 +1,9 @@
1
- export type MinLength<Fixed extends number> = {
2
- "typia.tag"?: {
3
- target: "array";
4
- kind: "minLength";
5
- value: number;
6
- validate: `${Fixed} <= $input.length`;
7
- };
8
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type MinLength<Value extends number> = TagBase<{
4
+ target: "string";
5
+ kind: "minLength";
6
+ value: Value;
7
+ validate: `${Value} <= $input.length`;
8
+ exclusive: true;
9
+ }>;
@@ -1,8 +1,13 @@
1
- export type Minimum<Fixed extends number | bigint> = {
2
- "typia.tag"?: {
3
- target: Fixed extends number ? "number" : "bigint";
4
- kind: "minimum";
5
- value: Fixed;
6
- validate?: `${Fixed} <= $input`;
7
- };
8
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type Minimum<Value extends number | bigint> = TagBase<{
4
+ target: Value extends number ? "number" : "bigint";
5
+ kind: "minimum";
6
+ value: Value;
7
+ validate: `${Numeric<Value>} <= $input`;
8
+ exclusive: ["minimum", "exclusiveMinimum"];
9
+ }>;
10
+
11
+ type Numeric<Value extends number | bigint> = Value extends number
12
+ ? Value
13
+ : `BigInt(${Value})`;
@@ -1,10 +1,15 @@
1
- export type MultipleOf<Fixed extends number | bigint> = {
2
- "typia.tag"?: {
3
- target: Fixed extends bigint ? "bigint" : "number";
4
- kind: "multipleOf";
5
- value: Fixed;
6
- validate: `$input % ${Fixed} === ${Fixed extends bigint
7
- ? "bigint"
8
- : "number"}`;
9
- };
10
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type MultipleOf<Value extends number | bigint> = TagBase<{
4
+ target: Value extends bigint ? "bigint" : "number";
5
+ kind: "multipleOf";
6
+ value: Value;
7
+ validate: `$input % ${Numeric<Value>} === ${Value extends bigint
8
+ ? Numeric<0n>
9
+ : 0}`;
10
+ exclusive: true;
11
+ }>;
12
+
13
+ type Numeric<Value extends number | bigint> = Value extends number
14
+ ? Value
15
+ : `BigInt(${Value})`;
@@ -1,8 +1,8 @@
1
- export type Pattern<Value extends string> = {
2
- "typia.tag"?: {
3
- target: "string";
4
- kind: "pattern";
5
- value: Value;
6
- validate: `RegExp(/${Value}/).test($input)`;
7
- };
8
- };
1
+ import { TagBase } from "./TagBase";
2
+
3
+ export type Pattern<Value extends string> = TagBase<{
4
+ target: "string";
5
+ kind: "pattern";
6
+ value: Value;
7
+ validate: `/${Value}/.test($input)`;
8
+ }>;