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
@@ -2,8 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
 
5
- import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
6
- import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
5
+ import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
7
6
 
8
7
  import { IProject } from "../../transformers/IProject";
9
8
 
@@ -15,271 +14,92 @@ import { OptionPredicator } from "../helpers/OptionPredicator";
15
14
  */
16
15
  export const check_number =
17
16
  (project: IProject, numeric: boolean) =>
18
- (matrix: IMetadataTypeTag[][], metaTags: IMetadataCommentTag[]) =>
17
+ (atomic: MetadataAtomic) =>
19
18
  (input: ts.Expression): ICheckEntry => {
20
- const entries: [IMetadataCommentTag, ts.Expression][] = [];
21
- for (const mt of metaTags)
22
- if (mt.kind === "type") {
23
- // MUST BE INTEGER
24
- if (
25
- mt.value === "int" ||
26
- mt.value === "uint" ||
27
- mt.value === "int32" ||
28
- mt.value === "uint32" ||
29
- mt.value === "int64" ||
30
- mt.value === "uint64"
31
- )
32
- entries.push([
33
- mt,
34
- ts.factory.createStrictEquality(
35
- ts.factory.createCallExpression(
36
- ts.factory.createIdentifier("Math.floor"),
37
- undefined,
38
- [input],
39
- ),
40
- input,
41
- ),
42
- ]);
43
- // GREATER THAN OR EQUAL TO ZERO
44
- if (
45
- mt.value === "uint" ||
46
- mt.value === "uint32" ||
47
- mt.value === "uint64"
48
- )
49
- entries.push([
50
- mt,
51
- ts.factory.createLessThanEquals(
52
- ts.factory.createNumericLiteral(0),
53
- input,
54
- ),
55
- ]);
56
- // RANGE LIMIT
57
- if (mt.value === "uint" || mt.value === "uint32")
58
- entries.push([
59
- mt,
60
- ts.factory.createLessThanEquals(
61
- input,
62
- ts.factory.createNumericLiteral(4294967295),
63
- ),
64
- ]);
65
- else if (mt.value === "uint64")
66
- entries.push([
67
- mt,
68
- ts.factory.createLessThanEquals(
69
- input,
70
- ts.factory.createNumericLiteral(
71
- 18446744073709551615,
72
- ),
73
- ),
74
- ]);
75
- else if (mt.value === "int64")
76
- entries.push([
77
- mt,
78
- ts.factory.createLogicalAnd(
79
- ts.factory.createLessThanEquals(
80
- ts.factory.createNumericLiteral(
81
- -9223372036854775808,
82
- ),
83
- input,
84
- ),
85
- ts.factory.createLessThanEquals(
86
- input,
87
- ts.factory.createNumericLiteral(
88
- 9223372036854775807,
89
- ),
90
- ),
91
- ),
92
- ]);
93
- else if (mt.value === "int" || mt.value === "int32")
94
- entries.push([
95
- mt,
96
- ts.factory.createLogicalAnd(
97
- ts.factory.createLessThanEquals(
98
- ts.factory.createNumericLiteral(-2147483648),
99
- input,
100
- ),
101
- ts.factory.createLessThanEquals(
102
- input,
103
- ts.factory.createNumericLiteral(2147483647),
104
- ),
105
- ),
106
- ]);
107
- else if (mt.value === "float")
108
- entries.push([
109
- mt,
110
- ts.factory.createLogicalAnd(
111
- ts.factory.createLessThanEquals(
112
- ts.factory.createNumericLiteral(
113
- -1.175494351e38,
114
- ),
115
- input,
116
- ),
117
- ts.factory.createLessThanEquals(
118
- input,
119
- ts.factory.createNumericLiteral(3.4028235e38),
120
- ),
121
- ),
122
- ]);
123
- } else if (mt.kind === "multipleOf")
124
- entries.push([
125
- mt,
126
- ts.factory.createStrictEquality(
127
- ts.factory.createNumericLiteral(0),
128
- ts.factory.createModulo(
129
- input,
130
- ts.factory.createNumericLiteral(mt.value),
131
- ),
132
- ),
133
- ]);
134
- else if (mt.kind === "step") {
135
- const modulo = ts.factory.createModulo(
136
- input,
137
- ts.factory.createNumericLiteral(mt.value),
138
- );
139
- const minimum =
140
- (metaTags.find(
141
- (tag) =>
142
- tag.kind === "minimum" ||
143
- tag.kind === "exclusiveMinimum",
144
- )?.value as number | undefined) ?? undefined;
145
- entries.push([
146
- mt,
147
- ts.factory.createStrictEquality(
148
- ts.factory.createNumericLiteral(0),
149
- minimum !== undefined
150
- ? ts.factory.createSubtract(
151
- modulo,
152
- ts.factory.createNumericLiteral(minimum),
153
- )
154
- : modulo,
155
- ),
156
- ]);
157
- } else if (mt.kind === "minimum")
158
- entries.push([
159
- mt,
160
- ts.factory.createLessThanEquals(
161
- ts.factory.createNumericLiteral(mt.value),
162
- input,
163
- ),
164
- ]);
165
- else if (mt.kind === "maximum")
166
- entries.push([
167
- mt,
168
- ts.factory.createGreaterThanEquals(
169
- ts.factory.createNumericLiteral(mt.value),
170
- input,
171
- ),
172
- ]);
173
- else if (mt.kind === "exclusiveMinimum")
174
- entries.push([
175
- mt,
176
- ts.factory.createLessThan(
177
- ts.factory.createNumericLiteral(mt.value),
178
- input,
179
- ),
180
- ]);
181
- else if (mt.kind === "exclusiveMaximum")
182
- entries.push([
183
- mt,
184
- ts.factory.createGreaterThan(
185
- ts.factory.createNumericLiteral(mt.value),
186
- input,
187
- ),
188
- ]);
19
+ const base = ts.factory.createStrictEquality(
20
+ ts.factory.createStringLiteral("number"),
21
+ ts.factory.createTypeOfExpression(input),
22
+ );
23
+ const addition: ts.Expression | null =
24
+ numeric === true
25
+ ? OptionPredicator.finite(project.options)
26
+ ? ts.factory.createCallExpression(
27
+ ts.factory.createIdentifier("Number.isFinite"),
28
+ undefined,
29
+ [input],
30
+ )
31
+ : OptionPredicator.numeric(project.options)
32
+ ? ts.factory.createLogicalNot(
33
+ ts.factory.createCallExpression(
34
+ ts.factory.createIdentifier("Number.isNaN"),
35
+ undefined,
36
+ [input],
37
+ ),
38
+ )
39
+ : null
40
+ : null;
41
+
42
+ const conditions: ICheckEntry.ICondition[][] =
43
+ check_numeric_type_tags(project)(atomic)(addition)(input);
189
44
 
190
45
  return {
191
- expression: is_number(project, numeric)(matrix, metaTags)(input),
192
- tags: matrix.length
193
- ? []
194
- : entries.map(([tag, expression]) => ({
195
- expected: `number (@${tag.kind} ${tag.value})`,
196
- expression,
197
- })),
46
+ expected: atomic.getName(),
47
+ expression:
48
+ addition !== null && conditions.length === 0
49
+ ? ts.factory.createLogicalAnd(base, addition)
50
+ : base,
51
+ conditions,
198
52
  };
199
53
  };
200
54
 
201
55
  /**
202
56
  * @internal
203
57
  */
204
- const is_number =
205
- (project: IProject, numeric: boolean) =>
206
- (matrix: IMetadataTypeTag[][], metaTags: IMetadataCommentTag[]) =>
207
- (input: ts.Expression) => {
208
- // TYPEOF STATEMENT
209
- const conditions: ts.Expression[] = [
210
- ts.factory.createStrictEquality(
211
- ts.factory.createStringLiteral("number"),
212
- ts.factory.createTypeOfExpression(input),
213
- ),
214
- ];
215
-
216
- // CHECK FINITE AND NAN
217
- const ranged: boolean =
218
- !!metaTags.find(
219
- (tag) =>
220
- tag.kind === "minimum" || tag.kind === "exclusiveMinimum",
221
- ) &&
222
- !!metaTags.find(
223
- (tag) =>
224
- tag.kind === "maximum" || tag.kind === "exclusiveMaximum",
225
- ) &&
226
- !!metaTags.find((tag) => tag.kind === "type") &&
227
- !matrix.every((row) => row.some((tag) => tag.kind === "type")) &&
228
- !matrix.every(
229
- (row) =>
230
- row.some(
231
- (tag) =>
232
- tag.kind === "minimum" ||
233
- tag.kind === "exclusiveMinimum",
234
- ) &&
235
- row.some(
236
- (tag) =>
237
- tag.kind === "maximum" ||
238
- tag.kind === "exclusiveMaximum",
239
- ),
240
- );
241
-
242
- if (numeric === true && ranged === false)
243
- if (OptionPredicator.finite(project.options))
244
- conditions.push(
245
- ts.factory.createCallExpression(
246
- ts.factory.createIdentifier("Number.isFinite"),
247
- undefined,
248
- [input],
249
- ),
250
- );
251
- else if (
252
- OptionPredicator.numeric(project.options) &&
253
- ranged === false
254
- )
255
- conditions.push(
256
- ts.factory.createLogicalNot(
257
- ts.factory.createCallExpression(
258
- ts.factory.createIdentifier("Number.isNaN"),
259
- undefined,
260
- [input],
261
- ),
262
- ),
263
- );
264
-
265
- // ADJUST TYPED TAGS
266
- if (matrix.length) {
267
- const logic: ts.Expression = matrix
268
- .map((row) =>
269
- row
270
- .map((tag) =>
271
- ExpressionFactory.transpile(project.context)(
272
- tag.validate,
273
- )(input),
274
- )
275
- .reduce((a, b) => ts.factory.createLogicalAnd(a, b)),
276
- )
277
- .reduce((a, b) => ts.factory.createLogicalOr(a, b));
278
- conditions.push(logic);
279
- }
280
-
281
- // COMBINATE
282
- return conditions.length === 1
283
- ? conditions[0]!
284
- : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
285
- };
58
+ const check_numeric_type_tags =
59
+ (project: IProject) =>
60
+ (atomic: MetadataAtomic) =>
61
+ (addition: ts.Expression | null) =>
62
+ (input: ts.Expression): ICheckEntry.ICondition[][] =>
63
+ atomic.tags.map((row) => [
64
+ ...(addition === null
65
+ ? []
66
+ : row.some(
67
+ (tag) =>
68
+ tag.kind === "type" &&
69
+ (tag.value === "int32" ||
70
+ tag.value === "uint32" ||
71
+ tag.value === "int64" ||
72
+ tag.value === "uint64" ||
73
+ tag.value === "float"),
74
+ ) ||
75
+ row.some(
76
+ (tag) =>
77
+ tag.kind === "multipleOf" &&
78
+ typeof tag.value === "number",
79
+ ) ||
80
+ (row.some(
81
+ (tag) =>
82
+ (tag.kind === "minimum" ||
83
+ tag.kind === "exclusiveMinimum") &&
84
+ typeof tag.value === "number",
85
+ ) &&
86
+ row.some(
87
+ (tag) =>
88
+ (tag.kind === "maximum" ||
89
+ tag.kind === "exclusiveMaximum") &&
90
+ typeof tag.value === "number",
91
+ ))
92
+ ? []
93
+ : [
94
+ {
95
+ expected: "number",
96
+ expression: addition!,
97
+ },
98
+ ]),
99
+ ...row.map((tag) => ({
100
+ expected: `number & ${tag.name}`,
101
+ expression: ExpressionFactory.transpile(project.context)(
102
+ tag.validate,
103
+ )(input),
104
+ })),
105
+ ]);
@@ -2,55 +2,44 @@ import ts from "typescript";
2
2
 
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
 
5
- import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
6
- import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
5
+ import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
7
6
 
8
7
  import { IProject } from "../../transformers/IProject";
9
8
 
10
- import { FunctionImporter } from "../helpers/FunctionImporeter";
11
- import { check_string_tags } from "./check_string_tags";
9
+ import { ICheckEntry } from "../helpers/ICheckEntry";
12
10
 
13
11
  /**
14
12
  * @internal
15
13
  */
16
14
  export const check_string =
17
15
  (project: IProject) =>
18
- (importer: FunctionImporter) =>
19
- (tags: IMetadataTypeTag[][], metaTags: IMetadataCommentTag[]) =>
20
- (input: ts.Expression) => ({
21
- expression: is_string(project)(tags)(input),
22
- tags: [...check_string_tags(importer)(metaTags)(input)],
23
- });
24
-
25
- const is_string =
26
- (project: IProject) =>
27
- (matrix: IMetadataTypeTag[][]) =>
28
- (input: ts.Expression) => {
29
- // BASIC TYPEOF EXPRESSION
30
- const conditions: ts.Expression[] = [
31
- ts.factory.createStrictEquality(
16
+ (atomic: MetadataAtomic) =>
17
+ (input: ts.Expression): ICheckEntry => {
18
+ const conditions: ICheckEntry.ICondition[][] =
19
+ check_string_type_tags(project)(atomic)(input);
20
+
21
+ return {
22
+ expected: atomic.getName(),
23
+ expression: ts.factory.createStrictEquality(
32
24
  ts.factory.createStringLiteral("string"),
33
25
  ts.factory.createTypeOfExpression(input),
34
26
  ),
35
- ];
36
-
37
- // ADJUST TYPED TAGS
38
- if (matrix.length) {
39
- const logic: ts.Expression = matrix
40
- .map((row) =>
41
- row
42
- .map((tag) =>
43
- ExpressionFactory.transpile(project.context)(
44
- tag.validate,
45
- )(input),
46
- )
47
- .reduce((a, b) => ts.factory.createLogicalAnd(a, b)),
48
- )
49
- .reduce((a, b) => ts.factory.createLogicalOr(a, b));
50
- conditions.push(logic);
51
- }
52
-
53
- return conditions.length === 1
54
- ? conditions[0]!
55
- : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
27
+ conditions,
28
+ };
56
29
  };
30
+
31
+ /**
32
+ * @internal
33
+ */
34
+ const check_string_type_tags =
35
+ (project: IProject) =>
36
+ (atomic: MetadataAtomic) =>
37
+ (input: ts.Expression): ICheckEntry.ICondition[][] =>
38
+ atomic.tags.map((row) =>
39
+ row.map((tag) => ({
40
+ expected: `string & ${tag.name}`,
41
+ expression: ExpressionFactory.transpile(project.context)(
42
+ tag.validate,
43
+ )(input),
44
+ })),
45
+ );
@@ -40,6 +40,22 @@ export const check_template =
40
40
  expression: conditions.reduce((x, y) =>
41
41
  ts.factory.createLogicalAnd(x, y),
42
42
  ),
43
- tags: [],
43
+ conditions: [],
44
+ expected: templates
45
+ .map(
46
+ (tpl) =>
47
+ "`" +
48
+ tpl
49
+ .map((child) =>
50
+ child.isConstant() && child.size() === 1
51
+ ? child.constants[0]!.values[0]!
52
+ : `$\{${child.getName()}\}`,
53
+ )
54
+ .join("")
55
+ .split("`")
56
+ .join("\\`") +
57
+ "`",
58
+ )
59
+ .join(" | "),
44
60
  };
45
61
  };
@@ -4,7 +4,6 @@ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../../factories/StatementFactory";
5
5
  import { TypeFactory } from "../../factories/TypeFactory";
6
6
 
7
- import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
8
7
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
9
8
  import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
10
9
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
@@ -26,8 +25,6 @@ export const check_union_array_like =
26
25
  input: ts.Expression,
27
26
  origins: Origin[],
28
27
  explore: FeatureProgrammer.IExplore,
29
- tags: IMetadataCommentTag[],
30
- jsDocTags: ts.JSDocTagInfo[],
31
28
  ): ts.ArrowFunction => {
32
29
  // ONLY ONE TYPE
33
30
  const targets: Array<Category> = origins.map(accessor.transform);
@@ -38,13 +35,7 @@ export const check_union_array_like =
38
35
  parameters,
39
36
  undefined,
40
37
  undefined,
41
- props.decoder(
42
- accessor.array(input),
43
- targets[0]!,
44
- explore,
45
- tags,
46
- jsDocTags,
47
- ),
38
+ props.decoder(accessor.array(input), targets[0]!, explore),
48
39
  );
49
40
 
50
41
  const array = ts.factory.createIdentifier("array");
@@ -87,8 +78,6 @@ export const check_union_array_like =
87
78
  ? `"[0]"`
88
79
  : "",
89
80
  },
90
- tags,
91
- jsDocTags,
92
81
  array,
93
82
  ),
94
83
  ),
@@ -110,8 +99,6 @@ export const check_union_array_like =
110
99
  ...explore,
111
100
  tracable: true,
112
101
  },
113
- tags,
114
- jsDocTags,
115
102
  ),
116
103
  ),
117
104
  ],
@@ -301,8 +288,6 @@ export namespace check_union_array_like {
301
288
  front: ts.Expression,
302
289
  target: Element,
303
290
  explore: FeatureProgrammer.IExplore,
304
- tags: IMetadataCommentTag[],
305
- jsDocTags: ts.JSDocTagInfo[],
306
291
  container: ts.Expression,
307
292
  ): ts.Expression;
308
293
  decoder: UnionExplorer.Decoder<Category>;
@@ -41,23 +41,17 @@ export const feature_object_entries =
41
41
  input: propInput,
42
42
  key: prop.key,
43
43
  meta: prop.value,
44
- expression: config.decoder()(
45
- propInput,
46
- prop.value,
47
- {
48
- tracable: config.path || config.trace,
49
- source: "function",
50
- from,
51
- postfix:
52
- sole !== null
53
- ? IdentifierFactory.postfix(sole)
54
- : (() => {
55
- importer.use("join");
56
- return `$join(key)`;
57
- })(),
58
- },
59
- prop.tags,
60
- prop.jsDocTags,
61
- ),
44
+ expression: config.decoder()(propInput, prop.value, {
45
+ tracable: config.path || config.trace,
46
+ source: "function",
47
+ from,
48
+ postfix:
49
+ sole !== null
50
+ ? IdentifierFactory.postfix(sole)
51
+ : (() => {
52
+ importer.use("join");
53
+ return `$join(key)`;
54
+ })(),
55
+ }),
62
56
  };
63
57
  });
@@ -3,7 +3,7 @@ import ts from "typescript";
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
  import { LiteralFactory } from "../../factories/LiteralFactory";
5
5
 
6
- import { ICommentTag } from "../../schemas/metadata/ICommentTag";
6
+ import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
7
7
 
8
8
  import { Customizable } from "../../typings/Customizable";
9
9
 
@@ -13,7 +13,7 @@ import { Customizable } from "../../typings/Customizable";
13
13
  export const random_custom =
14
14
  (accessor: (name: string) => ts.Expression) =>
15
15
  (type: keyof Customizable) =>
16
- (comments: ICommentTag[]) =>
16
+ (tags: IMetadataTypeTag[]) =>
17
17
  (expression: ts.Expression) =>
18
18
  ExpressionFactory.coalesce(
19
19
  ts.factory.createCallChain(
@@ -24,6 +24,6 @@ export const random_custom =
24
24
  ),
25
25
  ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
26
26
  undefined,
27
- [LiteralFactory.generate(comments)],
27
+ [LiteralFactory.generate(tags)],
28
28
  ),
29
29
  )(expression);