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
@@ -8,10 +8,12 @@ import { StatementFactory } from "../../factories/StatementFactory";
8
8
  import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
11
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
11
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
12
12
  import { Metadata } from "../../schemas/metadata/Metadata";
13
13
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
14
+ import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
14
15
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
16
+ import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
15
17
 
16
18
  import { IProject } from "../../transformers/IProject";
17
19
 
@@ -26,7 +28,9 @@ import { wrap_metadata_rest_tuple } from "../internal/wrap_metadata_rest_tuple";
26
28
  export namespace MiscCloneProgrammer {
27
29
  export const write =
28
30
  (project: IProject) => (modulo: ts.LeftHandSideExpression) => {
29
- const importer: FunctionImporter = new FunctionImporter();
31
+ const importer: FunctionImporter = new FunctionImporter(
32
+ modulo.getText(),
33
+ );
30
34
  return FeatureProgrammer.write(project)({
31
35
  ...configure(project)(importer),
32
36
  addition: (collection) => [
@@ -118,8 +122,8 @@ export namespace MiscCloneProgrammer {
118
122
  // ANY TYPE
119
123
  if (
120
124
  meta.any ||
121
- meta.arrays.some((a) => a.value.any) ||
122
- meta.tuples.some((t) => t.elements.every((e) => e.any))
125
+ meta.arrays.some((a) => a.type.value.any) ||
126
+ meta.tuples.some((t) => t.type.elements.every((e) => e.any))
123
127
  )
124
128
  return ts.factory.createCallExpression(
125
129
  importer.use("any"),
@@ -137,19 +141,6 @@ export namespace MiscCloneProgrammer {
137
141
  //----
138
142
  // LIST UP UNION TYPES
139
143
  //----
140
- // toJSON() METHOD
141
- if (meta.resolved !== null)
142
- unions.push({
143
- type: "resolved",
144
- is: () => IsProgrammer.decode_to_json(true)(input),
145
- value: () =>
146
- decode_to_json(project)(config)(importer)(
147
- input,
148
- meta.resolved!.returns,
149
- explore,
150
- ),
151
- });
152
-
153
144
  // TUPLES
154
145
  for (const tuple of meta.tuples)
155
146
  unions.push({
@@ -195,13 +186,26 @@ export namespace MiscCloneProgrammer {
195
186
  unions.push({
196
187
  type: "set",
197
188
  is: () => ExpressionFactory.isInstanceOf("Set")(input),
198
- value: () => ts.factory.createIdentifier("{}"),
189
+ value: () =>
190
+ explore_sets(project)(config)(importer)(
191
+ input,
192
+ meta.sets,
193
+ { ...explore, from: "array" },
194
+ ),
199
195
  });
200
196
  if (meta.maps.length)
201
197
  unions.push({
202
198
  type: "map",
203
199
  is: () => ExpressionFactory.isInstanceOf("Map")(input),
204
- value: () => ts.factory.createIdentifier("{}"),
200
+ value: () =>
201
+ explore_maps(project)(config)(importer)(
202
+ input,
203
+ meta.maps,
204
+ {
205
+ ...explore,
206
+ from: "array",
207
+ },
208
+ ),
205
209
  });
206
210
  for (const native of meta.natives)
207
211
  unions.push({
@@ -216,7 +220,7 @@ export namespace MiscCloneProgrammer {
216
220
  undefined,
217
221
  undefined,
218
222
  )
219
- : ts.factory.createIdentifier("{}"),
223
+ : decode_native(native)(input),
220
224
  });
221
225
 
222
226
  // OBJECTS
@@ -251,26 +255,6 @@ export namespace MiscCloneProgrammer {
251
255
  );
252
256
  };
253
257
 
254
- const decode_to_json =
255
- (project: IProject) =>
256
- (config: FeatureProgrammer.IConfig) =>
257
- (importer: FunctionImporter) =>
258
- (
259
- input: ts.Expression,
260
- resolved: Metadata,
261
- explore: FeatureProgrammer.IExplore,
262
- ): ts.Expression => {
263
- return decode(project)(config)(importer)(
264
- ts.factory.createCallExpression(
265
- IdentifierFactory.access(input)("toJSON"),
266
- undefined,
267
- [],
268
- ),
269
- resolved,
270
- explore,
271
- );
272
- };
273
-
274
258
  const decode_object = (importer: FunctionImporter) =>
275
259
  FeatureProgrammer.decode_object({
276
260
  trace: false,
@@ -286,10 +270,12 @@ export namespace MiscCloneProgrammer {
286
270
  array: MetadataArray,
287
271
  explore: FeatureProgrammer.IExplore,
288
272
  ) =>
289
- array.recursive
273
+ array.type.recursive
290
274
  ? ts.factory.createCallExpression(
291
275
  ts.factory.createIdentifier(
292
- importer.useLocal(`${config.prefix}a${array.index}`),
276
+ importer.useLocal(
277
+ `${config.prefix}a${array.type.index}`,
278
+ ),
293
279
  ),
294
280
  undefined,
295
281
  FeatureProgrammer.argumentsArray(config)({
@@ -298,14 +284,18 @@ export namespace MiscCloneProgrammer {
298
284
  from: "array",
299
285
  })(input),
300
286
  )
301
- : decode_array_inline(config)(importer)(input, array, explore);
287
+ : decode_array_inline(config)(importer)(
288
+ input,
289
+ array.type,
290
+ explore,
291
+ );
302
292
 
303
293
  const decode_array_inline =
304
294
  (config: FeatureProgrammer.IConfig) =>
305
295
  (importer: FunctionImporter) =>
306
296
  (
307
297
  input: ts.Expression,
308
- array: MetadataArray,
298
+ array: MetadataArrayType,
309
299
  explore: FeatureProgrammer.IExplore,
310
300
  ) =>
311
301
  FeatureProgrammer.decode_array(config)(importer)(CloneJoiner.array)(
@@ -325,10 +315,12 @@ export namespace MiscCloneProgrammer {
325
315
  tuple: MetadataTuple,
326
316
  explore: FeatureProgrammer.IExplore,
327
317
  ): ts.Expression =>
328
- tuple.recursive
318
+ tuple.type.recursive
329
319
  ? ts.factory.createCallExpression(
330
320
  ts.factory.createIdentifier(
331
- importer.useLocal(`${config.prefix}t${tuple.index}`),
321
+ importer.useLocal(
322
+ `${config.prefix}t${tuple.type.index}`,
323
+ ),
332
324
  ),
333
325
  undefined,
334
326
  FeatureProgrammer.argumentsArray(config)({
@@ -338,7 +330,7 @@ export namespace MiscCloneProgrammer {
338
330
  )
339
331
  : decode_tuple_inline(project)(config)(importer)(
340
332
  input,
341
- tuple,
333
+ tuple.type,
342
334
  explore,
343
335
  );
344
336
 
@@ -348,7 +340,7 @@ export namespace MiscCloneProgrammer {
348
340
  (importer: FunctionImporter) =>
349
341
  (
350
342
  input: ts.Expression,
351
- tuple: MetadataTuple,
343
+ tuple: MetadataTupleType,
352
344
  explore: FeatureProgrammer.IExplore,
353
345
  ): ts.Expression => {
354
346
  const children: ts.Expression[] = tuple.elements
@@ -393,9 +385,204 @@ export namespace MiscCloneProgrammer {
393
385
  return CloneJoiner.tuple(children, rest);
394
386
  };
395
387
 
388
+ /* -----------------------------------------------------------
389
+ NATIVE CLASSES
390
+ ----------------------------------------------------------- */
391
+ const decode_native = (type: string) => (input: ts.Expression) =>
392
+ type === "Date" ||
393
+ type === "Uint8Array" ||
394
+ type === "Uint8ClampedArray" ||
395
+ type === "Uint16Array" ||
396
+ type === "Uint32Array" ||
397
+ type === "BigUint64Array" ||
398
+ type === "Int8Array" ||
399
+ type === "Int16Array" ||
400
+ type === "Int32Array" ||
401
+ type === "BigInt64Array" ||
402
+ type === "Float32Array" ||
403
+ type === "Float64Array"
404
+ ? decode_native_copyable(type)(input)
405
+ : type === "ArrayBuffer" || type === "SharedArrayBuffer"
406
+ ? decode_native_buffer(type)(input)
407
+ : type === "DataView"
408
+ ? decode_native_data_view(input)
409
+ : ts.factory.createCallExpression(
410
+ ts.factory.createIdentifier(type),
411
+ undefined,
412
+ [],
413
+ );
414
+
415
+ const decode_native_copyable = (type: string) => (input: ts.Expression) =>
416
+ ts.factory.createNewExpression(
417
+ ts.factory.createIdentifier(type),
418
+ undefined,
419
+ [input],
420
+ );
421
+
422
+ const decode_native_buffer =
423
+ (type: "ArrayBuffer" | "SharedArrayBuffer") => (input: ts.Expression) =>
424
+ ExpressionFactory.selfCall(
425
+ ts.factory.createBlock(
426
+ [
427
+ StatementFactory.constant(
428
+ "buffer",
429
+ ts.factory.createNewExpression(
430
+ ts.factory.createIdentifier(type),
431
+ undefined,
432
+ [IdentifierFactory.access(input)("byteLength")],
433
+ ),
434
+ ),
435
+ ts.factory.createExpressionStatement(
436
+ ts.factory.createCallExpression(
437
+ IdentifierFactory.access(
438
+ ts.factory.createNewExpression(
439
+ ts.factory.createIdentifier(
440
+ "Uint8Array",
441
+ ),
442
+ undefined,
443
+ [ts.factory.createIdentifier("buffer")],
444
+ ),
445
+ )("set"),
446
+ undefined,
447
+ [
448
+ ts.factory.createNewExpression(
449
+ ts.factory.createIdentifier(
450
+ "Uint8Array",
451
+ ),
452
+ undefined,
453
+ [input],
454
+ ),
455
+ ],
456
+ ),
457
+ ),
458
+ ts.factory.createReturnStatement(
459
+ ts.factory.createIdentifier("buffer"),
460
+ ),
461
+ ],
462
+ true,
463
+ ),
464
+ );
465
+
466
+ const decode_native_data_view = (input: ts.Expression) =>
467
+ ts.factory.createNewExpression(
468
+ ts.factory.createIdentifier("DataView"),
469
+ undefined,
470
+ [IdentifierFactory.access(input)("buffer")],
471
+ );
472
+
396
473
  /* -----------------------------------------------------------
397
474
  EXPLORERS FOR UNION TYPES
398
475
  ----------------------------------------------------------- */
476
+ const explore_sets =
477
+ (project: IProject) =>
478
+ (config: FeatureProgrammer.IConfig) =>
479
+ (importer: FunctionImporter) =>
480
+ (
481
+ input: ts.Expression,
482
+ sets: Metadata[],
483
+ explore: FeatureProgrammer.IExplore,
484
+ ): ts.Expression =>
485
+ ts.factory.createCallExpression(
486
+ UnionExplorer.set({
487
+ checker: IsProgrammer.decode(project)(importer),
488
+ decoder: (input, array, explore) =>
489
+ ts.factory.createNewExpression(
490
+ ts.factory.createIdentifier("Set"),
491
+ [TypeFactory.keyword("any")],
492
+ [
493
+ decode_array(config)(importer)(
494
+ input,
495
+ array,
496
+ explore,
497
+ ),
498
+ ],
499
+ ),
500
+ empty: ts.factory.createNewExpression(
501
+ ts.factory.createIdentifier("Set"),
502
+ [TypeFactory.keyword("any")],
503
+ [],
504
+ ),
505
+ success: ts.factory.createTrue(),
506
+ failure: (input, expected) =>
507
+ create_throw_error(importer)(expected)(input),
508
+ })([])(input, sets, explore, [], []),
509
+ undefined,
510
+ undefined,
511
+ );
512
+
513
+ const explore_maps =
514
+ (project: IProject) =>
515
+ (config: FeatureProgrammer.IConfig) =>
516
+ (importer: FunctionImporter) =>
517
+ (
518
+ input: ts.Expression,
519
+ maps: Metadata.Entry[],
520
+ explore: FeatureProgrammer.IExplore,
521
+ ): ts.Expression =>
522
+ ts.factory.createCallExpression(
523
+ UnionExplorer.map({
524
+ checker: (top, entry, explore) => {
525
+ const func = IsProgrammer.decode(project)(importer);
526
+ return ts.factory.createLogicalAnd(
527
+ func(
528
+ ts.factory.createElementAccessExpression(
529
+ top,
530
+ 0,
531
+ ),
532
+ entry[0],
533
+ {
534
+ ...explore,
535
+ postfix: `${explore.postfix}[0]`,
536
+ },
537
+ [],
538
+ [],
539
+ ),
540
+ func(
541
+ ts.factory.createElementAccessExpression(
542
+ top,
543
+ 1,
544
+ ),
545
+ entry[1],
546
+ {
547
+ ...explore,
548
+ postfix: `${explore.postfix}[1]`,
549
+ },
550
+ [],
551
+ [],
552
+ ),
553
+ );
554
+ },
555
+ decoder: (input, array, explore) =>
556
+ ts.factory.createNewExpression(
557
+ ts.factory.createIdentifier("Map"),
558
+ [
559
+ TypeFactory.keyword("any"),
560
+ TypeFactory.keyword("any"),
561
+ ],
562
+ [
563
+ decode_array(config)(importer)(
564
+ input,
565
+ array,
566
+ explore,
567
+ ),
568
+ ],
569
+ ),
570
+ empty: ts.factory.createNewExpression(
571
+ ts.factory.createIdentifier("Map"),
572
+ [
573
+ TypeFactory.keyword("any"),
574
+ TypeFactory.keyword("any"),
575
+ ],
576
+ [],
577
+ ),
578
+ success: ts.factory.createTrue(),
579
+ failure: (input, expected) =>
580
+ create_throw_error(importer)(expected)(input),
581
+ })([])(input, maps, explore, [], []),
582
+ undefined,
583
+ undefined,
584
+ );
585
+
399
586
  const explore_objects =
400
587
  (config: FeatureProgrammer.IConfig) =>
401
588
  (importer: FunctionImporter) =>
@@ -450,7 +637,7 @@ export namespace MiscCloneProgrammer {
450
637
  input: ts.Expression,
451
638
  elements: T[],
452
639
  explore: FeatureProgrammer.IExplore,
453
- tags: IMetadataTag[],
640
+ tags: IMetadataCommentTag[],
454
641
  jsDocTags: IJsDocTagInfo[],
455
642
  ) => ts.ArrowFunction,
456
643
  ) =>
@@ -464,7 +651,7 @@ export namespace MiscCloneProgrammer {
464
651
  (explore: FeatureProgrammer.IExplore) =>
465
652
  (input: ts.Expression): ts.ArrowFunction =>
466
653
  factory(parameters)(input, elements, explore, [], []);
467
- if (elements.every((e) => e.recursive === false))
654
+ if (elements.every((e) => e.type.recursive === false))
468
655
  ts.factory.createCallExpression(
469
656
  arrow([])(explore)(input),
470
657
  undefined,
@@ -480,7 +667,7 @@ export namespace MiscCloneProgrammer {
480
667
  ts.factory.createIdentifier(
481
668
  importer.emplaceUnion(
482
669
  config.prefix,
483
- elements.map((e) => e.name).join(" | "),
670
+ elements.map((e) => e.type.name).join(" | "),
484
671
  () =>
485
672
  arrow(
486
673
  FeatureProgrammer.parameterDeclarations(config)(
@@ -514,7 +701,7 @@ export namespace MiscCloneProgrammer {
514
701
  ),
515
702
  output: (type, name) =>
516
703
  ts.factory.createTypeReferenceNode(
517
- `typia.Primitive<${
704
+ `typia.Resolved<${
518
705
  name ??
519
706
  TypeFactory.getFullName(project.checker)(type)
520
707
  }>`,
@@ -523,7 +710,7 @@ export namespace MiscCloneProgrammer {
523
710
  prefix: PREFIX,
524
711
  trace: false,
525
712
  path: false,
526
- initializer,
713
+ initializer: initializer(importer.method),
527
714
  decoder: () => decode(project)(config)(importer),
528
715
  objector: {
529
716
  checker: () => IsProgrammer.decode(project)(importer),
@@ -547,14 +734,25 @@ export namespace MiscCloneProgrammer {
547
734
  return config;
548
735
  };
549
736
 
550
- const initializer: FeatureProgrammer.IConfig["initializer"] =
737
+ const initializer =
738
+ (method: string): FeatureProgrammer.IConfig["initializer"] =>
551
739
  ({ checker }) =>
552
740
  (type) => {
553
741
  const collection = new MetadataCollection();
554
742
  const meta = MetadataFactory.analyze(checker)({
555
- resolve: true,
743
+ escape: false,
556
744
  constant: true,
557
745
  absorb: true,
746
+ validate: (meta) => {
747
+ if (meta.natives.some((n) => n === "WeakSet"))
748
+ throw new Error(
749
+ `Error on ${method}(): WeakSet is not supported.`,
750
+ );
751
+ else if (meta.natives.some((n) => n === "WeakMap"))
752
+ throw new Error(
753
+ `Error on ${method}(): WeakMap is not supported.`,
754
+ );
755
+ },
558
756
  })(collection)(type);
559
757
  return [collection, meta];
560
758
  };
@@ -25,7 +25,7 @@ export namespace MiscIsCloneProgrammer {
25
25
  ],
26
26
  ts.factory.createUnionTypeNode([
27
27
  ts.factory.createTypeReferenceNode(
28
- `typia.Primitive<${
28
+ `typia.Resolved<${
29
29
  name ??
30
30
  TypeFactory.getFullName(project.checker)(type)
31
31
  }>`,
@@ -15,7 +15,7 @@ import { ArrayUtil } from "../../utils/ArrayUtil";
15
15
  export namespace MiscLiteralsProgrammer {
16
16
  export const write = (project: IProject) => (type: ts.Type) => {
17
17
  const meta: Metadata = MetadataFactory.analyze(project.checker)({
18
- resolve: true,
18
+ escape: true,
19
19
  constant: true,
20
20
  absorb: true,
21
21
  validate: (meta) => {
@@ -23,7 +23,7 @@ export namespace MiscLiteralsProgrammer {
23
23
  meta.constants
24
24
  .map((c) => c.values.length)
25
25
  .reduce((a, b) => a + b, 0) +
26
- meta.atomics.filter((type) => type === "boolean").length;
26
+ meta.atomics.filter((a) => a.type === "boolean").length;
27
27
  if (0 === length) throw new Error(ErrorMessages.NO);
28
28
  else if (meta.size() !== length)
29
29
  throw new Error(ErrorMessages.ONLY);
@@ -31,7 +31,7 @@ export namespace MiscLiteralsProgrammer {
31
31
  })(new MetadataCollection())(type);
32
32
  const values: Set<Atomic.Type | null> = new Set([
33
33
  ...ArrayUtil.flat<Atomic.Type>(meta.constants.map((c) => c.values)),
34
- ...(meta.atomics.filter((type) => type === "boolean").length
34
+ ...(meta.atomics.filter((a) => a.type === "boolean").length
35
35
  ? [true, false]
36
36
  : []),
37
37
  ...(meta.nullable ? [null] : []),
@@ -8,10 +8,12 @@ import { StatementFactory } from "../../factories/StatementFactory";
8
8
  import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
11
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
11
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
12
12
  import { Metadata } from "../../schemas/metadata/Metadata";
13
13
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
14
+ import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
14
15
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
16
+ import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
15
17
 
16
18
  import { IProject } from "../../transformers/IProject";
17
19
 
@@ -26,7 +28,9 @@ import { wrap_metadata_rest_tuple } from "../internal/wrap_metadata_rest_tuple";
26
28
  export namespace MiscPruneProgrammer {
27
29
  export const write =
28
30
  (project: IProject) => (modulo: ts.LeftHandSideExpression) => {
29
- const importer: FunctionImporter = new FunctionImporter();
31
+ const importer: FunctionImporter = new FunctionImporter(
32
+ modulo.getText(),
33
+ );
30
34
  return FeatureProgrammer.write(project)({
31
35
  ...configure(project)(importer),
32
36
  addition: (collection) => [
@@ -128,8 +132,8 @@ export namespace MiscPruneProgrammer {
128
132
  // LIST UP UNION TYPES
129
133
  //----
130
134
  // TUPLES
131
- for (const tuple of meta.tuples.filter((t) =>
132
- t.elements.some((e) => filter(e.rest ?? e)),
135
+ for (const tuple of meta.tuples.filter((tuple) =>
136
+ tuple.type.elements.some((e) => filter(e.rest ?? e)),
133
137
  ))
134
138
  unions.push({
135
139
  type: "tuple",
@@ -154,7 +158,7 @@ export namespace MiscPruneProgrammer {
154
158
  });
155
159
 
156
160
  // ARRAYS
157
- if (meta.arrays.filter((a) => filter(a.value)).length)
161
+ if (meta.arrays.filter((a) => filter(a.type.value)).length)
158
162
  unions.push({
159
163
  type: "array",
160
164
  is: () => ExpressionFactory.isArray(input),
@@ -237,10 +241,12 @@ export namespace MiscPruneProgrammer {
237
241
  array: MetadataArray,
238
242
  explore: FeatureProgrammer.IExplore,
239
243
  ) =>
240
- array.recursive
244
+ array.type.recursive
241
245
  ? ts.factory.createCallExpression(
242
246
  ts.factory.createIdentifier(
243
- importer.useLocal(`${config.prefix}a${array.index}`),
247
+ importer.useLocal(
248
+ `${config.prefix}a${array.type.index}`,
249
+ ),
244
250
  ),
245
251
  undefined,
246
252
  FeatureProgrammer.argumentsArray(config)({
@@ -249,14 +255,18 @@ export namespace MiscPruneProgrammer {
249
255
  from: "array",
250
256
  })(input),
251
257
  )
252
- : decode_array_inline(config)(importer)(input, array, explore);
258
+ : decode_array_inline(config)(importer)(
259
+ input,
260
+ array.type,
261
+ explore,
262
+ );
253
263
 
254
264
  const decode_array_inline =
255
265
  (config: FeatureProgrammer.IConfig) =>
256
266
  (importer: FunctionImporter) =>
257
267
  (
258
268
  input: ts.Expression,
259
- array: MetadataArray,
269
+ array: MetadataArrayType,
260
270
  explore: FeatureProgrammer.IExplore,
261
271
  ): ts.Expression =>
262
272
  FeatureProgrammer.decode_array(config)(importer)(PruneJoiner.array)(
@@ -276,10 +286,12 @@ export namespace MiscPruneProgrammer {
276
286
  tuple: MetadataTuple,
277
287
  explore: FeatureProgrammer.IExplore,
278
288
  ): ts.Expression | ts.Block =>
279
- tuple.recursive
289
+ tuple.type.recursive
280
290
  ? ts.factory.createCallExpression(
281
291
  ts.factory.createIdentifier(
282
- importer.useLocal(`${config.prefix}t${tuple.index}`),
292
+ importer.useLocal(
293
+ `${config.prefix}t${tuple.type.index}`,
294
+ ),
283
295
  ),
284
296
  undefined,
285
297
  FeatureProgrammer.argumentsArray(config)({
@@ -289,7 +301,7 @@ export namespace MiscPruneProgrammer {
289
301
  )
290
302
  : decode_tuple_inline(project)(config)(importer)(
291
303
  input,
292
- tuple,
304
+ tuple.type,
293
305
  explore,
294
306
  );
295
307
 
@@ -299,7 +311,7 @@ export namespace MiscPruneProgrammer {
299
311
  (importer: FunctionImporter) =>
300
312
  (
301
313
  input: ts.Expression,
302
- tuple: MetadataTuple,
314
+ tuple: MetadataTupleType,
303
315
  explore: FeatureProgrammer.IExplore,
304
316
  ): ts.Block => {
305
317
  const children: ts.ConciseBody[] = tuple.elements
@@ -402,7 +414,7 @@ export namespace MiscPruneProgrammer {
402
414
  input: ts.Expression,
403
415
  elements: T[],
404
416
  explore: FeatureProgrammer.IExplore,
405
- tags: IMetadataTag[],
417
+ tags: IMetadataCommentTag[],
406
418
  jsDocTags: IJsDocTagInfo[],
407
419
  ) => ts.ArrowFunction,
408
420
  ) =>
@@ -416,7 +428,7 @@ export namespace MiscPruneProgrammer {
416
428
  (explore: FeatureProgrammer.IExplore) =>
417
429
  (input: ts.Expression): ts.ArrowFunction =>
418
430
  factory(parameters)(input, elements, explore, [], []);
419
- if (elements.every((e) => e.recursive === false))
431
+ if (elements.every((e) => e.type.recursive === false))
420
432
  ts.factory.createCallExpression(
421
433
  arrow([])(explore)(input),
422
434
  undefined,
@@ -432,7 +444,7 @@ export namespace MiscPruneProgrammer {
432
444
  ts.factory.createIdentifier(
433
445
  importer.emplaceUnion(
434
446
  config.prefix,
435
- elements.map((e) => e.name).join(" | "),
447
+ elements.map((e) => e.type.name).join(" | "),
436
448
  () =>
437
449
  arrow(
438
450
  FeatureProgrammer.parameterDeclarations(config)(
@@ -454,9 +466,9 @@ export namespace MiscPruneProgrammer {
454
466
  meta.any === false &&
455
467
  (meta.objects.length !== 0 ||
456
468
  meta.tuples.some((t) =>
457
- t.elements.some((e) => filter(e.rest ?? e)),
469
+ t.type.elements.some((e) => filter(e.rest ?? e)),
458
470
  ) ||
459
- meta.arrays.some((e) => filter(e.value)));
471
+ meta.arrays.some((e) => filter(e.type.value)));
460
472
 
461
473
  /* -----------------------------------------------------------
462
474
  CONFIGURATIONS
@@ -507,7 +519,7 @@ export namespace MiscPruneProgrammer {
507
519
  (type) => {
508
520
  const collection = new MetadataCollection();
509
521
  const meta = MetadataFactory.analyze(checker)({
510
- resolve: false,
522
+ escape: false,
511
523
  constant: true,
512
524
  absorb: true,
513
525
  })(collection)(type);
@@ -24,7 +24,7 @@ export namespace MiscValidateCloneProgrammer {
24
24
  ),
25
25
  ],
26
26
  ts.factory.createTypeReferenceNode(
27
- `typia.IValidation<typia.Primitive<${
27
+ `typia.IValidation<typia.Resolved<${
28
28
  name ?? TypeFactory.getFullName(project.checker)(type)
29
29
  }>>`,
30
30
  ),