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,5 +1,5 @@
1
1
  import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
- import { IMetadataTag } from "../metadata/IMetadataTag";
2
+ import { IMetadataCommentTag } from "../metadata/IMetadataCommentTag";
3
3
 
4
4
  import { Atomic } from "../../typings/Atomic";
5
5
 
@@ -124,7 +124,7 @@ export namespace IJsonSchema {
124
124
  deprecated?: boolean;
125
125
  title?: string;
126
126
  description?: string;
127
- "x-typia-metaTags"?: IMetadataTag[];
127
+ "x-typia-metaTags"?: IMetadataCommentTag[];
128
128
  "x-typia-jsDocTags"?: IJsDocTagInfo[];
129
129
  "x-typia-required"?: boolean;
130
130
  "x-typia-optional"?: boolean;
@@ -1,8 +1,8 @@
1
- import { Atomic } from "../../typings/Atomic";
2
-
1
+ import { IMetadataAtomic } from "./IMetadataAtomic";
3
2
  import { IMetadataConstant } from "./IMetadataConstant";
4
3
  import { IMetadataEntry } from "./IMetadataEntry";
5
- import { IMetadataResolved } from "./IMetadataResolved";
4
+ import { IMetadataEscaped } from "./IMetadataEscaped";
5
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
6
6
 
7
7
  export interface IMetadata {
8
8
  any: boolean;
@@ -11,14 +11,20 @@ export interface IMetadata {
11
11
  nullable: boolean;
12
12
  functional: boolean;
13
13
 
14
- atomics: Atomic.Literal[];
14
+ atomics: IMetadataAtomic[];
15
15
  constants: IMetadataConstant[];
16
16
  templates: IMetadata[][];
17
- resolved: IMetadataResolved | null;
17
+ escaped: IMetadataEscaped | null;
18
18
 
19
19
  rest: IMetadata | null;
20
- arrays: string[];
21
- tuples: string[];
20
+ arrays: {
21
+ name: string;
22
+ tags: IMetadataTypeTag[][];
23
+ }[];
24
+ tuples: {
25
+ name: string;
26
+ tags: IMetadataTypeTag[][];
27
+ }[];
22
28
  objects: string[];
23
29
  aliases: string[];
24
30
 
@@ -1,6 +1,6 @@
1
1
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
2
  import { IMetadata } from "./IMetadata";
3
- import { IMetadataTag } from "./IMetadataTag";
3
+ import { IMetadataCommentTag } from "./IMetadataCommentTag";
4
4
 
5
5
  export interface IMetadataAlias {
6
6
  name: string;
@@ -8,7 +8,7 @@ export interface IMetadataAlias {
8
8
  nullables: boolean[];
9
9
 
10
10
  description: string | null;
11
- tags: IMetadataTag[];
11
+ tags: IMetadataCommentTag[];
12
12
  jsDocTags: IJsDocTagInfo[];
13
13
  recursive: boolean;
14
14
  }
@@ -1,10 +1,7 @@
1
- import { IMetadata } from "./IMetadata";
1
+ import { IMetadataArrayType } from "./IMetadataArrayType";
2
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
3
 
3
4
  export interface IMetadataArray {
4
- name: string;
5
- value: IMetadata;
6
-
7
- nullables: boolean[];
8
- recursive: boolean;
9
- index: number | null;
5
+ type: IMetadataArrayType;
6
+ tags: IMetadataTypeTag[][];
10
7
  }
@@ -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,24 +1,24 @@
1
- export type IMetadataTag =
1
+ export type IMetadataCommentTag =
2
2
  // NUMBER
3
- | IMetadataTag.INumberType
4
- | IMetadataTag.IMinimum
5
- | IMetadataTag.IMaximum
6
- | IMetadataTag.IExclusiveMinimum
7
- | IMetadataTag.IExclusiveMaximum
8
- | IMetadataTag.IMultipleOf
9
- | IMetadataTag.IStep
3
+ | IMetadataCommentTag.INumberType
4
+ | IMetadataCommentTag.IMinimum
5
+ | IMetadataCommentTag.IMaximum
6
+ | IMetadataCommentTag.IExclusiveMinimum
7
+ | IMetadataCommentTag.IExclusiveMaximum
8
+ | IMetadataCommentTag.IMultipleOf
9
+ | IMetadataCommentTag.IStep
10
10
  // STRING
11
- | IMetadataTag.IFormat
12
- | IMetadataTag.IPattern
13
- | IMetadataTag.ILength
14
- | IMetadataTag.IMinLength
15
- | IMetadataTag.IMaxLength
11
+ | IMetadataCommentTag.IFormat
12
+ | IMetadataCommentTag.IPattern
13
+ | IMetadataCommentTag.ILength
14
+ | IMetadataCommentTag.IMinLength
15
+ | IMetadataCommentTag.IMaxLength
16
16
  // ARRAY
17
- | IMetadataTag.IItems
18
- | IMetadataTag.IMinItems
19
- | IMetadataTag.IMaxItems;
17
+ | IMetadataCommentTag.IItems
18
+ | IMetadataCommentTag.IMinItems
19
+ | IMetadataCommentTag.IMaxItems;
20
20
 
21
- export namespace IMetadataTag {
21
+ export namespace IMetadataCommentTag {
22
22
  /* -----------------------------------------------------------
23
23
  NUMBER
24
24
  ----------------------------------------------------------- */
@@ -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,6 +1,6 @@
1
1
  import { IMetadata } from "./IMetadata";
2
2
 
3
- export interface IMetadataResolved {
3
+ export interface IMetadataEscaped {
4
4
  original: IMetadata;
5
5
  returns: IMetadata;
6
6
  }
@@ -1,11 +1,11 @@
1
1
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
2
  import { IMetadata } from "./IMetadata";
3
- import { IMetadataTag } from "./IMetadataTag";
3
+ import { IMetadataCommentTag } from "./IMetadataCommentTag";
4
4
 
5
5
  export interface IMetadataProperty {
6
6
  key: IMetadata;
7
7
  value: IMetadata;
8
8
  description: string | null;
9
- tags: IMetadataTag[];
9
+ tags: IMetadataCommentTag[];
10
10
  jsDocTags: IJsDocTagInfo[];
11
11
  }
@@ -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,6 @@
1
+ export interface IMetadataTypeTag {
2
+ name: string;
3
+ kind: string;
4
+ value: any;
5
+ validate: string;
6
+ }
@@ -1,19 +1,24 @@
1
- import { Atomic } from "../../typings/Atomic";
1
+ import { $clone } from "../../functional/$clone";
2
+
2
3
  import { ClassProperties } from "../../typings/ClassProperties";
3
4
  import { Writable } from "../../typings/Writable";
4
5
 
5
6
  import { ArrayUtil } from "../../utils/ArrayUtil";
6
7
 
7
8
  import { IMetadata } from "./IMetadata";
9
+ import { IMetadataAtomic } from "./IMetadataAtomic";
8
10
  import { IMetadataCollection } from "./IMetadataCollection";
9
11
  import { IMetadataDictionary } from "./IMetadataDictionary";
12
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
10
13
  import { MetadataAlias } from "./MetadataAlias";
11
14
  import { MetadataArray } from "./MetadataArray";
15
+ import { MetadataArrayType } from "./MetadataArrayType";
12
16
  import { MetadataConstant } from "./MetadataConstant";
17
+ import { MetadataEscaped } from "./MetadataEscaped";
13
18
  import { MetadataObject } from "./MetadataObject";
14
19
  import { MetadataProperty } from "./MetadataProperty";
15
- import { MetadataResolved } from "./MetadataResolved";
16
20
  import { MetadataTuple } from "./MetadataTuple";
21
+ import { MetadataTupleType } from "./MetadataTupleType";
17
22
 
18
23
  export class Metadata {
19
24
  public any: boolean;
@@ -22,8 +27,8 @@ export class Metadata {
22
27
  public nullable: boolean;
23
28
  public functional: boolean;
24
29
 
25
- public resolved: MetadataResolved | null;
26
- public atomics: Atomic.Literal[];
30
+ public escaped: MetadataEscaped | null;
31
+ public atomics: IMetadataAtomic[];
27
32
  public constants: MetadataConstant[];
28
33
  public templates: Metadata[][];
29
34
 
@@ -55,7 +60,7 @@ export class Metadata {
55
60
  this.nullable = props.nullable;
56
61
  this.functional = props.functional;
57
62
 
58
- this.resolved = props.resolved;
63
+ this.escaped = props.escaped;
59
64
  this.atomics = props.atomics;
60
65
  this.constants = props.constants;
61
66
  this.templates = props.templates;
@@ -89,7 +94,7 @@ export class Metadata {
89
94
  optional: false,
90
95
  functional: false,
91
96
 
92
- resolved: null,
97
+ escaped: null,
93
98
  constants: [],
94
99
  atomics: [],
95
100
  templates: [],
@@ -115,16 +120,22 @@ export class Metadata {
115
120
  nullable: this.nullable,
116
121
  functional: this.functional,
117
122
 
118
- atomics: this.atomics.slice(),
119
- constants: JSON.parse(JSON.stringify(this.constants)),
123
+ atomics: $clone(this.atomics),
124
+ constants: $clone(this.constants),
120
125
  templates: this.templates.map((tpl) =>
121
126
  tpl.map((meta) => meta.toJSON()),
122
127
  ),
123
- resolved: this.resolved ? this.resolved.toJSON() : null,
128
+ escaped: this.escaped ? this.escaped.toJSON() : null,
124
129
 
125
130
  rest: this.rest ? this.rest.toJSON() : null,
126
- arrays: this.arrays.map((array) => array.name),
127
- tuples: this.tuples.map((tuple) => tuple.name),
131
+ arrays: this.arrays.map((array) => ({
132
+ name: array.type.name,
133
+ tags: $clone(array.tags),
134
+ })),
135
+ tuples: this.tuples.map((tuple) => ({
136
+ name: tuple.type.name,
137
+ tags: $clone(tuple.tags),
138
+ })),
128
139
  objects: this.objects.map((obj) => obj.name),
129
140
  aliases: this.aliases.map((alias) => alias.name),
130
141
 
@@ -157,13 +168,13 @@ export class Metadata {
157
168
  arrays: new Map(
158
169
  collection.arrays.map((arr) => [
159
170
  arr.name,
160
- MetadataArray._From_without_value(arr),
171
+ MetadataArrayType._From_without_value(arr),
161
172
  ]),
162
173
  ),
163
174
  tuples: new Map(
164
175
  collection.tuples.map((tpl) => [
165
176
  tpl.name,
166
- MetadataTuple._From_without_elements(tpl),
177
+ MetadataTupleType._From_without_elements(tpl),
167
178
  ]),
168
179
  ),
169
180
  };
@@ -204,31 +215,37 @@ export class Metadata {
204
215
  nullable: meta.nullable,
205
216
  functional: meta.functional,
206
217
 
207
- constants: JSON.parse(JSON.stringify(meta.constants)),
208
- atomics: meta.atomics.slice(),
218
+ constants: $clone(meta.constants),
219
+ atomics: $clone(meta.atomics),
209
220
  templates: meta.templates.map((tpl) =>
210
221
  tpl.map((meta) => this._From(meta, dict)),
211
222
  ),
212
- resolved: meta.resolved
213
- ? MetadataResolved._From(meta.resolved, dict)
223
+ escaped: meta.escaped
224
+ ? MetadataEscaped._From(meta.escaped, dict)
214
225
  : null,
215
226
 
216
227
  rest: meta.rest ? this._From(meta.rest, dict) : null,
217
- arrays: meta.arrays.map((id) => {
218
- const array = dict.arrays.get(id);
219
- if (array === undefined)
228
+ arrays: meta.arrays.map((ref) => {
229
+ const type = dict.arrays.get(ref.name);
230
+ if (type === undefined)
220
231
  throw new Error(
221
- `Error on Metadata.from(): failed to find array "${id}".`,
232
+ `Error on Metadata.from(): failed to find array "${ref.name}".`,
222
233
  );
223
- return array;
234
+ return MetadataArray.create({
235
+ type,
236
+ tags: $clone(ref.tags),
237
+ });
224
238
  }),
225
- tuples: meta.tuples.map((id) => {
226
- const tuple = dict.tuples.get(id);
227
- if (tuple === undefined)
239
+ tuples: meta.tuples.map((t) => {
240
+ const type = dict.tuples.get(t.name);
241
+ if (type === undefined)
228
242
  throw new Error(
229
- `Error on Metadata.from(): failed to find tuple "${id}".`,
243
+ `Error on Metadata.from(): failed to find tuple "${t.name}".`,
230
244
  );
231
- return tuple;
245
+ return MetadataTuple.create({
246
+ type,
247
+ tags: $clone(t.tags),
248
+ });
232
249
  }),
233
250
  objects: meta.objects.map((name) => {
234
251
  const found = dict.objects.get(name);
@@ -271,7 +288,7 @@ export class Metadata {
271
288
  public size(): number {
272
289
  return (
273
290
  (this.any ? 1 : 0) +
274
- (this.resolved ? 1 : 0) +
291
+ (this.escaped ? 1 : 0) +
275
292
  (this.functional ? 1 : 0) +
276
293
  (this.rest ? this.rest.size() : 0) +
277
294
  this.templates.length +
@@ -294,8 +311,8 @@ export class Metadata {
294
311
  */
295
312
  public binarySize(): number {
296
313
  return (
297
- new Set([
298
- ...this.atomics,
314
+ new Set<string>([
315
+ ...this.atomics.map((a) => a.type),
299
316
  ...this.constants.map((c) => c.type),
300
317
  ...(this.templates.length ? ["string"] : []),
301
318
  ]).size +
@@ -310,7 +327,7 @@ export class Metadata {
310
327
  public bucket(): number {
311
328
  return (
312
329
  (this.any ? 1 : 0) +
313
- (this.resolved ? 1 : 0) +
330
+ (this.escaped ? 1 : 0) +
314
331
  (this.functional ? 1 : 0) +
315
332
  (this.templates.length ? 1 : 0) +
316
333
  (this.atomics.length ? 1 : 0) +
@@ -403,7 +420,7 @@ export namespace Metadata {
403
420
  //----
404
421
  // ATOMICS
405
422
  for (const atomic of x.atomics)
406
- if (y.atomics.includes(atomic)) return true;
423
+ if (y.atomics.some((ya) => atomic.type === ya.type)) return true;
407
424
 
408
425
  // CONSTANTS
409
426
  for (const constant of x.constants) {
@@ -440,7 +457,7 @@ export namespace Metadata {
440
457
  for (const ya of y.arrays)
441
458
  if (
442
459
  !x.arrays.some((xa) =>
443
- covers(xa.value, ya.value, level + 1),
460
+ covers(xa.type.value, ya.type.value, level + 1),
444
461
  )
445
462
  ) {
446
463
  return false;
@@ -449,14 +466,15 @@ export namespace Metadata {
449
466
  // TUPLES
450
467
  for (const yt of y.tuples)
451
468
  if (
452
- yt.elements.length !== 0 &&
469
+ yt.type.elements.length !== 0 &&
453
470
  x.tuples.some(
454
471
  (xt) =>
455
- xt.elements.length >= yt.elements.length &&
456
- xt.elements
457
- .slice(yt.elements.length)
472
+ xt.type.elements.length >=
473
+ yt.type.elements.length &&
474
+ xt.type.elements
475
+ .slice(yt.type.elements.length)
458
476
  .every((xv, i) =>
459
- covers(xv, yt.elements[i]!, level + 1),
477
+ covers(xv, yt.type.elements[i]!, level + 1),
460
478
  ),
461
479
  ) === false
462
480
  )
@@ -485,12 +503,16 @@ export namespace Metadata {
485
503
  // VALUES
486
504
  //----
487
505
  // ATOMICS
488
- if (y.atomics.some((atomic) => x.atomics.includes(atomic) === false))
506
+ if (
507
+ y.atomics.some(
508
+ (ya) => x.atomics.some((xa) => xa.type === ya.type) === false,
509
+ )
510
+ )
489
511
  return false;
490
512
 
491
513
  // CONSTANTS
492
514
  for (const yc of y.constants) {
493
- if (x.atomics.some((type) => yc.type === type)) continue;
515
+ if (x.atomics.some((atom) => yc.type === atom.type)) continue;
494
516
  const xc: MetadataConstant | undefined = x.constants.find(
495
517
  (elem) => elem.type === yc.type,
496
518
  );
@@ -521,21 +543,21 @@ export namespace Metadata {
521
543
  optional: x.optional || y.optional,
522
544
  functional: x.functional || y.functional,
523
545
 
524
- resolved:
525
- x.resolved !== null && y.resolved !== null
526
- ? //? merge(x.resolved, y.resolved)
527
- MetadataResolved.create({
546
+ escaped:
547
+ x.escaped !== null && y.escaped !== null
548
+ ? MetadataEscaped.create({
528
549
  original: merge(
529
- x.resolved.original,
530
- y.resolved.original,
531
- ),
532
- returns: merge(
533
- x.resolved.returns,
534
- y.resolved.returns,
550
+ x.escaped.original,
551
+ y.escaped.original,
535
552
  ),
553
+ returns: merge(x.escaped.returns, y.escaped.returns),
536
554
  })
537
- : x.resolved ?? y.resolved,
538
- atomics: [...new Set([...x.atomics, ...y.atomics])],
555
+ : x.escaped ?? y.escaped,
556
+ atomics: mergeTaggedTypes({
557
+ container: x.atomics,
558
+ equals: (x, y) => x.type === y.type,
559
+ getter: (x) => x.tags,
560
+ })(y.atomics),
539
561
  constants: [...x.constants],
540
562
  templates: x.templates.slice(),
541
563
 
@@ -543,8 +565,17 @@ export namespace Metadata {
543
565
  x.rest !== null && y.rest !== null
544
566
  ? merge(x.rest, y.rest)
545
567
  : x.rest ?? y.rest,
546
- arrays: x.arrays.slice(),
547
- tuples: x.tuples.slice(),
568
+ // arrays: x.arrays.slice(),
569
+ arrays: mergeTaggedTypes({
570
+ container: x.arrays,
571
+ equals: (x, y) => x.type.name === y.type.name,
572
+ getter: (x) => x.tags,
573
+ })(y.arrays),
574
+ tuples: mergeTaggedTypes({
575
+ container: x.tuples,
576
+ equals: (x, y) => x.type.name === y.type.name,
577
+ getter: (x) => x.tags,
578
+ })(y.tuples),
548
579
  objects: x.objects.slice(),
549
580
  aliases: x.aliases.slice(),
550
581
 
@@ -564,10 +595,6 @@ export namespace Metadata {
564
595
  for (const value of constant.values)
565
596
  ArrayUtil.add(target.values, value);
566
597
  }
567
- for (const array of y.arrays)
568
- ArrayUtil.set(output.arrays, array, (elem) => elem.name);
569
- for (const tuple of y.tuples)
570
- ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
571
598
  for (const obj of y.objects)
572
599
  ArrayUtil.set(output.objects, obj, (elem) => elem.name);
573
600
  for (const alias of y.aliases)
@@ -587,8 +614,8 @@ const getName = (metadata: Metadata): string => {
587
614
  if (metadata.isRequired() === false) elements.push("undefined");
588
615
 
589
616
  // ATOMIC
590
- for (const type of metadata.atomics) {
591
- elements.push(type);
617
+ for (const atom of metadata.atomics) {
618
+ elements.push(atom.type);
592
619
  }
593
620
  for (const constant of metadata.constants)
594
621
  for (const value of constant.values)
@@ -616,11 +643,11 @@ const getName = (metadata: Metadata): string => {
616
643
 
617
644
  // INSTANCES
618
645
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
619
- for (const tuple of metadata.tuples) elements.push(tuple.name);
620
- for (const array of metadata.arrays) elements.push(array.name);
646
+ for (const tuple of metadata.tuples) elements.push(tuple.type.name);
647
+ for (const array of metadata.arrays) elements.push(array.type.name);
621
648
  for (const object of metadata.objects) elements.push(object.name);
622
649
  for (const alias of metadata.aliases) elements.push(alias.name);
623
- if (metadata.resolved !== null) elements.push(metadata.resolved.getName());
650
+ if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
624
651
 
625
652
  // RETURNS
626
653
  if (elements.length === 0) return "unknown";
@@ -635,3 +662,38 @@ export namespace Metadata {
635
662
  value: Metadata;
636
663
  }
637
664
  }
665
+
666
+ const mergeTaggedTypes =
667
+ <T>(props: {
668
+ container: T[];
669
+ equals: (x: T, y: T) => boolean;
670
+ getter: (x: T) => IMetadataTypeTag[][];
671
+ }) =>
672
+ (opposite: T[]) => {
673
+ const output: T[] = [...props.container];
674
+ for (const elem of opposite) {
675
+ const equal = props.container.find((x) => props.equals(x, elem));
676
+ if (equal === undefined) {
677
+ output.push(elem);
678
+ continue;
679
+ }
680
+
681
+ const matrix: string[][] = props
682
+ .getter(equal)
683
+ .map((tags) => tags.map((t) => t.name))
684
+ .sort();
685
+ for (const tags of props.getter(elem)) {
686
+ const names: string[] = tags.map((t) => t.name).sort();
687
+ if (
688
+ matrix.some(
689
+ (m) =>
690
+ m.length === names.length &&
691
+ m.every((s, i) => s === names[i]),
692
+ )
693
+ )
694
+ continue;
695
+ props.getter(equal).push(tags);
696
+ }
697
+ }
698
+ return output;
699
+ };
@@ -2,14 +2,14 @@ import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
3
  import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
4
  import { IMetadataAlias } from "./IMetadataAlias";
5
- import { IMetadataTag } from "./IMetadataTag";
5
+ import { IMetadataCommentTag } from "./IMetadataCommentTag";
6
6
  import { Metadata } from "./Metadata";
7
7
 
8
8
  export class MetadataAlias {
9
9
  public readonly name: string;
10
10
  public readonly value: Metadata;
11
11
  public readonly description: string | null;
12
- public readonly tags: IMetadataTag[];
12
+ public readonly tags: IMetadataCommentTag[];
13
13
  public readonly jsDocTags: IJsDocTagInfo[];
14
14
  public readonly recursive: boolean;
15
15
  public readonly nullables: boolean[];