typia 5.0.0-dev.20230823 → 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 (387) hide show
  1. package/lib/Primitive.d.ts +14 -12
  2. package/lib/Resolved.d.ts +46 -0
  3. package/lib/{schemas/metadata/IMetadataTag.js → Resolved.js} +1 -1
  4. package/lib/Resolved.js.map +1 -0
  5. package/lib/factories/ExpressionFactory.d.ts +2 -0
  6. package/lib/factories/ExpressionFactory.js +24 -0
  7. package/lib/factories/ExpressionFactory.js.map +1 -1
  8. package/lib/factories/IdentifierFactory.d.ts +2 -1
  9. package/lib/factories/IdentifierFactory.js +11 -0
  10. package/lib/factories/IdentifierFactory.js.map +1 -1
  11. package/lib/factories/MetadataCollection.d.ts +7 -7
  12. package/lib/factories/MetadataCollection.js +4 -4
  13. package/lib/factories/MetadataCollection.js.map +1 -1
  14. package/lib/factories/MetadataFactory.d.ts +1 -1
  15. package/lib/factories/MetadataTagFactory.d.ts +2 -2
  16. package/lib/factories/MetadataTagFactory.js +15 -13
  17. package/lib/factories/MetadataTagFactory.js.map +1 -1
  18. package/lib/factories/ProtobufFactory.js +11 -10
  19. package/lib/factories/ProtobufFactory.js.map +1 -1
  20. package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
  21. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
  23. package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
  24. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
  25. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
  26. package/lib/factories/internal/metadata/explore_metadata.js +3 -3
  27. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
  29. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_collection.js +26 -18
  33. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
  35. package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +4 -4
  36. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +138 -16
  38. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
  40. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  41. package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
  42. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  43. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
  44. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  45. package/lib/factories/internal/metadata/iterate_metadata_sort.js +4 -4
  46. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
  48. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +3 -0
  50. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +157 -0
  51. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +1 -0
  52. package/lib/functional/$ProtobufWriter.js.map +1 -1
  53. package/lib/functional/$any.js +2 -1
  54. package/lib/functional/$any.js.map +1 -1
  55. package/lib/functional/$clone.d.ts +2 -0
  56. package/lib/functional/$clone.js +8 -0
  57. package/lib/functional/$clone.js.map +1 -0
  58. package/lib/json.d.ts +15 -15
  59. package/lib/misc.d.ts +42 -42
  60. package/lib/module.d.ts +20 -56
  61. package/lib/module.js +4 -17
  62. package/lib/module.js.map +1 -1
  63. package/lib/programmers/AssertProgrammer.js +2 -4
  64. package/lib/programmers/AssertProgrammer.js.map +1 -1
  65. package/lib/programmers/CheckerProgrammer.js +39 -30
  66. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  67. package/lib/programmers/FeatureProgrammer.d.ts +4 -4
  68. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  69. package/lib/programmers/IsProgrammer.d.ts +1 -1
  70. package/lib/programmers/IsProgrammer.js +3 -5
  71. package/lib/programmers/IsProgrammer.js.map +1 -1
  72. package/lib/programmers/RandomProgrammer.js +328 -142
  73. package/lib/programmers/RandomProgrammer.js.map +1 -1
  74. package/lib/programmers/ValidateProgrammer.js +2 -4
  75. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  76. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  77. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  78. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  79. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  80. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  81. package/lib/programmers/helpers/ICheckEntry.d.ts +1 -1
  82. package/lib/programmers/helpers/ProtobufUtil.js +2 -2
  83. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  84. package/lib/programmers/helpers/RandomJoiner.d.ts +4 -4
  85. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  86. package/lib/programmers/helpers/RandomRanger.d.ts +6 -6
  87. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  88. package/lib/programmers/helpers/StringifyPredicator.js +1 -2
  89. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  90. package/lib/programmers/helpers/UnionExplorer.d.ts +8 -8
  91. package/lib/programmers/helpers/UnionExplorer.js +40 -29
  92. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  93. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  94. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  95. package/lib/programmers/internal/application_array.js +1 -1
  96. package/lib/programmers/internal/application_array.js.map +1 -1
  97. package/lib/programmers/internal/application_default_string.js +2 -2
  98. package/lib/programmers/internal/application_default_string.js.map +1 -1
  99. package/lib/programmers/internal/application_resolved.d.ts +2 -2
  100. package/lib/programmers/internal/application_resolved.js +2 -2
  101. package/lib/programmers/internal/application_resolved.js.map +1 -1
  102. package/lib/programmers/internal/application_schema.js +7 -7
  103. package/lib/programmers/internal/application_schema.js.map +1 -1
  104. package/lib/programmers/internal/application_string.js.map +1 -1
  105. package/lib/programmers/internal/application_tuple.js +10 -9
  106. package/lib/programmers/internal/application_tuple.js.map +1 -1
  107. package/lib/programmers/internal/check_array_length.js.map +1 -1
  108. package/lib/programmers/internal/check_array_tags.js +39 -0
  109. package/lib/programmers/internal/check_array_tags.js.map +1 -0
  110. package/lib/programmers/internal/check_bigint.js +88 -74
  111. package/lib/programmers/internal/check_bigint.js.map +1 -1
  112. package/lib/programmers/internal/check_number.js +142 -131
  113. package/lib/programmers/internal/check_number.js.map +1 -1
  114. package/lib/programmers/internal/check_string.js +30 -6
  115. package/lib/programmers/internal/check_string.js.map +1 -1
  116. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  117. package/lib/programmers/internal/check_template.js +16 -49
  118. package/lib/programmers/internal/check_template.js.map +1 -1
  119. package/lib/programmers/internal/check_union_array_like.js +3 -2
  120. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  121. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  122. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  123. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  124. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  125. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
  126. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  127. package/lib/programmers/json/JsonStringifyProgrammer.js +33 -27
  128. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  129. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
  130. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  131. package/lib/programmers/misc/MiscCloneProgrammer.js +124 -43
  132. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  133. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
  134. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  135. package/lib/programmers/misc/MiscLiteralsProgrammer.js +3 -3
  136. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  137. package/lib/programmers/misc/MiscPruneProgrammer.js +15 -15
  138. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  139. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
  140. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  141. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
  142. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  143. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +8 -8
  144. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  145. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +3 -3
  146. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  147. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
  148. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  149. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  150. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  151. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
  152. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  153. package/lib/protobuf.d.ts +631 -10
  154. package/lib/protobuf.js +13 -13
  155. package/lib/protobuf.js.map +1 -1
  156. package/lib/schemas/json/IJsonSchema.d.ts +2 -2
  157. package/lib/schemas/metadata/IMetadata.d.ts +13 -6
  158. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -2
  159. package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
  160. package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
  161. package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
  162. package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
  163. package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
  164. package/lib/schemas/metadata/{IMetadataResolved.js → IMetadataAtomic.js} +1 -1
  165. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  166. package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
  167. package/lib/schemas/metadata/{IMetadataTag.d.ts → IMetadataCommentTag.d.ts} +2 -2
  168. package/lib/schemas/metadata/IMetadataCommentTag.js +3 -0
  169. package/lib/schemas/metadata/IMetadataCommentTag.js.map +1 -0
  170. package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
  171. package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
  172. package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
  173. package/lib/schemas/metadata/IMetadataProperty.d.ts +2 -2
  174. package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
  175. package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
  176. package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
  177. package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
  178. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +6 -0
  179. package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
  180. package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
  181. package/lib/schemas/metadata/Metadata.d.ts +4 -4
  182. package/lib/schemas/metadata/Metadata.js +217 -157
  183. package/lib/schemas/metadata/Metadata.js.map +1 -1
  184. package/lib/schemas/metadata/MetadataAlias.d.ts +2 -2
  185. package/lib/schemas/metadata/MetadataArray.d.ts +6 -6
  186. package/lib/schemas/metadata/MetadataArray.js +5 -19
  187. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  188. package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
  189. package/lib/schemas/metadata/MetadataArrayType.js +36 -0
  190. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
  191. package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
  192. package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
  193. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
  194. package/lib/schemas/metadata/MetadataProperty.d.ts +2 -2
  195. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -6
  196. package/lib/schemas/metadata/MetadataTuple.js +5 -19
  197. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  198. package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
  199. package/lib/schemas/metadata/MetadataTupleType.js +40 -0
  200. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
  201. package/lib/tags/ExclusiveMaximum.d.ts +8 -0
  202. package/lib/tags/ExclusiveMaximum.js +3 -0
  203. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  204. package/lib/tags/ExclusiveMinimum.d.ts +8 -0
  205. package/lib/tags/ExclusiveMinimum.js +3 -0
  206. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  207. package/lib/tags/Format.d.ts +8 -0
  208. package/lib/tags/Format.js +3 -0
  209. package/lib/tags/Format.js.map +1 -0
  210. package/lib/tags/MaxItems.d.ts +8 -0
  211. package/lib/tags/MaxItems.js +3 -0
  212. package/lib/tags/MaxItems.js.map +1 -0
  213. package/lib/tags/MaxLength.d.ts +8 -0
  214. package/lib/tags/MaxLength.js +3 -0
  215. package/lib/tags/MaxLength.js.map +1 -0
  216. package/lib/tags/Maximum.d.ts +8 -0
  217. package/lib/tags/Maximum.js +3 -0
  218. package/lib/tags/Maximum.js.map +1 -0
  219. package/lib/tags/MinItems.d.ts +8 -0
  220. package/lib/tags/MinItems.js +3 -0
  221. package/lib/tags/MinItems.js.map +1 -0
  222. package/lib/tags/MinLength.d.ts +8 -0
  223. package/lib/tags/MinLength.js +3 -0
  224. package/lib/tags/MinLength.js.map +1 -0
  225. package/lib/tags/Minimum.d.ts +8 -0
  226. package/lib/tags/Minimum.js +3 -0
  227. package/lib/tags/Minimum.js.map +1 -0
  228. package/lib/tags/MultipleOf.d.ts +8 -0
  229. package/lib/tags/MultipleOf.js +3 -0
  230. package/lib/tags/MultipleOf.js.map +1 -0
  231. package/lib/tags/Pattern.d.ts +8 -0
  232. package/lib/tags/Pattern.js +3 -0
  233. package/lib/tags/Pattern.js.map +1 -0
  234. package/lib/tags/TagBase.d.ts +10 -0
  235. package/lib/tags/TagBase.js +3 -0
  236. package/lib/tags/TagBase.js.map +1 -0
  237. package/lib/tags/Type.d.ts +13 -0
  238. package/lib/tags/Type.js +3 -0
  239. package/lib/tags/Type.js.map +1 -0
  240. package/lib/tags/index.d.ts +12 -0
  241. package/lib/tags/index.js +29 -0
  242. package/lib/tags/index.js.map +1 -0
  243. package/lib/transformers/FileTransformer.d.ts +1 -1
  244. package/lib/transformers/FileTransformer.js +12 -1
  245. package/lib/transformers/FileTransformer.js.map +1 -1
  246. package/lib/transformers/IProject.d.ts +1 -0
  247. package/lib/transformers/features/json/JsonApplicationTransformer.js +5 -3
  248. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  249. package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
  250. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  251. package/lib/utils/RandomGenerator.js +3 -2
  252. package/lib/utils/RandomGenerator.js.map +1 -1
  253. package/package.json +2 -1
  254. package/src/Primitive.ts +19 -15
  255. package/src/Resolved.ts +116 -0
  256. package/src/factories/ExpressionFactory.ts +44 -0
  257. package/src/factories/IdentifierFactory.ts +15 -0
  258. package/src/factories/MetadataCollection.ts +18 -12
  259. package/src/factories/MetadataFactory.ts +1 -1
  260. package/src/factories/MetadataTagFactory.ts +28 -27
  261. package/src/factories/ProtobufFactory.ts +12 -10
  262. package/src/factories/internal/metadata/emend_metadata_atomics.ts +7 -5
  263. package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
  264. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
  265. package/src/factories/internal/metadata/explore_metadata.ts +3 -3
  266. package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
  267. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +6 -4
  268. package/src/factories/internal/metadata/iterate_metadata_collection.ts +29 -22
  269. package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +1 -1
  270. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +109 -15
  271. package/src/factories/internal/metadata/iterate_metadata_native.ts +0 -9
  272. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
  273. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +6 -6
  274. package/src/factories/internal/metadata/iterate_metadata_sort.ts +4 -4
  275. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
  276. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +183 -0
  277. package/src/functional/$any.ts +3 -1
  278. package/src/functional/$clone.ts +4 -0
  279. package/src/json.ts +15 -15
  280. package/src/misc.ts +42 -42
  281. package/src/module.ts +20 -72
  282. package/src/programmers/AssertProgrammer.ts +4 -2
  283. package/src/programmers/CheckerProgrammer.ts +81 -48
  284. package/src/programmers/FeatureProgrammer.ts +6 -6
  285. package/src/programmers/IsProgrammer.ts +5 -3
  286. package/src/programmers/RandomProgrammer.ts +360 -41
  287. package/src/programmers/ValidateProgrammer.ts +4 -2
  288. package/src/programmers/helpers/AtomicPredicator.ts +2 -2
  289. package/src/programmers/helpers/FunctionImporeter.ts +2 -0
  290. package/src/programmers/helpers/ICheckEntry.ts +1 -1
  291. package/src/programmers/helpers/ProtobufUtil.ts +1 -1
  292. package/src/programmers/helpers/RandomJoiner.ts +8 -4
  293. package/src/programmers/helpers/RandomRanger.ts +8 -8
  294. package/src/programmers/helpers/StringifyPredicator.ts +1 -2
  295. package/src/programmers/helpers/UnionExplorer.ts +48 -34
  296. package/src/programmers/helpers/disable_function_importer_declare.ts +6 -1
  297. package/src/programmers/internal/application_array.ts +5 -4
  298. package/src/programmers/internal/application_default_string.ts +6 -2
  299. package/src/programmers/internal/application_resolved.ts +4 -4
  300. package/src/programmers/internal/application_schema.ts +7 -7
  301. package/src/programmers/internal/application_string.ts +2 -2
  302. package/src/programmers/internal/application_tuple.ts +12 -11
  303. package/src/programmers/internal/check_array_length.ts +2 -2
  304. package/src/programmers/internal/check_array_tags.ts +45 -0
  305. package/src/programmers/internal/check_bigint.ts +45 -17
  306. package/src/programmers/internal/check_number.ts +97 -70
  307. package/src/programmers/internal/check_string.ts +43 -12
  308. package/src/programmers/internal/check_string_tags.ts +3 -3
  309. package/src/programmers/internal/check_template.ts +1 -12
  310. package/src/programmers/internal/check_union_array_like.ts +6 -5
  311. package/src/programmers/internal/metadata_to_pattern.ts +4 -4
  312. package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
  313. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
  314. package/src/programmers/json/JsonStringifyProgrammer.ts +47 -29
  315. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +1 -1
  316. package/src/programmers/misc/MiscCloneProgrammer.ts +253 -55
  317. package/src/programmers/misc/MiscIsCloneProgrammer.ts +1 -1
  318. package/src/programmers/misc/MiscLiteralsProgrammer.ts +3 -3
  319. package/src/programmers/misc/MiscPruneProgrammer.ts +31 -19
  320. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +1 -1
  321. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +18 -9
  322. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +18 -14
  323. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +15 -15
  324. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -2
  325. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -6
  326. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +2 -2
  327. package/src/protobuf.ts +663 -31
  328. package/src/schemas/json/IJsonSchema.ts +2 -2
  329. package/src/schemas/metadata/IMetadata.ts +13 -7
  330. package/src/schemas/metadata/IMetadataAlias.ts +2 -2
  331. package/src/schemas/metadata/IMetadataArray.ts +4 -7
  332. package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
  333. package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
  334. package/src/schemas/metadata/IMetadataCollection.ts +4 -4
  335. package/src/schemas/metadata/{IMetadataTag.ts → IMetadataCommentTag.ts} +17 -17
  336. package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
  337. package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +1 -1
  338. package/src/schemas/metadata/IMetadataProperty.ts +2 -2
  339. package/src/schemas/metadata/IMetadataTuple.ts +4 -7
  340. package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
  341. package/src/schemas/metadata/IMetadataTypeTag.ts +6 -0
  342. package/src/schemas/metadata/Metadata.ts +125 -63
  343. package/src/schemas/metadata/MetadataAlias.ts +2 -2
  344. package/src/schemas/metadata/MetadataArray.ts +10 -34
  345. package/src/schemas/metadata/MetadataArrayType.ts +57 -0
  346. package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +9 -9
  347. package/src/schemas/metadata/MetadataProperty.ts +2 -2
  348. package/src/schemas/metadata/MetadataTuple.ts +10 -37
  349. package/src/schemas/metadata/MetadataTupleType.ts +67 -0
  350. package/src/tags/ExclusiveMaximum.ts +8 -0
  351. package/src/tags/ExclusiveMinimum.ts +8 -0
  352. package/src/tags/Format.ts +29 -0
  353. package/src/tags/MaxItems.ts +8 -0
  354. package/src/tags/MaxLength.ts +8 -0
  355. package/src/tags/Maximum.ts +8 -0
  356. package/src/tags/MinItems.ts +8 -0
  357. package/src/tags/MinLength.ts +8 -0
  358. package/src/tags/Minimum.ts +8 -0
  359. package/src/tags/MultipleOf.ts +10 -0
  360. package/src/tags/Pattern.ts +8 -0
  361. package/src/tags/TagBase.ts +17 -0
  362. package/src/tags/Type.ts +30 -0
  363. package/src/tags/index.ts +12 -0
  364. package/src/transformers/FileTransformer.ts +2 -2
  365. package/src/transformers/IProject.ts +1 -0
  366. package/src/transformers/features/json/JsonApplicationTransformer.ts +4 -3
  367. package/src/transformers/features/misc/MetadataTransformer.ts +1 -1
  368. package/src/typings/Atomic.ts +1 -0
  369. package/src/utils/RandomGenerator.ts +4 -2
  370. package/lib/CustomValidatorMap.d.ts +0 -110
  371. package/lib/CustomValidatorMap.js.map +0 -1
  372. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
  373. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
  374. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
  375. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
  376. package/lib/programmers/internal/check_array.js +0 -44
  377. package/lib/programmers/internal/check_array.js.map +0 -1
  378. package/lib/programmers/internal/check_custom.d.ts +0 -1
  379. package/lib/programmers/internal/check_custom.js +0 -30
  380. package/lib/programmers/internal/check_custom.js.map +0 -1
  381. package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
  382. package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
  383. package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
  384. package/src/CustomValidatorMap.ts +0 -126
  385. package/src/programmers/internal/check_array.ts +0 -30
  386. package/src/programmers/internal/check_custom.ts +0 -31
  387. /package/lib/programmers/internal/{check_array.d.ts → check_array_tags.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
3
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
4
4
 
5
5
  export namespace RandomRanger {
6
6
  export interface IDefaults {
@@ -13,7 +13,7 @@ export namespace RandomRanger {
13
13
  (coalesce: (method: string) => ts.Expression) =>
14
14
  (defs: IDefaults) =>
15
15
  (acc: length.IAccessors) =>
16
- (tags: IMetadataTag[]): ts.Expression | undefined => {
16
+ (tags: IMetadataCommentTag[]): ts.Expression | undefined => {
17
17
  const props = {
18
18
  fixed: getter(tags)(acc.fixed),
19
19
  minimum: getter(tags)(acc.minimum),
@@ -40,16 +40,16 @@ export namespace RandomRanger {
40
40
  };
41
41
  export namespace length {
42
42
  export interface IAccessors {
43
- minimum: IMetadataTag["kind"];
44
- maximum: IMetadataTag["kind"];
45
- fixed: IMetadataTag["kind"];
43
+ minimum: IMetadataCommentTag["kind"];
44
+ maximum: IMetadataCommentTag["kind"];
45
+ fixed: IMetadataCommentTag["kind"];
46
46
  }
47
47
  }
48
48
 
49
49
  export const number =
50
50
  (config: number.IConfig) =>
51
51
  (defs: IDefaults) =>
52
- (tags: IMetadataTag[]): ts.Expression => {
52
+ (tags: IMetadataCommentTag[]): ts.Expression => {
53
53
  const range = {
54
54
  minimum: {
55
55
  value:
@@ -151,8 +151,8 @@ export namespace RandomRanger {
151
151
  }
152
152
 
153
153
  const getter =
154
- (tags: IMetadataTag[]) =>
155
- (kind: IMetadataTag["kind"]): number | undefined =>
154
+ (tags: IMetadataCommentTag[]) =>
155
+ (kind: IMetadataCommentTag["kind"]): number | undefined =>
156
156
  tags.find((t) => t.kind === kind)?.value as number | undefined;
157
157
 
158
158
  const stepper = (gap: number) => (range: IRange) => (s: number) => {
@@ -6,8 +6,7 @@ export namespace StringifyPredicator {
6
6
 
7
7
  export const undefindable = (meta: Metadata): boolean =>
8
8
  meta.isRequired() === false ||
9
- (meta.resolved !== null &&
10
- meta.resolved.returns.isRequired() === false);
9
+ (meta.escaped !== null && meta.escaped.returns.isRequired() === false);
11
10
 
12
11
  const ESCAPED = ['"', "\\", "\b", "\f", "\n", "\n", "\r", "\t"];
13
12
  }
@@ -3,11 +3,13 @@ import ts from "typescript";
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
  import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
5
 
6
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
6
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
7
7
  import { Metadata } from "../../schemas/metadata/Metadata";
8
8
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
9
+ import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
9
10
  import { MetadataObject } from "../../schemas/metadata/MetadataObject";
10
11
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
12
+ import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
11
13
 
12
14
  import { FeatureProgrammer } from "../FeatureProgrammer";
13
15
  import { check_union_array_like } from "../internal/check_union_array_like";
@@ -19,7 +21,7 @@ export namespace UnionExplorer {
19
21
  input: ts.Expression,
20
22
  target: T,
21
23
  explore: FeatureProgrammer.IExplore,
22
- tags: IMetadataTag[],
24
+ tags: IMetadataCommentTag[],
23
25
  jsDocTags: ts.JSDocTagInfo[],
24
26
  ): ts.Expression;
25
27
  }
@@ -34,7 +36,7 @@ export namespace UnionExplorer {
34
36
  input: ts.Expression,
35
37
  targets: MetadataObject[],
36
38
  explore: FeatureProgrammer.IExplore,
37
- tags: IMetadataTag[],
39
+ tags: IMetadataCommentTag[],
38
40
  jsDocTags: ts.JSDocTagInfo[],
39
41
  ): ts.Expression => {
40
42
  // BREAKER
@@ -160,7 +162,7 @@ export namespace UnionExplorer {
160
162
  size: null!,
161
163
  front: (input) => input,
162
164
  array: (input) => input,
163
- name: (t) => t.name,
165
+ name: (t) => t.type.name,
164
166
  })(props);
165
167
  export namespace tuple {
166
168
  export type IProps = check_union_array_like.IProps<
@@ -172,12 +174,12 @@ export namespace UnionExplorer {
172
174
  export const array = (props: array.IProps) =>
173
175
  check_union_array_like<MetadataArray, MetadataArray, Metadata>({
174
176
  transform: (x) => x,
175
- element: (x) => x.value,
177
+ element: (x) => x.type.value,
176
178
  size: (input) => IdentifierFactory.access(input)("length"),
177
179
  front: (input) =>
178
180
  ts.factory.createElementAccessExpression(input, 0),
179
181
  array: (input) => input,
180
- name: (t) => t.name,
182
+ name: (t) => t.type.name,
181
183
  })(props);
182
184
  export namespace array {
183
185
  export type IProps = check_union_array_like.IProps<
@@ -193,12 +195,12 @@ export namespace UnionExplorer {
193
195
  Metadata | MetadataTuple
194
196
  >({
195
197
  transform: (x) => x,
196
- element: (x) => (x instanceof MetadataArray ? x.value : x),
198
+ element: (x) => (x instanceof MetadataArray ? x.type.value : x),
197
199
  size: (input) => IdentifierFactory.access(input)("length"),
198
200
  front: (input) =>
199
201
  ts.factory.createElementAccessExpression(input, 0),
200
202
  array: (input) => input,
201
- name: (m) => m.name,
203
+ name: (m) => m.type.name,
202
204
  })(props);
203
205
  export namespace array_or_tuple {
204
206
  export type IProps = check_union_array_like.IProps<
@@ -211,13 +213,16 @@ export namespace UnionExplorer {
211
213
  check_union_array_like<Metadata, MetadataArray, Metadata>({
212
214
  transform: (value: Metadata) =>
213
215
  MetadataArray.create({
214
- name: `Set<${value.getName()}>`,
215
- index: null,
216
- recursive: false,
217
- nullables: [],
218
- value,
216
+ tags: [],
217
+ type: MetadataArrayType.create({
218
+ name: `Set<${value.getName()}>`,
219
+ index: null,
220
+ recursive: false,
221
+ nullables: [],
222
+ value,
223
+ }),
219
224
  }),
220
- element: (array) => array.value,
225
+ element: (array) => array.type.value,
221
226
  size: (input) => IdentifierFactory.access(input)("size"),
222
227
  front: (input) =>
223
228
  IdentifierFactory.access(
@@ -254,7 +259,10 @@ export namespace UnionExplorer {
254
259
  [Metadata, Metadata]
255
260
  >({
256
261
  element: (array) =>
257
- array.value.tuples[0]!.elements as [Metadata, Metadata],
262
+ array.type.value.tuples[0]!.type.elements as [
263
+ Metadata,
264
+ Metadata,
265
+ ],
258
266
  size: (input) => IdentifierFactory.access(input)("size"),
259
267
  front: (input) =>
260
268
  IdentifierFactory.access(
@@ -278,25 +286,31 @@ export namespace UnionExplorer {
278
286
  name: (_m, [k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
279
287
  transform: (m: Metadata.Entry) =>
280
288
  MetadataArray.create({
281
- name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
282
- index: null,
283
- recursive: false,
284
- nullables: [],
285
- value: Metadata.create({
286
- ...Metadata.initialize(),
287
- tuples: [
288
- (() => {
289
- const tuple = MetadataTuple.create({
290
- name: `[${m.key.getName()}, ${m.value.getName()}]`,
291
- index: null,
292
- recursive: false,
293
- nullables: [],
294
- elements: [m.key, m.value],
295
- });
296
- tuple.of_map = true;
297
- return tuple;
298
- })(),
299
- ],
289
+ tags: [],
290
+ type: MetadataArrayType.create({
291
+ name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
292
+ index: null,
293
+ recursive: false,
294
+ nullables: [],
295
+ value: Metadata.create({
296
+ ...Metadata.initialize(),
297
+ tuples: [
298
+ (() => {
299
+ const tuple = MetadataTuple.create({
300
+ tags: [],
301
+ type: MetadataTupleType.create({
302
+ name: `[${m.key.getName()}, ${m.value.getName()}]`,
303
+ index: null,
304
+ recursive: false,
305
+ nullables: [],
306
+ elements: [m.key, m.value],
307
+ }),
308
+ });
309
+ tuple.type.of_map = true;
310
+ return tuple;
311
+ })(),
312
+ ],
313
+ }),
300
314
  }),
301
315
  }),
302
316
  })(props);
@@ -7,6 +7,7 @@ export const disable_function_importer_declare = (
7
7
  ): FunctionImporter => disable(importer) as FunctionImporter;
8
8
 
9
9
  const disable = (importer: FunctionImporter): MethodOnly<FunctionImporter> => ({
10
+ method: importer.method,
10
11
  empty: (): boolean => importer.empty(),
11
12
  use: (name: string): ts.Identifier => importer.use(name),
12
13
  useLocal: (name: string): string => importer.useLocal(name),
@@ -23,5 +24,9 @@ const disable = (importer: FunctionImporter): MethodOnly<FunctionImporter> => ({
23
24
  });
24
25
 
25
26
  type MethodOnly<T> = {
26
- [P in keyof T]: T[P] extends Function ? T[P] : never;
27
+ [P in keyof T]: T[P] extends Function
28
+ ? T[P]
29
+ : P extends "method"
30
+ ? T[P]
31
+ : never;
27
32
  };
@@ -17,14 +17,15 @@ export const application_array =
17
17
  const schema: IJsonSchema.IArray = {
18
18
  ...attribute,
19
19
  type: "array",
20
- items: application_schema(options)(false)(components)(array.value)(
21
- attribute,
22
- ),
20
+ items: application_schema(options)(false)(components)(
21
+ array.type.value,
22
+ )(attribute),
23
23
  };
24
24
 
25
- // RANGE
25
+ // COMMENT TAGS
26
26
  for (const tag of attribute["x-typia-metaTags"] ?? [])
27
27
  if (tag.kind === "minItems") schema.minItems = tag.value;
28
28
  else if (tag.kind === "maxItems") schema.maxItems = tag.value;
29
+
29
30
  return schema;
30
31
  };
@@ -14,9 +14,13 @@ export const application_default_string =
14
14
  const conditions: boolean[] = [];
15
15
 
16
16
  // OTHER ATOMIC TYPES
17
- if (meta.atomics.find((t) => t === "number" || t === "bigint"))
17
+ if (
18
+ meta.atomics.find(
19
+ (a) => a.type === "number" || a.type === "bigint",
20
+ )
21
+ )
18
22
  conditions.push(Number.isNaN(Number(str)));
19
- if (meta.atomics.find((t) => t === "boolean"))
23
+ if (meta.atomics.find((a) => a.type === "boolean"))
20
24
  conditions.push(str !== "true" && str !== "false");
21
25
  for (const constant of meta.constants)
22
26
  for (const value of constant.values)
@@ -1,5 +1,5 @@
1
1
  import { Metadata } from "../../schemas/metadata/Metadata";
2
- import { MetadataResolved } from "../../schemas/metadata/MetadataResolved";
2
+ import { MetadataEscaped } from "../../schemas/metadata/MetadataEscaped";
3
3
 
4
4
  import { IJsonComponents, IJsonSchema } from "../../module";
5
5
  import { JsonApplicationProgrammer } from "../json/JsonApplicationProgrammer";
@@ -9,7 +9,7 @@ export const application_resolved =
9
9
  (options: JsonApplicationProgrammer.IOptions) =>
10
10
  <BlockNever extends boolean>(blockNever: BlockNever) =>
11
11
  (components: IJsonComponents) =>
12
- (resolved: MetadataResolved) =>
12
+ (resolved: MetadataEscaped) =>
13
13
  (attribute: IJsonSchema.IAttribute): IJsonSchema[] => {
14
14
  const output = application_schema(options)(blockNever)(components)(
15
15
  resolved.returns,
@@ -46,9 +46,9 @@ const is_date =
46
46
 
47
47
  return (
48
48
  meta.natives.some((name) => name === "Date") ||
49
- meta.arrays.some((array) => is_date(visited)(array.value)) ||
49
+ meta.arrays.some((array) => is_date(visited)(array.type.value)) ||
50
50
  meta.tuples.some((tuple) =>
51
- tuple.elements.some(is_date(visited)),
51
+ tuple.type.elements.some(is_date(visited)),
52
52
  ) ||
53
53
  meta.aliases.some((alias) => is_date(visited)(alias.value))
54
54
  );
@@ -58,10 +58,10 @@ export const application_schema =
58
58
  : (schema: IJsonSchema) => union.push(schema);
59
59
 
60
60
  // toJSON() METHOD
61
- if (meta.resolved !== null)
61
+ if (meta.escaped !== null)
62
62
  union.push(
63
63
  ...application_resolved(options)(blockNever)(components)(
64
- meta.resolved,
64
+ meta.escaped,
65
65
  )(attribute),
66
66
  );
67
67
 
@@ -76,14 +76,14 @@ export const application_schema =
76
76
  )
77
77
  continue;
78
78
  else insert(application_constant(constant)(attribute));
79
- for (const type of meta.atomics)
80
- if (type === "bigint") throw new Error(NO_BIGINT);
81
- else if (AtomicPredicator.atomic(meta)(type) === false) continue;
79
+ for (const a of meta.atomics)
80
+ if (a.type === "bigint") throw new Error(NO_BIGINT);
81
+ else if (AtomicPredicator.atomic(meta)(a.type) === false) continue;
82
82
  else
83
83
  insert(
84
- type === "string"
84
+ a.type === "string"
85
85
  ? application_string(meta)(attribute)
86
- : type === "boolean"
86
+ : a.type === "boolean"
87
87
  ? application_boolean(attribute)
88
88
  : application_number(attribute),
89
89
  );
@@ -1,5 +1,5 @@
1
1
  import { IJsonSchema } from "../../schemas/json/IJsonSchema";
2
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
2
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
3
3
  import { Metadata } from "../../schemas/metadata/Metadata";
4
4
 
5
5
  import { application_default_string } from "./application_default_string";
@@ -40,5 +40,5 @@ export const application_string =
40
40
  return output;
41
41
  };
42
42
 
43
- const emendFormat = (tag: IMetadataTag.IFormat["value"]) =>
43
+ const emendFormat = (tag: IMetadataCommentTag.IFormat["value"]) =>
44
44
  tag === "datetime" ? "date-time" : tag;
@@ -18,37 +18,38 @@ export const application_tuple =
18
18
  ): IJsonSchema.ITuple | IJsonSchema.IArray => {
19
19
  const schema: IJsonSchema.ITuple = {
20
20
  type: "array",
21
- items: tuple.elements.map((meta, i) =>
21
+ items: tuple.type.elements.map((meta, i) =>
22
22
  application_schema(options)(false)(components)(
23
23
  meta.rest ?? meta,
24
24
  )({
25
25
  ...attribute,
26
26
  "x-typia-rest":
27
- i === tuple.elements.length - 1 && meta.rest !== null,
27
+ i === tuple.type.elements.length - 1 &&
28
+ meta.rest !== null,
28
29
  "x-typia-required": meta.required,
29
30
  "x-typia-optional": meta.optional,
30
31
  }),
31
32
  ),
32
33
  ...attribute,
33
- minItems: !!tuple.elements.at(-1)?.rest
34
- ? tuple.elements.length - 1
35
- : tuple.elements.filter((x) => !x.optional).length,
36
- maxItems: !!tuple.elements.at(-1)?.rest
34
+ minItems: !!tuple.type.elements.at(-1)?.rest
35
+ ? tuple.type.elements.length - 1
36
+ : tuple.type.elements.filter((x) => !x.optional).length,
37
+ maxItems: !!tuple.type.elements.at(-1)?.rest
37
38
  ? undefined
38
- : tuple.elements.length,
39
+ : tuple.type.elements.length,
39
40
  };
40
41
  if (options.purpose === "ajv")
41
- if (tuple.elements.length === 0) return schema;
42
- else if (!tuple.elements.at(-1)?.rest) return schema;
42
+ if (tuple.type.elements.length === 0) return schema;
43
+ else if (!tuple.type.elements.at(-1)?.rest) return schema;
43
44
 
44
45
  const wrapper: IJsonSchema.IArray = {
45
46
  ...schema,
46
47
  items: application_schema(options)(false)(components)(
47
- tuple.elements.reduce(
48
+ tuple.type.elements.reduce(
48
49
  (x, y) => Metadata.merge(x.rest ?? x, y.rest ?? y),
49
50
  Metadata.initialize(),
50
51
  ),
51
- )(tuple.recursive ? {} : attribute),
52
+ )(tuple.type.recursive ? {} : attribute),
52
53
  "x-typia-tuple": schema,
53
54
  minItems: schema.minItems,
54
55
  maxItems: schema.maxItems,
@@ -1,12 +1,12 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
3
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
4
4
 
5
5
  /**
6
6
  * @internal
7
7
  */
8
8
  export const check_array_length =
9
- (metaTags: IMetadataTag[]) => (input: ts.Expression) =>
9
+ (metaTags: IMetadataCommentTag[]) => (input: ts.Expression) =>
10
10
  metaTags
11
11
  .map((tag) => ({
12
12
  tag,
@@ -0,0 +1,45 @@
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
+
6
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
7
+ import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
8
+
9
+ import { IProject } from "../../transformers/IProject";
10
+
11
+ import { ICheckEntry } from "../helpers/ICheckEntry";
12
+ import { check_array_length } from "./check_array_length";
13
+
14
+ /**
15
+ * @internal
16
+ */
17
+ export const check_array_tags =
18
+ (project: IProject) =>
19
+ (matrix: IMetadataTypeTag[][], metaTags: IMetadataCommentTag[]) =>
20
+ (input: ts.Expression): ICheckEntry => ({
21
+ expression: is_array(project)(matrix)(input),
22
+ tags: matrix.length
23
+ ? []
24
+ : check_array_length(metaTags)(
25
+ IdentifierFactory.access(input)("length"),
26
+ ),
27
+ });
28
+
29
+ const is_array =
30
+ (project: IProject) =>
31
+ (matrix: IMetadataTypeTag[][]) =>
32
+ (input: ts.Expression) =>
33
+ matrix.length === 0
34
+ ? null
35
+ : matrix
36
+ .map((row) =>
37
+ row
38
+ .map((tag) =>
39
+ ExpressionFactory.transpile(project.context)(
40
+ tag.validate,
41
+ )(input),
42
+ )
43
+ .reduce((a, b) => ts.factory.createLogicalAnd(a, b)),
44
+ )
45
+ .reduce((a, b) => ts.factory.createLogicalOr(a, b));
@@ -2,22 +2,21 @@ import ts from "typescript";
2
2
 
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
 
5
- import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
5
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
6
+ import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
7
+
8
+ import { IProject } from "../../transformers/IProject";
7
9
 
8
- import { FunctionImporter } from "../helpers/FunctionImporeter";
9
10
  import { ICheckEntry } from "../helpers/ICheckEntry";
10
- import { check_custom } from "./check_custom";
11
11
 
12
12
  /**
13
13
  * @internal
14
14
  */
15
15
  export const check_bigint =
16
- (importer: FunctionImporter) =>
17
- (metaTags: IMetadataTag[]) =>
18
- (jsDocTag: IJsDocTagInfo[]) =>
16
+ (project: IProject) =>
17
+ (matrix: IMetadataTypeTag[][], metaTags: IMetadataCommentTag[]) =>
19
18
  (input: ts.Expression): ICheckEntry => {
20
- const entries: [IMetadataTag, ts.Expression][] = [];
19
+ const entries: [IMetadataCommentTag, ts.Expression][] = [];
21
20
  for (const tag of metaTags) {
22
21
  if (tag.kind === "type" && tag.value === "uint64")
23
22
  entries.push([
@@ -95,16 +94,45 @@ export const check_bigint =
95
94
  ]);
96
95
  }
97
96
  return {
98
- expression: ts.factory.createStrictEquality(
97
+ expression: is_bigint(project)(matrix)(input),
98
+ tags: matrix.length
99
+ ? []
100
+ : entries.map(([tag, expression]) => ({
101
+ expected: `bigint (@${tag.kind} ${tag.value})`,
102
+ expression,
103
+ })),
104
+ };
105
+ };
106
+
107
+ const is_bigint =
108
+ (project: IProject) =>
109
+ (matrix: IMetadataTypeTag[][]) =>
110
+ (input: ts.Expression) => {
111
+ // BASIC TYPEOF EXPRESSION
112
+ const conditions: ts.Expression[] = [
113
+ ts.factory.createStrictEquality(
99
114
  ts.factory.createStringLiteral("bigint"),
100
115
  ts.factory.createTypeOfExpression(input),
101
116
  ),
102
- tags: [
103
- ...entries.map(([tag, expression]) => ({
104
- expected: `bigint (@${tag.kind} ${tag.value})`,
105
- expression,
106
- })),
107
- ...check_custom("bigint")(importer)(jsDocTag)(input),
108
- ],
109
- };
117
+ ];
118
+
119
+ // ADJUST TYPED TAGS
120
+ if (matrix.length) {
121
+ const logic: ts.Expression = matrix
122
+ .map((row) =>
123
+ row
124
+ .map((tag) =>
125
+ ExpressionFactory.transpile(project.context)(
126
+ tag.validate,
127
+ )(input),
128
+ )
129
+ .reduce((a, b) => ts.factory.createLogicalAnd(a, b)),
130
+ )
131
+ .reduce((a, b) => ts.factory.createLogicalOr(a, b));
132
+ conditions.push(logic);
133
+ }
134
+
135
+ return conditions.length === 1
136
+ ? conditions[0]!
137
+ : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
110
138
  };