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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/factories/ExpressionFactory.d.ts +3 -1
  4. package/lib/factories/ExpressionFactory.js +25 -1
  5. package/lib/factories/ExpressionFactory.js.map +1 -1
  6. package/lib/factories/IdentifierFactory.d.ts +2 -1
  7. package/lib/factories/IdentifierFactory.js +11 -0
  8. package/lib/factories/IdentifierFactory.js.map +1 -1
  9. package/lib/factories/LiteralFactory.js +6 -2
  10. package/lib/factories/LiteralFactory.js.map +1 -1
  11. package/lib/factories/MetadataCollection.d.ts +7 -7
  12. package/lib/factories/MetadataCollection.js +4 -5
  13. package/lib/factories/MetadataCollection.js.map +1 -1
  14. package/lib/factories/MetadataCommentTagFactory.js +532 -0
  15. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  16. package/lib/factories/MetadataTypeTagFactory.d.ts +6 -0
  17. package/lib/factories/MetadataTypeTagFactory.js +207 -0
  18. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  19. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  20. package/lib/factories/NumericRangeFactory.js +34 -0
  21. package/lib/factories/NumericRangeFactory.js.map +1 -0
  22. package/lib/factories/ProtobufFactory.js +48 -16
  23. package/lib/factories/ProtobufFactory.js.map +1 -1
  24. package/lib/factories/internal/metadata/emend_metadata_atomics.js +12 -6
  25. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  26. package/lib/factories/internal/metadata/emplace_metadata_alias.js +1 -13
  27. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  28. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
  29. package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
  30. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
  31. package/lib/factories/internal/metadata/emplace_metadata_object.js +0 -1
  32. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  33. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
  34. package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
  35. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_collection.js +20 -12
  39. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  40. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
  41. package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +7 -8
  42. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
  43. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +140 -16
  44. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  45. package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
  46. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  48. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
  50. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  51. package/lib/functional/$any.js +2 -1
  52. package/lib/functional/$any.js.map +1 -1
  53. package/lib/functional/$clone.d.ts +2 -0
  54. package/lib/functional/$clone.js +8 -0
  55. package/lib/functional/$clone.js.map +1 -0
  56. package/lib/functional/Namespace.js +0 -16
  57. package/lib/functional/Namespace.js.map +1 -1
  58. package/lib/module.d.ts +2 -39
  59. package/lib/module.js +3 -17
  60. package/lib/module.js.map +1 -1
  61. package/lib/programmers/AssertProgrammer.js +28 -10
  62. package/lib/programmers/AssertProgrammer.js.map +1 -1
  63. package/lib/programmers/CheckerProgrammer.js +90 -68
  64. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  65. package/lib/programmers/FeatureProgrammer.d.ts +2 -4
  66. package/lib/programmers/FeatureProgrammer.js +6 -6
  67. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  68. package/lib/programmers/IsProgrammer.d.ts +1 -1
  69. package/lib/programmers/IsProgrammer.js +32 -21
  70. package/lib/programmers/IsProgrammer.js.map +1 -1
  71. package/lib/programmers/RandomProgrammer.js +187 -156
  72. package/lib/programmers/RandomProgrammer.js.map +1 -1
  73. package/lib/programmers/ValidateProgrammer.js +28 -10
  74. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  75. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  76. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  77. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  78. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  79. package/lib/programmers/helpers/ICheckEntry.d.ts +4 -3
  80. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  81. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  82. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  83. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  84. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  85. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  86. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  87. package/lib/programmers/helpers/RandomRanger.js +13 -33
  88. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  89. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  90. package/lib/programmers/helpers/UnionExplorer.js +46 -35
  91. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  92. package/lib/programmers/internal/application_alias.js +0 -1
  93. package/lib/programmers/internal/application_alias.js.map +1 -1
  94. package/lib/programmers/internal/application_array.js +60 -20
  95. package/lib/programmers/internal/application_array.js.map +1 -1
  96. package/lib/programmers/internal/application_default_string.js +2 -2
  97. package/lib/programmers/internal/application_default_string.js.map +1 -1
  98. package/lib/programmers/internal/application_number.js +95 -69
  99. package/lib/programmers/internal/application_number.js.map +1 -1
  100. package/lib/programmers/internal/application_object.js +0 -3
  101. package/lib/programmers/internal/application_object.js.map +1 -1
  102. package/lib/programmers/internal/application_resolved.js +2 -2
  103. package/lib/programmers/internal/application_resolved.js.map +1 -1
  104. package/lib/programmers/internal/application_schema.js +39 -22
  105. package/lib/programmers/internal/application_schema.js.map +1 -1
  106. package/lib/programmers/internal/application_string.js +56 -22
  107. package/lib/programmers/internal/application_string.js.map +1 -1
  108. package/lib/programmers/internal/application_tuple.js +10 -9
  109. package/lib/programmers/internal/application_tuple.js.map +1 -1
  110. package/lib/programmers/internal/check_array_length.js +25 -25
  111. package/lib/programmers/internal/check_array_length.js.map +1 -1
  112. package/lib/programmers/internal/check_bigint.js +20 -109
  113. package/lib/programmers/internal/check_bigint.js.map +1 -1
  114. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  115. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  116. package/lib/programmers/internal/check_number.js +57 -147
  117. package/lib/programmers/internal/check_number.js.map +1 -1
  118. package/lib/programmers/internal/check_string.js +21 -33
  119. package/lib/programmers/internal/check_string.js.map +1 -1
  120. package/lib/programmers/internal/check_template.js +31 -49
  121. package/lib/programmers/internal/check_template.js.map +1 -1
  122. package/lib/programmers/internal/check_union_array_like.js +7 -6
  123. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  124. package/lib/programmers/internal/feature_object_entries.js +1 -1
  125. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  126. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  127. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  128. package/lib/programmers/internal/random_custom.js +2 -2
  129. package/lib/programmers/internal/random_custom.js.map +1 -1
  130. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  131. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  132. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
  133. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  134. package/lib/programmers/json/JsonStringifyProgrammer.js +43 -32
  135. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  136. package/lib/programmers/misc/MiscCloneProgrammer.js +21 -17
  137. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  138. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  139. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  140. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  141. package/lib/programmers/misc/MiscLiteralsProgrammer.js +2 -2
  142. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  143. package/lib/programmers/misc/MiscPruneProgrammer.js +21 -17
  144. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  145. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +29 -49
  146. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  147. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  148. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  149. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  150. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  151. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  152. package/lib/schemas/metadata/IMetadata.d.ts +11 -4
  153. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  154. package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
  155. package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
  156. package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
  157. package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
  158. package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
  159. package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
  160. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  161. package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
  162. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  163. package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
  164. package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
  165. package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
  166. package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
  167. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +8 -0
  168. package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
  169. package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
  170. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  171. package/lib/schemas/metadata/Metadata.js +219 -159
  172. package/lib/schemas/metadata/Metadata.js.map +1 -1
  173. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  174. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  175. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  176. package/lib/schemas/metadata/MetadataArray.d.ts +8 -6
  177. package/lib/schemas/metadata/MetadataArray.js +48 -19
  178. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  179. package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
  180. package/lib/schemas/metadata/MetadataArrayType.js +36 -0
  181. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
  182. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  183. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  184. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  185. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  186. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  187. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  188. package/lib/schemas/metadata/MetadataTuple.d.ts +8 -8
  189. package/lib/schemas/metadata/MetadataTuple.js +4 -19
  190. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  191. package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
  192. package/lib/schemas/metadata/MetadataTupleType.js +40 -0
  193. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
  194. package/lib/tags/ExclusiveMaximum.d.ts +10 -0
  195. package/lib/tags/ExclusiveMaximum.js +3 -0
  196. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  197. package/lib/tags/ExclusiveMinimum.d.ts +10 -0
  198. package/lib/tags/ExclusiveMinimum.js +3 -0
  199. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  200. package/lib/tags/Format.d.ts +8 -0
  201. package/lib/{schemas/metadata/ICommentTag.js → tags/Format.js} +1 -1
  202. package/lib/tags/Format.js.map +1 -0
  203. package/lib/tags/MaxItems.d.ts +8 -0
  204. package/lib/{schemas/metadata/IMetadataTag.js → tags/MaxItems.js} +1 -1
  205. package/lib/tags/MaxItems.js.map +1 -0
  206. package/lib/tags/MaxLength.d.ts +8 -0
  207. package/lib/tags/MaxLength.js +3 -0
  208. package/lib/tags/MaxLength.js.map +1 -0
  209. package/lib/tags/Maximum.d.ts +10 -0
  210. package/lib/tags/Maximum.js +3 -0
  211. package/lib/tags/Maximum.js.map +1 -0
  212. package/lib/tags/MinItems.d.ts +8 -0
  213. package/lib/tags/MinItems.js +3 -0
  214. package/lib/tags/MinItems.js.map +1 -0
  215. package/lib/tags/MinLength.d.ts +8 -0
  216. package/lib/tags/MinLength.js +3 -0
  217. package/lib/tags/MinLength.js.map +1 -0
  218. package/lib/tags/Minimum.d.ts +10 -0
  219. package/lib/tags/Minimum.js +3 -0
  220. package/lib/tags/Minimum.js.map +1 -0
  221. package/lib/tags/MultipleOf.d.ts +10 -0
  222. package/lib/tags/MultipleOf.js +3 -0
  223. package/lib/tags/MultipleOf.js.map +1 -0
  224. package/lib/tags/Pattern.d.ts +7 -0
  225. package/lib/tags/Pattern.js +3 -0
  226. package/lib/tags/Pattern.js.map +1 -0
  227. package/lib/tags/TagBase.d.ts +14 -0
  228. package/lib/tags/TagBase.js +3 -0
  229. package/lib/tags/TagBase.js.map +1 -0
  230. package/lib/tags/Type.d.ts +14 -0
  231. package/lib/tags/Type.js +3 -0
  232. package/lib/tags/Type.js.map +1 -0
  233. package/lib/tags/index.d.ts +13 -0
  234. package/lib/tags/index.js +30 -0
  235. package/lib/tags/index.js.map +1 -0
  236. package/lib/transformers/FileTransformer.d.ts +1 -1
  237. package/lib/transformers/FileTransformer.js +15 -2
  238. package/lib/transformers/FileTransformer.js.map +1 -1
  239. package/lib/transformers/IProject.d.ts +1 -0
  240. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -2
  241. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  242. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  243. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  244. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  245. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  246. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  247. package/lib/typings/ProtobufAtomic.js +3 -0
  248. package/lib/typings/ProtobufAtomic.js.map +1 -0
  249. package/package.json +2 -2
  250. package/src/IRandomGenerator.ts +4 -3
  251. package/src/factories/ExpressionFactory.ts +46 -2
  252. package/src/factories/IdentifierFactory.ts +15 -0
  253. package/src/factories/LiteralFactory.ts +10 -3
  254. package/src/factories/MetadataCollection.ts +18 -13
  255. package/src/factories/MetadataCommentTagFactory.ts +583 -0
  256. package/src/factories/MetadataTypeTagFactory.ts +263 -0
  257. package/src/factories/NumericRangeFactory.ts +33 -0
  258. package/src/factories/ProtobufFactory.ts +34 -18
  259. package/src/factories/internal/metadata/emend_metadata_atomics.ts +12 -5
  260. package/src/factories/internal/metadata/emplace_metadata_alias.ts +0 -6
  261. package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
  262. package/src/factories/internal/metadata/emplace_metadata_object.ts +0 -1
  263. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
  264. package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
  265. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +7 -4
  266. package/src/factories/internal/metadata/iterate_metadata_collection.ts +23 -16
  267. package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +4 -8
  268. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +113 -16
  269. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
  270. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
  271. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
  272. package/src/functional/$any.ts +3 -1
  273. package/src/functional/$clone.ts +4 -0
  274. package/src/functional/Namespace.ts +0 -16
  275. package/src/module.ts +2 -55
  276. package/src/programmers/AssertProgrammer.ts +57 -21
  277. package/src/programmers/CheckerProgrammer.ts +81 -123
  278. package/src/programmers/FeatureProgrammer.ts +9 -31
  279. package/src/programmers/IsProgrammer.ts +53 -42
  280. package/src/programmers/RandomProgrammer.ts +242 -239
  281. package/src/programmers/ValidateProgrammer.ts +60 -21
  282. package/src/programmers/helpers/AtomicPredicator.ts +2 -2
  283. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  284. package/src/programmers/helpers/ICheckEntry.ts +4 -3
  285. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  286. package/src/programmers/helpers/RandomJoiner.ts +11 -33
  287. package/src/programmers/helpers/RandomRanger.ts +16 -51
  288. package/src/programmers/helpers/UnionExplorer.ts +46 -51
  289. package/src/programmers/internal/application_alias.ts +0 -1
  290. package/src/programmers/internal/application_array.ts +33 -10
  291. package/src/programmers/internal/application_default_string.ts +6 -2
  292. package/src/programmers/internal/application_number.ts +76 -70
  293. package/src/programmers/internal/application_object.ts +0 -3
  294. package/src/programmers/internal/application_resolved.ts +2 -2
  295. package/src/programmers/internal/application_schema.ts +38 -20
  296. package/src/programmers/internal/application_string.ts +33 -27
  297. package/src/programmers/internal/application_tuple.ts +12 -11
  298. package/src/programmers/internal/check_array_length.ts +34 -28
  299. package/src/programmers/internal/check_bigint.ts +26 -91
  300. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  301. package/src/programmers/internal/check_number.ts +83 -236
  302. package/src/programmers/internal/check_string.ts +37 -17
  303. package/src/programmers/internal/check_template.ts +17 -12
  304. package/src/programmers/internal/check_union_array_like.ts +4 -18
  305. package/src/programmers/internal/feature_object_entries.ts +12 -18
  306. package/src/programmers/internal/metadata_to_pattern.ts +4 -4
  307. package/src/programmers/internal/random_custom.ts +3 -3
  308. package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
  309. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
  310. package/src/programmers/json/JsonStringifyProgrammer.ts +46 -41
  311. package/src/programmers/misc/MiscCloneProgrammer.ts +23 -27
  312. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  313. package/src/programmers/misc/MiscLiteralsProgrammer.ts +2 -2
  314. package/src/programmers/misc/MiscPruneProgrammer.ts +24 -24
  315. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +40 -74
  316. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +154 -99
  317. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  318. package/src/schemas/json/IJsonSchema.ts +11 -38
  319. package/src/schemas/metadata/IMetadata.ts +11 -5
  320. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  321. package/src/schemas/metadata/IMetadataArray.ts +4 -7
  322. package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
  323. package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
  324. package/src/schemas/metadata/IMetadataCollection.ts +4 -4
  325. package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
  326. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  327. package/src/schemas/metadata/IMetadataTuple.ts +4 -7
  328. package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
  329. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -0
  330. package/src/schemas/metadata/Metadata.ts +121 -70
  331. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  332. package/src/schemas/metadata/MetadataArray.ts +28 -34
  333. package/src/schemas/metadata/MetadataArrayType.ts +57 -0
  334. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  335. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  336. package/src/schemas/metadata/MetadataTuple.ts +9 -35
  337. package/src/schemas/metadata/MetadataTupleType.ts +67 -0
  338. package/src/tags/ExclusiveMaximum.ts +13 -0
  339. package/src/tags/ExclusiveMinimum.ts +13 -0
  340. package/src/tags/Format.ts +30 -0
  341. package/src/tags/MaxItems.ts +9 -0
  342. package/src/tags/MaxLength.ts +9 -0
  343. package/src/tags/Maximum.ts +13 -0
  344. package/src/tags/MinItems.ts +9 -0
  345. package/src/tags/MinLength.ts +9 -0
  346. package/src/tags/Minimum.ts +13 -0
  347. package/src/tags/MultipleOf.ts +15 -0
  348. package/src/tags/Pattern.ts +8 -0
  349. package/src/tags/TagBase.ts +22 -0
  350. package/src/tags/Type.ts +27 -0
  351. package/src/tags/index.ts +13 -0
  352. package/src/transformers/FileTransformer.ts +6 -6
  353. package/src/transformers/IProject.ts +1 -0
  354. package/src/transformers/features/json/JsonApplicationTransformer.ts +3 -2
  355. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  356. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  357. package/src/typings/Atomic.ts +1 -0
  358. package/src/typings/ProtobufAtomic.ts +19 -0
  359. package/lib/CustomValidatorMap.d.ts +0 -110
  360. package/lib/CustomValidatorMap.js.map +0 -1
  361. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  362. package/lib/factories/MetadataTagFactory.js +0 -310
  363. package/lib/factories/MetadataTagFactory.js.map +0 -1
  364. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
  365. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
  366. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
  367. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
  368. package/lib/functional/$is_custom.d.ts +0 -2
  369. package/lib/functional/$is_custom.js +0 -13
  370. package/lib/functional/$is_custom.js.map +0 -1
  371. package/lib/functional/$is_date.d.ts +0 -1
  372. package/lib/functional/$is_date.js +0 -7
  373. package/lib/functional/$is_date.js.map +0 -1
  374. package/lib/functional/$is_datetime.d.ts +0 -1
  375. package/lib/functional/$is_datetime.js +0 -8
  376. package/lib/functional/$is_datetime.js.map +0 -1
  377. package/lib/functional/$is_email.d.ts +0 -1
  378. package/lib/functional/$is_email.js +0 -7
  379. package/lib/functional/$is_email.js.map +0 -1
  380. package/lib/functional/$is_ipv4.d.ts +0 -1
  381. package/lib/functional/$is_ipv4.js +0 -7
  382. package/lib/functional/$is_ipv4.js.map +0 -1
  383. package/lib/functional/$is_ipv6.d.ts +0 -1
  384. package/lib/functional/$is_ipv6.js +0 -7
  385. package/lib/functional/$is_ipv6.js.map +0 -1
  386. package/lib/functional/$is_url.d.ts +0 -1
  387. package/lib/functional/$is_url.js +0 -7
  388. package/lib/functional/$is_url.js.map +0 -1
  389. package/lib/functional/$is_uuid.d.ts +0 -1
  390. package/lib/functional/$is_uuid.js +0 -7
  391. package/lib/functional/$is_uuid.js.map +0 -1
  392. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  393. package/lib/programmers/internal/check_array.js +0 -44
  394. package/lib/programmers/internal/check_array.js.map +0 -1
  395. package/lib/programmers/internal/check_custom.d.ts +0 -1
  396. package/lib/programmers/internal/check_custom.js +0 -30
  397. package/lib/programmers/internal/check_custom.js.map +0 -1
  398. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  399. package/lib/programmers/internal/check_string_tags.js +0 -89
  400. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  401. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  402. package/lib/programmers/internal/get_comment_tags.js +0 -25
  403. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  404. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  405. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  406. package/lib/schemas/metadata/IMetadataTag.d.ts +0 -63
  407. package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
  408. package/src/CustomValidatorMap.ts +0 -126
  409. package/src/factories/MetadataTagFactory.ts +0 -364
  410. package/src/functional/$is_custom.ts +0 -14
  411. package/src/functional/$is_date.ts +0 -3
  412. package/src/functional/$is_datetime.ts +0 -2
  413. package/src/functional/$is_email.ts +0 -4
  414. package/src/functional/$is_ipv4.ts +0 -4
  415. package/src/functional/$is_ipv6.ts +0 -4
  416. package/src/functional/$is_url.ts +0 -4
  417. package/src/functional/$is_uuid.ts +0 -4
  418. package/src/programmers/internal/check_array.ts +0 -30
  419. package/src/programmers/internal/check_custom.ts +0 -31
  420. package/src/programmers/internal/check_string_tags.ts +0 -67
  421. package/src/programmers/internal/get_comment_tags.ts +0 -23
  422. package/src/schemas/metadata/ICommentTag.ts +0 -4
  423. package/src/schemas/metadata/IMetadataTag.ts +0 -112
  424. /package/lib/{programmers/internal/check_array.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -0,0 +1,10 @@
1
+ import { IMetadata } from "./IMetadata";
2
+
3
+ export interface IMetadataArrayType {
4
+ name: string;
5
+ value: IMetadata;
6
+
7
+ nullables: boolean[];
8
+ recursive: boolean;
9
+ index: number | null;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataAtomic {
4
+ type: "boolean" | "bigint" | "number" | "string";
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -1,11 +1,11 @@
1
1
  import { IMetadataAlias } from "./IMetadataAlias";
2
- import { IMetadataArray } from "./IMetadataArray";
2
+ import { IMetadataArrayType } from "./IMetadataArrayType";
3
3
  import { IMetadataObject } from "./IMetadataObject";
4
- import { IMetadataTuple } from "./IMetadataTuple";
4
+ import { IMetadataTupleType } from "./IMetadataTupleType";
5
5
 
6
6
  export interface IMetadataCollection {
7
7
  objects: IMetadataObject[];
8
8
  aliases: IMetadataAlias[];
9
- arrays: IMetadataArray[];
10
- tuples: IMetadataTuple[];
9
+ arrays: IMetadataArrayType[];
10
+ tuples: IMetadataTupleType[];
11
11
  }
@@ -1,7 +1,7 @@
1
1
  import { MetadataAlias } from "./MetadataAlias";
2
- import { MetadataArray } from "./MetadataArray";
2
+ import { MetadataArrayType } from "./MetadataArrayType";
3
3
  import { MetadataObject } from "./MetadataObject";
4
- import { MetadataTuple } from "./MetadataTuple";
4
+ import { MetadataTupleType } from "./MetadataTupleType";
5
5
 
6
6
  /**
7
7
  * @internal
@@ -9,6 +9,6 @@ import { MetadataTuple } from "./MetadataTuple";
9
9
  export interface IMetadataDictionary {
10
10
  objects: Map<string, MetadataObject>;
11
11
  aliases: Map<string, MetadataAlias>;
12
- arrays: Map<string, MetadataArray>;
13
- tuples: Map<string, MetadataTuple>;
12
+ arrays: Map<string, MetadataArrayType>;
13
+ tuples: Map<string, MetadataTupleType>;
14
14
  }
@@ -1,11 +1,9 @@
1
1
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
2
  import { IMetadata } from "./IMetadata";
3
- import { IMetadataTag } from "./IMetadataTag";
4
3
 
5
4
  export interface IMetadataProperty {
6
5
  key: IMetadata;
7
6
  value: IMetadata;
8
7
  description: string | null;
9
- tags: IMetadataTag[];
10
8
  jsDocTags: IJsDocTagInfo[];
11
9
  }
@@ -1,10 +1,7 @@
1
- import { IMetadata } from "./IMetadata";
1
+ import { IMetadataTupleType } from "./IMetadataTupleType";
2
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
3
 
3
4
  export interface IMetadataTuple {
4
- name: string;
5
- elements: IMetadata[];
6
-
7
- index: number | null;
8
- recursive: boolean;
9
- nullables: boolean[];
5
+ type: IMetadataTupleType;
6
+ tags: IMetadataTypeTag[][];
10
7
  }
@@ -0,0 +1,10 @@
1
+ import { IMetadata } from "./IMetadata";
2
+
3
+ export interface IMetadataTupleType {
4
+ name: string;
5
+ elements: IMetadata[];
6
+
7
+ index: number | null;
8
+ recursive: boolean;
9
+ nullables: boolean[];
10
+ }
@@ -0,0 +1,8 @@
1
+ export interface IMetadataTypeTag {
2
+ target: "bigint" | "number" | "string" | "array";
3
+ name: string;
4
+ kind: string;
5
+ value: any;
6
+ validate: string;
7
+ exclusive: boolean | string[];
8
+ }
@@ -1,4 +1,3 @@
1
- import { Atomic } from "../../typings/Atomic";
2
1
  import { ClassProperties } from "../../typings/ClassProperties";
3
2
  import { Writable } from "../../typings/Writable";
4
3
 
@@ -7,13 +6,17 @@ import { ArrayUtil } from "../../utils/ArrayUtil";
7
6
  import { IMetadata } from "./IMetadata";
8
7
  import { IMetadataCollection } from "./IMetadataCollection";
9
8
  import { IMetadataDictionary } from "./IMetadataDictionary";
9
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
10
10
  import { MetadataAlias } from "./MetadataAlias";
11
11
  import { MetadataArray } from "./MetadataArray";
12
+ import { MetadataArrayType } from "./MetadataArrayType";
13
+ import { MetadataAtomic } from "./MetadataAtomic";
12
14
  import { MetadataConstant } from "./MetadataConstant";
13
15
  import { MetadataEscaped } from "./MetadataEscaped";
14
16
  import { MetadataObject } from "./MetadataObject";
15
17
  import { MetadataProperty } from "./MetadataProperty";
16
18
  import { MetadataTuple } from "./MetadataTuple";
19
+ import { MetadataTupleType } from "./MetadataTupleType";
17
20
 
18
21
  export class Metadata {
19
22
  public any: boolean;
@@ -23,7 +26,7 @@ export class Metadata {
23
26
  public functional: boolean;
24
27
 
25
28
  public escaped: MetadataEscaped | null;
26
- public atomics: Atomic.Literal[];
29
+ public atomics: MetadataAtomic[];
27
30
  public constants: MetadataConstant[];
28
31
  public templates: Metadata[][];
29
32
 
@@ -115,16 +118,30 @@ export class Metadata {
115
118
  nullable: this.nullable,
116
119
  functional: this.functional,
117
120
 
118
- atomics: this.atomics.slice(),
119
- constants: JSON.parse(JSON.stringify(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
+ })),
120
131
  templates: this.templates.map((tpl) =>
121
132
  tpl.map((meta) => meta.toJSON()),
122
133
  ),
123
134
  escaped: this.escaped ? this.escaped.toJSON() : null,
124
135
 
125
136
  rest: this.rest ? this.rest.toJSON() : null,
126
- arrays: this.arrays.map((array) => array.name),
127
- tuples: this.tuples.map((tuple) => tuple.name),
137
+ arrays: this.arrays.map((array) => ({
138
+ name: array.type.name,
139
+ tags: array.tags.map((r) => r.slice()),
140
+ })),
141
+ tuples: this.tuples.map((tuple) => ({
142
+ name: tuple.type.name,
143
+ tags: tuple.tags.map((r) => r.slice()),
144
+ })),
128
145
  objects: this.objects.map((obj) => obj.name),
129
146
  aliases: this.aliases.map((alias) => alias.name),
130
147
 
@@ -157,13 +174,13 @@ export class Metadata {
157
174
  arrays: new Map(
158
175
  collection.arrays.map((arr) => [
159
176
  arr.name,
160
- MetadataArray._From_without_value(arr),
177
+ MetadataArrayType._From_without_value(arr),
161
178
  ]),
162
179
  ),
163
180
  tuples: new Map(
164
181
  collection.tuples.map((tpl) => [
165
182
  tpl.name,
166
- MetadataTuple._From_without_elements(tpl),
183
+ MetadataTupleType._From_without_elements(tpl),
167
184
  ]),
168
185
  ),
169
186
  };
@@ -204,8 +221,10 @@ export class Metadata {
204
221
  nullable: meta.nullable,
205
222
  functional: meta.functional,
206
223
 
207
- constants: JSON.parse(JSON.stringify(meta.constants)),
208
- atomics: meta.atomics.slice(),
224
+ constants: meta.constants.slice(),
225
+ atomics: meta.atomics.map((a) =>
226
+ MetadataAtomic.create({ type: a.type, tags: a.tags }),
227
+ ),
209
228
  templates: meta.templates.map((tpl) =>
210
229
  tpl.map((meta) => this._From(meta, dict)),
211
230
  ),
@@ -214,21 +233,27 @@ export class Metadata {
214
233
  : null,
215
234
 
216
235
  rest: meta.rest ? this._From(meta.rest, dict) : null,
217
- arrays: meta.arrays.map((id) => {
218
- const array = dict.arrays.get(id);
219
- if (array === undefined)
236
+ arrays: meta.arrays.map((ref) => {
237
+ const type = dict.arrays.get(ref.name);
238
+ if (type === undefined)
220
239
  throw new Error(
221
- `Error on Metadata.from(): failed to find array "${id}".`,
240
+ `Error on Metadata.from(): failed to find array "${ref.name}".`,
222
241
  );
223
- return array;
242
+ return MetadataArray.create({
243
+ type,
244
+ tags: ref.tags.map((row) => row.slice()),
245
+ });
224
246
  }),
225
- tuples: meta.tuples.map((id) => {
226
- const tuple = dict.tuples.get(id);
227
- if (tuple === undefined)
247
+ tuples: meta.tuples.map((t) => {
248
+ const type = dict.tuples.get(t.name);
249
+ if (type === undefined)
228
250
  throw new Error(
229
- `Error on Metadata.from(): failed to find tuple "${id}".`,
251
+ `Error on Metadata.from(): failed to find tuple "${t.name}".`,
230
252
  );
231
- return tuple;
253
+ return MetadataTuple.create({
254
+ type,
255
+ tags: t.tags.map((r) => r.slice()),
256
+ });
232
257
  }),
233
258
  objects: meta.objects.map((name) => {
234
259
  const found = dict.objects.get(name);
@@ -260,8 +285,7 @@ export class Metadata {
260
285
  ACCESSORS
261
286
  ----------------------------------------------------------- */
262
287
  public getName(): string {
263
- this.name_ ??= getName(this);
264
- return this.name_;
288
+ return (this.name_ ??= getName(this));
265
289
  }
266
290
 
267
291
  public empty(): boolean {
@@ -289,24 +313,6 @@ export class Metadata {
289
313
  );
290
314
  }
291
315
 
292
- /**
293
- * @internal
294
- */
295
- public binarySize(): number {
296
- return (
297
- new Set([
298
- ...this.atomics,
299
- ...this.constants.map((c) => c.type),
300
- ...(this.templates.length ? ["string"] : []),
301
- ]).size +
302
- this.arrays.length +
303
- this.tuples.length +
304
- this.natives.length +
305
- this.objects.length +
306
- this.maps.length
307
- );
308
- }
309
-
310
316
  public bucket(): number {
311
317
  return (
312
318
  (this.any ? 1 : 0) +
@@ -344,13 +350,6 @@ export class Metadata {
344
350
  return emended > 1;
345
351
  }
346
352
 
347
- /**
348
- * @internal
349
- */
350
- public isBinaryUnion(): boolean {
351
- return this.binarySize() > 1;
352
- }
353
-
354
353
  /**
355
354
  * @internal
356
355
  */
@@ -403,7 +402,7 @@ export namespace Metadata {
403
402
  //----
404
403
  // ATOMICS
405
404
  for (const atomic of x.atomics)
406
- if (y.atomics.includes(atomic)) return true;
405
+ if (y.atomics.some((ya) => atomic.type === ya.type)) return true;
407
406
 
408
407
  // CONSTANTS
409
408
  for (const constant of x.constants) {
@@ -440,7 +439,7 @@ export namespace Metadata {
440
439
  for (const ya of y.arrays)
441
440
  if (
442
441
  !x.arrays.some((xa) =>
443
- covers(xa.value, ya.value, level + 1),
442
+ covers(xa.type.value, ya.type.value, level + 1),
444
443
  )
445
444
  ) {
446
445
  return false;
@@ -449,14 +448,15 @@ export namespace Metadata {
449
448
  // TUPLES
450
449
  for (const yt of y.tuples)
451
450
  if (
452
- yt.elements.length !== 0 &&
451
+ yt.type.elements.length !== 0 &&
453
452
  x.tuples.some(
454
453
  (xt) =>
455
- xt.elements.length >= yt.elements.length &&
456
- xt.elements
457
- .slice(yt.elements.length)
454
+ xt.type.elements.length >=
455
+ yt.type.elements.length &&
456
+ xt.type.elements
457
+ .slice(yt.type.elements.length)
458
458
  .every((xv, i) =>
459
- covers(xv, yt.elements[i]!, level + 1),
459
+ covers(xv, yt.type.elements[i]!, level + 1),
460
460
  ),
461
461
  ) === false
462
462
  )
@@ -485,12 +485,16 @@ export namespace Metadata {
485
485
  // VALUES
486
486
  //----
487
487
  // ATOMICS
488
- if (y.atomics.some((atomic) => x.atomics.includes(atomic) === false))
488
+ if (
489
+ y.atomics.some(
490
+ (ya) => x.atomics.some((xa) => xa.type === ya.type) === false,
491
+ )
492
+ )
489
493
  return false;
490
494
 
491
495
  // CONSTANTS
492
496
  for (const yc of y.constants) {
493
- if (x.atomics.some((type) => yc.type === type)) continue;
497
+ if (x.atomics.some((atom) => yc.type === atom.type)) continue;
494
498
  const xc: MetadataConstant | undefined = x.constants.find(
495
499
  (elem) => elem.type === yc.type,
496
500
  );
@@ -523,8 +527,7 @@ export namespace Metadata {
523
527
 
524
528
  escaped:
525
529
  x.escaped !== null && y.escaped !== null
526
- ? //? merge(x.resolved, y.resolved)
527
- MetadataEscaped.create({
530
+ ? MetadataEscaped.create({
528
531
  original: merge(
529
532
  x.escaped.original,
530
533
  y.escaped.original,
@@ -532,7 +535,11 @@ export namespace Metadata {
532
535
  returns: merge(x.escaped.returns, y.escaped.returns),
533
536
  })
534
537
  : x.escaped ?? y.escaped,
535
- atomics: [...new Set([...x.atomics, ...y.atomics])],
538
+ atomics: mergeTaggedTypes({
539
+ container: x.atomics,
540
+ equals: (x, y) => x.type === y.type,
541
+ getter: (x) => x.tags,
542
+ })(y.atomics),
536
543
  constants: [...x.constants],
537
544
  templates: x.templates.slice(),
538
545
 
@@ -540,8 +547,17 @@ export namespace Metadata {
540
547
  x.rest !== null && y.rest !== null
541
548
  ? merge(x.rest, y.rest)
542
549
  : x.rest ?? y.rest,
543
- arrays: x.arrays.slice(),
544
- tuples: x.tuples.slice(),
550
+ // arrays: x.arrays.slice(),
551
+ arrays: mergeTaggedTypes({
552
+ container: x.arrays,
553
+ equals: (x, y) => x.type.name === y.type.name,
554
+ getter: (x) => x.tags,
555
+ })(y.arrays),
556
+ tuples: mergeTaggedTypes({
557
+ container: x.tuples,
558
+ equals: (x, y) => x.type.name === y.type.name,
559
+ getter: (x) => x.tags,
560
+ })(y.tuples),
545
561
  objects: x.objects.slice(),
546
562
  aliases: x.aliases.slice(),
547
563
 
@@ -561,10 +577,6 @@ export namespace Metadata {
561
577
  for (const value of constant.values)
562
578
  ArrayUtil.add(target.values, value);
563
579
  }
564
- for (const array of y.arrays)
565
- ArrayUtil.set(output.arrays, array, (elem) => elem.name);
566
- for (const tuple of y.tuples)
567
- ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
568
580
  for (const obj of y.objects)
569
581
  ArrayUtil.set(output.objects, obj, (elem) => elem.name);
570
582
  for (const alias of y.aliases)
@@ -584,12 +596,16 @@ const getName = (metadata: Metadata): string => {
584
596
  if (metadata.isRequired() === false) elements.push("undefined");
585
597
 
586
598
  // ATOMIC
587
- for (const type of metadata.atomics) {
588
- elements.push(type);
599
+ for (const atom of metadata.atomics) {
600
+ elements.push(atom.getName());
589
601
  }
590
602
  for (const constant of metadata.constants)
591
603
  for (const value of constant.values)
592
- elements.push(JSON.stringify(value));
604
+ elements.push(
605
+ constant.type === "string"
606
+ ? JSON.stringify(value)
607
+ : value.toString(),
608
+ );
593
609
  for (const template of metadata.templates)
594
610
  elements.push(
595
611
  "`" +
@@ -613,8 +629,8 @@ const getName = (metadata: Metadata): string => {
613
629
 
614
630
  // INSTANCES
615
631
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
616
- for (const tuple of metadata.tuples) elements.push(tuple.name);
617
- for (const array of metadata.arrays) elements.push(array.name);
632
+ for (const tuple of metadata.tuples) elements.push(tuple.type.name);
633
+ for (const array of metadata.arrays) elements.push(array.getName());
618
634
  for (const object of metadata.objects) elements.push(object.name);
619
635
  for (const alias of metadata.aliases) elements.push(alias.name);
620
636
  if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
@@ -632,3 +648,38 @@ export namespace Metadata {
632
648
  value: Metadata;
633
649
  }
634
650
  }
651
+
652
+ const mergeTaggedTypes =
653
+ <T>(props: {
654
+ container: T[];
655
+ equals: (x: T, y: T) => boolean;
656
+ getter: (x: T) => IMetadataTypeTag[][];
657
+ }) =>
658
+ (opposite: T[]) => {
659
+ const output: T[] = [...props.container];
660
+ for (const elem of opposite) {
661
+ const equal = props.container.find((x) => props.equals(x, elem));
662
+ if (equal === undefined) {
663
+ output.push(elem);
664
+ continue;
665
+ }
666
+
667
+ const matrix: string[][] = props
668
+ .getter(equal)
669
+ .map((tags) => tags.map((t) => t.name))
670
+ .sort();
671
+ for (const tags of props.getter(elem)) {
672
+ const names: string[] = tags.map((t) => t.name).sort();
673
+ if (
674
+ matrix.some(
675
+ (m) =>
676
+ m.length === names.length &&
677
+ m.every((s, i) => s === names[i]),
678
+ )
679
+ )
680
+ continue;
681
+ props.getter(equal).push(tags);
682
+ }
683
+ }
684
+ return output;
685
+ };
@@ -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 { IMetadataTag } from "./IMetadataTag";
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: IMetadataTag[];
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,55 +1,49 @@
1
1
  import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IMetadataArray } from "./IMetadataArray";
4
- import { Metadata } from "./Metadata";
4
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
5
+ import { MetadataArrayType } from "./MetadataArrayType";
5
6
 
6
7
  export class MetadataArray {
7
- public readonly name: string;
8
- public readonly value: Metadata;
9
- public readonly nullables: boolean[];
10
- public readonly recursive: boolean;
11
- public readonly index: number | null;
8
+ public readonly type: MetadataArrayType;
9
+ public readonly tags: IMetadataTypeTag[][];
10
+
11
+ private name_?: string;
12
12
 
13
13
  /**
14
14
  * @hidden
15
15
  */
16
16
  private constructor(props: ClassProperties<MetadataArray>) {
17
- this.name = props.name;
18
- this.value = props.value;
19
- this.index = props.index;
20
- this.recursive = props.recursive;
21
- this.nullables = props.nullables;
22
- }
23
-
24
- /**
25
- * @internal
26
- */
27
- public static _From_without_value(
28
- props: Omit<IMetadataArray, "value">,
29
- ): MetadataArray {
30
- return this.create({
31
- name: props.name,
32
- value: null!,
33
- index: props.index,
34
- recursive: props.recursive,
35
- nullables: props.nullables,
36
- });
17
+ this.type = props.type;
18
+ this.tags = props.tags;
37
19
  }
38
20
 
39
- /**
40
- * @internal
41
- */
42
21
  public static create(props: ClassProperties<MetadataArray>): MetadataArray {
43
22
  return new MetadataArray(props);
44
23
  }
45
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
+
46
43
  public toJSON(): IMetadataArray {
47
44
  return {
48
- name: this.name,
49
- value: this.value.toJSON(),
50
- nullables: this.nullables,
51
- recursive: this.recursive,
52
- index: this.index,
45
+ type: this.type.toJSON(),
46
+ tags: this.tags.map((row) => row.slice()),
53
47
  };
54
48
  }
55
49
  }
@@ -0,0 +1,57 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataArrayType } from "./IMetadataArrayType";
4
+ import { Metadata } from "./Metadata";
5
+
6
+ export class MetadataArrayType {
7
+ public readonly name: string;
8
+ public readonly value: Metadata;
9
+ public readonly nullables: boolean[];
10
+ public readonly recursive: boolean;
11
+ public readonly index: number | null;
12
+
13
+ /**
14
+ * @hidden
15
+ */
16
+ private constructor(props: ClassProperties<MetadataArrayType>) {
17
+ this.name = props.name;
18
+ this.value = props.value;
19
+ this.index = props.index;
20
+ this.recursive = props.recursive;
21
+ this.nullables = props.nullables;
22
+ }
23
+
24
+ /**
25
+ * @internal
26
+ */
27
+ public static _From_without_value(
28
+ props: Omit<IMetadataArrayType, "value">,
29
+ ): MetadataArrayType {
30
+ return this.create({
31
+ name: props.name,
32
+ value: null!,
33
+ index: props.index,
34
+ recursive: props.recursive,
35
+ nullables: props.nullables,
36
+ });
37
+ }
38
+
39
+ /**
40
+ * @internal
41
+ */
42
+ public static create(
43
+ props: ClassProperties<MetadataArrayType>,
44
+ ): MetadataArrayType {
45
+ return new MetadataArrayType(props);
46
+ }
47
+
48
+ public toJSON(): IMetadataArrayType {
49
+ return {
50
+ name: this.name,
51
+ value: this.value.toJSON(),
52
+ nullables: this.nullables,
53
+ recursive: this.recursive,
54
+ index: this.index,
55
+ };
56
+ }
57
+ }