typia 5.0.0-dev.20230824 → 5.0.0-dev.20230828

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 (493) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/executable/TypiaGenerateWizard.js +1 -1
  4. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  5. package/lib/executable/TypiaSetupWizard.js +1 -1
  6. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  7. package/lib/executable/setup/PackageManager.js +1 -1
  8. package/lib/executable/setup/PackageManager.js.map +1 -1
  9. package/lib/executable/setup/PluginConfigurator.js +2 -2
  10. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  11. package/lib/factories/ExpressionFactory.d.ts +1 -1
  12. package/lib/factories/ExpressionFactory.js +3 -3
  13. package/lib/factories/ExpressionFactory.js.map +1 -1
  14. package/lib/factories/JsonMetadataFactory.d.ts +7 -0
  15. package/lib/factories/JsonMetadataFactory.js +38 -0
  16. package/lib/factories/JsonMetadataFactory.js.map +1 -0
  17. package/lib/factories/LiteralFactory.js +6 -2
  18. package/lib/factories/LiteralFactory.js.map +1 -1
  19. package/lib/factories/MetadataCollection.js +0 -2
  20. package/lib/factories/MetadataCollection.js.map +1 -1
  21. package/lib/factories/MetadataCommentTagFactory.js +543 -0
  22. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  23. package/lib/factories/MetadataFactory.d.ts +22 -2
  24. package/lib/factories/MetadataFactory.js +221 -17
  25. package/lib/factories/MetadataFactory.js.map +1 -1
  26. package/lib/factories/MetadataTypeTagFactory.d.ts +7 -0
  27. package/lib/factories/MetadataTypeTagFactory.js +280 -0
  28. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  29. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  30. package/lib/factories/NumericRangeFactory.js +34 -0
  31. package/lib/factories/NumericRangeFactory.js.map +1 -0
  32. package/lib/factories/ProtobufFactory.js +109 -73
  33. package/lib/factories/ProtobufFactory.js.map +1 -1
  34. package/lib/factories/TypeFactory.d.ts +0 -1
  35. package/lib/factories/TypeFactory.js +0 -5
  36. package/lib/factories/TypeFactory.js.map +1 -1
  37. package/lib/factories/internal/metadata/emend_metadata_atomics.js +7 -1
  38. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  39. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +1 -1
  40. package/lib/factories/internal/metadata/emplace_metadata_alias.js +20 -19
  41. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  42. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +1 -1
  43. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +20 -7
  44. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  45. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +1 -1
  46. package/lib/factories/internal/metadata/emplace_metadata_object.js +100 -85
  47. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  48. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +1 -1
  49. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +34 -21
  50. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
  51. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  52. package/lib/factories/internal/metadata/explore_metadata.js +12 -12
  53. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  54. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata.js +39 -19
  56. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  57. package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +1 -1
  58. package/lib/factories/internal/metadata/iterate_metadata_alias.js +12 -10
  59. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  60. package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +1 -1
  61. package/lib/factories/internal/metadata/iterate_metadata_array.js +11 -9
  62. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  63. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  64. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  65. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -1
  66. package/lib/factories/internal/metadata/iterate_metadata_collection.js +47 -45
  67. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  68. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -1
  69. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +17 -22
  70. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  71. package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +1 -1
  72. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +147 -135
  73. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  74. package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +1 -1
  75. package/lib/factories/internal/metadata/iterate_metadata_map.js +28 -15
  76. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  77. package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +1 -1
  78. package/lib/factories/internal/metadata/iterate_metadata_object.js +16 -14
  79. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  80. package/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts +1 -1
  81. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +28 -15
  82. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  83. package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +1 -1
  84. package/lib/factories/internal/metadata/iterate_metadata_set.js +24 -11
  85. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  86. package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +1 -1
  87. package/lib/factories/internal/metadata/iterate_metadata_template.js +28 -15
  88. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  89. package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +1 -1
  90. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +11 -9
  91. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  92. package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +1 -1
  93. package/lib/factories/internal/metadata/iterate_metadata_union.js +20 -7
  94. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  95. package/lib/functional/Namespace.js +0 -16
  96. package/lib/functional/Namespace.js.map +1 -1
  97. package/lib/programmers/AssertProgrammer.js +28 -8
  98. package/lib/programmers/AssertProgrammer.js.map +1 -1
  99. package/lib/programmers/CheckerProgrammer.js +78 -60
  100. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  101. package/lib/programmers/FeatureProgrammer.d.ts +4 -6
  102. package/lib/programmers/FeatureProgrammer.js +7 -7
  103. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  104. package/lib/programmers/IsProgrammer.d.ts +1 -1
  105. package/lib/programmers/IsProgrammer.js +33 -20
  106. package/lib/programmers/IsProgrammer.js.map +1 -1
  107. package/lib/programmers/RandomProgrammer.js +163 -138
  108. package/lib/programmers/RandomProgrammer.js.map +1 -1
  109. package/lib/programmers/TypiaProgrammer.js +58 -28
  110. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  111. package/lib/programmers/ValidateProgrammer.js +28 -8
  112. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  113. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  114. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  115. package/lib/programmers/helpers/ICheckEntry.d.ts +3 -2
  116. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  117. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  118. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  119. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  120. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  121. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  122. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  123. package/lib/programmers/helpers/RandomRanger.js +13 -33
  124. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  125. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  126. package/lib/programmers/helpers/UnionExplorer.js +6 -6
  127. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  128. package/lib/programmers/internal/application_alias.js +0 -1
  129. package/lib/programmers/internal/application_alias.js.map +1 -1
  130. package/lib/programmers/internal/application_array.js +60 -20
  131. package/lib/programmers/internal/application_array.js.map +1 -1
  132. package/lib/programmers/internal/application_escaped.d.ts +4 -0
  133. package/lib/programmers/internal/{application_resolved.js → application_escaped.js} +4 -4
  134. package/lib/programmers/internal/application_escaped.js.map +1 -0
  135. package/lib/programmers/internal/application_number.js +95 -69
  136. package/lib/programmers/internal/application_number.js.map +1 -1
  137. package/lib/programmers/internal/application_object.js +0 -3
  138. package/lib/programmers/internal/application_object.js.map +1 -1
  139. package/lib/programmers/internal/application_schema.js +41 -24
  140. package/lib/programmers/internal/application_schema.js.map +1 -1
  141. package/lib/programmers/internal/application_string.js +56 -22
  142. package/lib/programmers/internal/application_string.js.map +1 -1
  143. package/lib/programmers/internal/check_array_length.js +25 -25
  144. package/lib/programmers/internal/check_array_length.js.map +1 -1
  145. package/lib/programmers/internal/check_bigint.js +13 -116
  146. package/lib/programmers/internal/check_bigint.js.map +1 -1
  147. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  148. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  149. package/lib/programmers/internal/check_number.js +62 -163
  150. package/lib/programmers/internal/check_number.js.map +1 -1
  151. package/lib/programmers/internal/check_string.js +16 -52
  152. package/lib/programmers/internal/check_string.js.map +1 -1
  153. package/lib/programmers/internal/check_template.js +16 -1
  154. package/lib/programmers/internal/check_template.js.map +1 -1
  155. package/lib/programmers/internal/check_union_array_like.js +4 -4
  156. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  157. package/lib/programmers/internal/feature_object_entries.js +1 -1
  158. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  159. package/lib/programmers/internal/random_custom.js +2 -2
  160. package/lib/programmers/internal/random_custom.js.map +1 -1
  161. package/lib/programmers/json/JsonApplicationProgrammer.js +5 -1
  162. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  163. package/lib/programmers/json/JsonAssertParseProgrammer.js +2 -0
  164. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  165. package/lib/programmers/json/JsonIsParseProgrammer.js +2 -0
  166. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  167. package/lib/programmers/json/JsonStringifyProgrammer.js +41 -78
  168. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  169. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -0
  170. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  171. package/lib/programmers/misc/MiscCloneProgrammer.js +26 -17
  172. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  173. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  174. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  175. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  176. package/lib/programmers/misc/MiscLiteralsProgrammer.js +10 -5
  177. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  178. package/lib/programmers/misc/MiscPruneProgrammer.js +23 -14
  179. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  180. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +24 -44
  181. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  182. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  183. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  184. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  185. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  186. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  187. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  188. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  189. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -0
  190. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  191. package/lib/schemas/metadata/Metadata.js +29 -29
  192. package/lib/schemas/metadata/Metadata.js.map +1 -1
  193. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  194. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  195. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  196. package/lib/schemas/metadata/MetadataArray.d.ts +2 -0
  197. package/lib/schemas/metadata/MetadataArray.js +45 -2
  198. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  199. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  200. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  201. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  202. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  203. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  204. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  205. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -2
  206. package/lib/schemas/metadata/MetadataTuple.js +1 -2
  207. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  208. package/lib/tags/ExclusiveMaximum.d.ts +10 -8
  209. package/lib/tags/ExclusiveMinimum.d.ts +10 -8
  210. package/lib/tags/Format.d.ts +8 -8
  211. package/lib/tags/MaxItems.d.ts +8 -8
  212. package/lib/tags/MaxLength.d.ts +8 -8
  213. package/lib/tags/Maximum.d.ts +10 -8
  214. package/lib/tags/MinItems.d.ts +8 -8
  215. package/lib/tags/MinLength.d.ts +8 -8
  216. package/lib/tags/Minimum.d.ts +10 -8
  217. package/lib/tags/MultipleOf.d.ts +10 -8
  218. package/lib/tags/Pattern.d.ts +7 -8
  219. package/lib/tags/TagBase.d.ts +10 -6
  220. package/lib/tags/Type.d.ts +14 -13
  221. package/lib/tags/index.d.ts +1 -0
  222. package/lib/tags/index.js +1 -0
  223. package/lib/tags/index.js.map +1 -1
  224. package/lib/transform.d.ts +2 -1
  225. package/lib/transform.js +11 -3
  226. package/lib/transform.js.map +1 -1
  227. package/lib/transformers/CallExpressionTransformer.d.ts +1 -1
  228. package/lib/transformers/CallExpressionTransformer.js +2 -1
  229. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  230. package/lib/transformers/FileTransformer.js +18 -6
  231. package/lib/transformers/FileTransformer.js.map +1 -1
  232. package/lib/transformers/IProject.d.ts +3 -0
  233. package/lib/transformers/NodeTransformer.d.ts +1 -1
  234. package/lib/transformers/TransformerError.d.ts +12 -0
  235. package/lib/transformers/TransformerError.js +66 -0
  236. package/lib/transformers/TransformerError.js.map +1 -0
  237. package/lib/transformers/features/AssertTransformer.d.ts +1 -0
  238. package/lib/transformers/features/CreateAssertTransformer.d.ts +1 -0
  239. package/lib/transformers/features/CreateIsTransformer.d.ts +1 -0
  240. package/lib/transformers/features/CreateRandomTransformer.js +9 -4
  241. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  242. package/lib/transformers/features/CreateValidateTransformer.d.ts +1 -0
  243. package/lib/transformers/features/IsTransformer.d.ts +1 -0
  244. package/lib/transformers/features/RandomTransformer.js +9 -4
  245. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  246. package/lib/transformers/features/ValidateTransformer.d.ts +1 -0
  247. package/lib/transformers/features/json/JsonApplicationTransformer.js +79 -19
  248. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  249. package/lib/transformers/features/json/JsonAssertParseTransformer.d.ts +1 -0
  250. package/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts +1 -0
  251. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts +1 -0
  252. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts +1 -0
  253. package/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts +1 -0
  254. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts +1 -0
  255. package/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts +1 -0
  256. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts +1 -0
  257. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts +1 -0
  258. package/lib/transformers/features/json/JsonIsParseTransformer.d.ts +1 -0
  259. package/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts +1 -0
  260. package/lib/transformers/features/json/JsonStringifyTransformer.d.ts +1 -0
  261. package/lib/transformers/features/json/JsonValidateParseTransformer.d.ts +1 -0
  262. package/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts +1 -0
  263. package/lib/transformers/features/misc/MetadataTransformer.js +13 -5
  264. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  265. package/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts +1 -0
  266. package/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts +1 -0
  267. package/lib/transformers/features/misc/MiscCloneTransformer.d.ts +1 -0
  268. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts +1 -0
  269. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts +1 -0
  270. package/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts +1 -0
  271. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts +1 -0
  272. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts +1 -0
  273. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  274. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  275. package/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts +1 -0
  276. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts +1 -0
  277. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts +1 -0
  278. package/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts +1 -0
  279. package/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts +1 -0
  280. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  281. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  282. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +9 -4
  283. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  284. package/lib/transformers/features/misc/MiscPruneTransformer.d.ts +1 -0
  285. package/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts +1 -0
  286. package/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts +1 -0
  287. package/lib/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.d.ts +1 -0
  288. package/lib/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.d.ts +1 -0
  289. package/lib/transformers/features/protobuf/CreateProtobufDecodeTransformer.d.ts +1 -0
  290. package/lib/transformers/features/protobuf/CreateProtobufEncodeTransformer.d.ts +1 -0
  291. package/lib/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.d.ts +1 -0
  292. package/lib/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.d.ts +1 -0
  293. package/lib/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.d.ts +1 -0
  294. package/lib/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.d.ts +1 -0
  295. package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts +1 -0
  296. package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts +1 -0
  297. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts +1 -0
  298. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts +1 -0
  299. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts +1 -0
  300. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts +1 -0
  301. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +9 -2
  302. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  303. package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts +1 -0
  304. package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts +1 -0
  305. package/lib/transformers/internal/GenericTransformer.js +17 -4
  306. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  307. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  308. package/lib/{schemas/metadata/ICommentTag.js → typings/ProtobufAtomic.js} +1 -1
  309. package/lib/typings/ProtobufAtomic.js.map +1 -0
  310. package/lib/typings/ValidationPipe.d.ts +7 -0
  311. package/lib/{schemas/metadata/IMetadataCommentTag.js → typings/ValidationPipe.js} +1 -1
  312. package/lib/typings/ValidationPipe.js.map +1 -0
  313. package/package.json +4 -2
  314. package/src/IRandomGenerator.ts +4 -3
  315. package/src/executable/TypiaGenerateWizard.ts +1 -1
  316. package/src/executable/TypiaSetupWizard.ts +1 -1
  317. package/src/executable/setup/PackageManager.ts +1 -1
  318. package/src/executable/setup/PluginConfigurator.ts +2 -2
  319. package/src/factories/ExpressionFactory.ts +4 -4
  320. package/src/factories/JsonMetadataFactory.ts +43 -0
  321. package/src/factories/LiteralFactory.ts +11 -3
  322. package/src/factories/MetadataCollection.ts +0 -6
  323. package/src/factories/MetadataCommentTagFactory.ts +629 -0
  324. package/src/factories/MetadataFactory.ts +169 -7
  325. package/src/factories/MetadataTypeTagFactory.ts +313 -0
  326. package/src/factories/NumericRangeFactory.ts +33 -0
  327. package/src/factories/ProtobufFactory.ts +106 -99
  328. package/src/factories/TypeFactory.ts +0 -5
  329. package/src/factories/internal/metadata/emend_metadata_atomics.ts +6 -1
  330. package/src/factories/internal/metadata/emplace_metadata_alias.ts +12 -11
  331. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +12 -5
  332. package/src/factories/internal/metadata/emplace_metadata_object.ts +20 -6
  333. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +12 -2
  334. package/src/factories/internal/metadata/explore_metadata.ts +5 -11
  335. package/src/factories/internal/metadata/iterate_metadata.ts +44 -24
  336. package/src/factories/internal/metadata/iterate_metadata_alias.ts +7 -2
  337. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -2
  338. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +2 -1
  339. package/src/factories/internal/metadata/iterate_metadata_collection.ts +30 -29
  340. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +22 -27
  341. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +44 -25
  342. package/src/factories/internal/metadata/iterate_metadata_map.ts +20 -4
  343. package/src/factories/internal/metadata/iterate_metadata_object.ts +2 -1
  344. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +15 -12
  345. package/src/factories/internal/metadata/iterate_metadata_set.ts +11 -2
  346. package/src/factories/internal/metadata/iterate_metadata_template.ts +12 -3
  347. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -2
  348. package/src/factories/internal/metadata/iterate_metadata_union.ts +10 -7
  349. package/src/functional/Namespace.ts +0 -16
  350. package/src/programmers/AssertProgrammer.ts +57 -21
  351. package/src/programmers/CheckerProgrammer.ts +51 -120
  352. package/src/programmers/FeatureProgrammer.ts +15 -34
  353. package/src/programmers/IsProgrammer.ts +53 -42
  354. package/src/programmers/RandomProgrammer.ts +223 -242
  355. package/src/programmers/TypiaProgrammer.ts +27 -2
  356. package/src/programmers/ValidateProgrammer.ts +60 -21
  357. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  358. package/src/programmers/helpers/ICheckEntry.ts +3 -2
  359. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  360. package/src/programmers/helpers/RandomJoiner.ts +11 -37
  361. package/src/programmers/helpers/RandomRanger.ts +16 -51
  362. package/src/programmers/helpers/UnionExplorer.ts +1 -20
  363. package/src/programmers/internal/application_alias.ts +0 -1
  364. package/src/programmers/internal/application_array.ts +32 -10
  365. package/src/programmers/internal/{application_resolved.ts → application_escaped.ts} +1 -1
  366. package/src/programmers/internal/application_number.ts +76 -70
  367. package/src/programmers/internal/application_object.ts +0 -3
  368. package/src/programmers/internal/application_schema.ts +40 -22
  369. package/src/programmers/internal/application_string.ts +33 -27
  370. package/src/programmers/internal/check_array_length.ts +34 -28
  371. package/src/programmers/internal/check_bigint.ts +25 -118
  372. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  373. package/src/programmers/internal/check_number.ts +81 -261
  374. package/src/programmers/internal/check_string.ts +28 -39
  375. package/src/programmers/internal/check_template.ts +17 -1
  376. package/src/programmers/internal/check_union_array_like.ts +1 -16
  377. package/src/programmers/internal/feature_object_entries.ts +12 -18
  378. package/src/programmers/internal/random_custom.ts +3 -3
  379. package/src/programmers/json/JsonApplicationProgrammer.ts +6 -3
  380. package/src/programmers/json/JsonAssertParseProgrammer.ts +7 -2
  381. package/src/programmers/json/JsonIsParseProgrammer.ts +7 -2
  382. package/src/programmers/json/JsonStringifyProgrammer.ts +32 -73
  383. package/src/programmers/json/JsonValidateParseProgrammer.ts +7 -2
  384. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +1 -1
  385. package/src/programmers/misc/MiscCloneProgrammer.ts +24 -35
  386. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  387. package/src/programmers/misc/MiscLiteralsProgrammer.ts +11 -6
  388. package/src/programmers/misc/MiscPruneProgrammer.ts +16 -20
  389. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +34 -68
  390. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +153 -98
  391. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  392. package/src/schemas/json/IJsonSchema.ts +11 -38
  393. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  394. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  395. package/src/schemas/metadata/IMetadataTypeTag.ts +2 -0
  396. package/src/schemas/metadata/Metadata.ts +32 -46
  397. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  398. package/src/schemas/metadata/MetadataArray.ts +21 -3
  399. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  400. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  401. package/src/schemas/metadata/MetadataTuple.ts +5 -4
  402. package/src/tags/ExclusiveMaximum.ts +13 -8
  403. package/src/tags/ExclusiveMinimum.ts +13 -8
  404. package/src/tags/Format.ts +21 -20
  405. package/src/tags/MaxItems.ts +9 -8
  406. package/src/tags/MaxLength.ts +9 -8
  407. package/src/tags/Maximum.ts +13 -8
  408. package/src/tags/MinItems.ts +9 -8
  409. package/src/tags/MinLength.ts +9 -8
  410. package/src/tags/Minimum.ts +13 -8
  411. package/src/tags/MultipleOf.ts +15 -10
  412. package/src/tags/Pattern.ts +8 -8
  413. package/src/tags/TagBase.ts +18 -13
  414. package/src/tags/Type.ts +26 -29
  415. package/src/tags/index.ts +1 -0
  416. package/src/transform.ts +13 -5
  417. package/src/transformers/CallExpressionTransformer.ts +6 -3
  418. package/src/transformers/FileTransformer.ts +25 -13
  419. package/src/transformers/IProject.ts +3 -0
  420. package/src/transformers/NodeTransformer.ts +1 -1
  421. package/src/transformers/TransformerError.ts +55 -0
  422. package/src/transformers/features/CreateRandomTransformer.ts +11 -7
  423. package/src/transformers/features/RandomTransformer.ts +11 -7
  424. package/src/transformers/features/json/JsonApplicationTransformer.ts +39 -35
  425. package/src/transformers/features/misc/MetadataTransformer.ts +18 -10
  426. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  427. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  428. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +11 -7
  429. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +9 -7
  430. package/src/transformers/internal/GenericTransformer.ts +17 -10
  431. package/src/typings/ProtobufAtomic.ts +19 -0
  432. package/src/typings/ValidationPipe.ts +9 -0
  433. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  434. package/lib/factories/MetadataTagFactory.js +0 -312
  435. package/lib/factories/MetadataTagFactory.js.map +0 -1
  436. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +0 -3
  437. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +0 -157
  438. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +0 -1
  439. package/lib/functional/$is_custom.d.ts +0 -2
  440. package/lib/functional/$is_custom.js +0 -13
  441. package/lib/functional/$is_custom.js.map +0 -1
  442. package/lib/functional/$is_date.d.ts +0 -1
  443. package/lib/functional/$is_date.js +0 -7
  444. package/lib/functional/$is_date.js.map +0 -1
  445. package/lib/functional/$is_datetime.d.ts +0 -1
  446. package/lib/functional/$is_datetime.js +0 -8
  447. package/lib/functional/$is_datetime.js.map +0 -1
  448. package/lib/functional/$is_email.d.ts +0 -1
  449. package/lib/functional/$is_email.js +0 -7
  450. package/lib/functional/$is_email.js.map +0 -1
  451. package/lib/functional/$is_ipv4.d.ts +0 -1
  452. package/lib/functional/$is_ipv4.js +0 -7
  453. package/lib/functional/$is_ipv4.js.map +0 -1
  454. package/lib/functional/$is_ipv6.d.ts +0 -1
  455. package/lib/functional/$is_ipv6.js +0 -7
  456. package/lib/functional/$is_ipv6.js.map +0 -1
  457. package/lib/functional/$is_url.d.ts +0 -1
  458. package/lib/functional/$is_url.js +0 -7
  459. package/lib/functional/$is_url.js.map +0 -1
  460. package/lib/functional/$is_uuid.d.ts +0 -1
  461. package/lib/functional/$is_uuid.js +0 -7
  462. package/lib/functional/$is_uuid.js.map +0 -1
  463. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  464. package/lib/programmers/internal/application_resolved.d.ts +0 -4
  465. package/lib/programmers/internal/application_resolved.js.map +0 -1
  466. package/lib/programmers/internal/check_array_tags.js +0 -39
  467. package/lib/programmers/internal/check_array_tags.js.map +0 -1
  468. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  469. package/lib/programmers/internal/check_string_tags.js +0 -89
  470. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  471. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  472. package/lib/programmers/internal/get_comment_tags.js +0 -25
  473. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  474. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  475. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  476. package/lib/schemas/metadata/IMetadataCommentTag.d.ts +0 -63
  477. package/lib/schemas/metadata/IMetadataCommentTag.js.map +0 -1
  478. package/src/factories/MetadataTagFactory.ts +0 -365
  479. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +0 -183
  480. package/src/functional/$is_custom.ts +0 -14
  481. package/src/functional/$is_date.ts +0 -3
  482. package/src/functional/$is_datetime.ts +0 -2
  483. package/src/functional/$is_email.ts +0 -4
  484. package/src/functional/$is_ipv4.ts +0 -4
  485. package/src/functional/$is_ipv6.ts +0 -4
  486. package/src/functional/$is_url.ts +0 -4
  487. package/src/functional/$is_uuid.ts +0 -4
  488. package/src/programmers/internal/check_array_tags.ts +0 -45
  489. package/src/programmers/internal/check_string_tags.ts +0 -67
  490. package/src/programmers/internal/get_comment_tags.ts +0 -23
  491. package/src/schemas/metadata/ICommentTag.ts +0 -4
  492. package/src/schemas/metadata/IMetadataCommentTag.ts +0 -112
  493. /package/lib/{programmers/internal/check_array_tags.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -5,6 +5,10 @@ import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
5
 
6
6
  import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
7
 
8
+ import { TransformerError } from "../transformers/TransformerError";
9
+
10
+ import { ValidationPipe } from "../typings/ValidationPipe";
11
+
8
12
  import { Escaper } from "../utils/Escaper";
9
13
 
10
14
  import { MetadataCollection } from "./MetadataCollection";
@@ -15,72 +19,95 @@ export namespace ProtobufFactory {
15
19
  (method: string) =>
16
20
  (checker: ts.TypeChecker) =>
17
21
  (collection: MetadataCollection) =>
18
- (type: ts.Type) => {
22
+ (type: ts.Type): Metadata => {
19
23
  // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
20
- const top: Metadata = MetadataFactory.analyze(checker)({
21
- escape: false,
22
- constant: true,
23
- absorb: true,
24
- validate: validate(method),
25
- })(collection)(type);
24
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
+ MetadataFactory.analyze(checker)({
26
+ escape: false,
27
+ constant: true,
28
+ absorb: true,
29
+ validate,
30
+ })(collection)(type);
31
+ if (result.success === false)
32
+ throw TransformerError.from(`typia.protobuf.${method}`)(
33
+ result.errors,
34
+ );
35
+ return result.data;
36
+ };
26
37
 
27
- // TOP LEVEL TYPE MUST BE A SINGLE OBJECT
38
+ const validate = (
39
+ meta: Metadata,
40
+ explore: MetadataFactory.IExplore,
41
+ ): string[] => {
42
+ const errors: string[] = [];
43
+ const insert = (msg: string) => errors.push(msg);
44
+
45
+ if (explore.top === true) {
28
46
  const onlyObject: boolean =
29
- top.size() === 1 &&
30
- top.objects.length === 1 &&
31
- top.objects[0]!.properties.every((p) =>
47
+ meta.size() === 1 &&
48
+ meta.objects.length === 1 &&
49
+ meta.objects[0]!.properties.every((p) =>
32
50
  p.key.isSoleLiteral(),
33
51
  ) &&
34
- top.isRequired() === true &&
35
- top.nullable === false;
52
+ meta.isRequired() === true &&
53
+ meta.nullable === false;
36
54
  if (onlyObject === false)
37
- throw new Error(
38
- `${prefix(
39
- method,
40
- )} target type must be a sole and static object.`,
41
- );
42
-
43
- return top;
44
- };
55
+ insert("target type must be a sole and static object type");
56
+ return errors;
57
+ }
45
58
 
46
- const validate = (method: string) => (meta: Metadata) => {
47
59
  //----
48
60
  // NOT SUPPORTED TYPES
49
61
  //----
62
+ const noSupport = (msg: string) => insert(`does not support ${msg}`);
63
+
50
64
  // PROHIBIT ANY TYPE
51
- if (meta.any) throw notSupportedError({ method })("any type");
65
+ if (meta.any) noSupport("any type");
52
66
  // PROHIBIT FUNCTIONAL TYPE
53
- else if (meta.functional)
54
- throw notSupportedError({ method })("functional type");
67
+ if (meta.functional) noSupport("functional type");
55
68
  // PROHIBIT TUPLE TYPE
56
- else if (meta.tuples.length)
57
- throw notSupportedError({ method })("tuple type");
69
+ if (meta.tuples.length) noSupport("tuple type");
58
70
  // PROHIBIT SET TYPE
59
- else if (meta.sets.length)
60
- throw notSupportedError({ method })("Set type");
71
+ if (meta.sets.length) noSupport("Set type");
61
72
  // NATIVE TYPE, BUT NOT Uint8Array
62
- else if (meta.natives.length) {
73
+ if (meta.natives.length) {
63
74
  const banned = meta.natives
64
75
  .map((n) => [n, BANNED_NATIVE_TYPES.get(n)] as const)
65
76
  .filter(([_n, b]) => b !== undefined)[0];
66
77
  if (banned !== undefined)
67
- throw notSupportedError({ method })(
78
+ noSupport(
68
79
  banned[1] === null
69
- ? banned[0]
70
- : `${banned[0]}. Use ${banned[1]} instead.`,
80
+ ? `${banned[0]} type`
81
+ : `does ${banned[0]} type. Use ${banned[1]} type instead.`,
71
82
  );
72
83
  }
73
84
  //----
85
+ // ATOMIC CASES
86
+ //----
87
+ if (meta.atomics.length) {
88
+ const numbers = ProtobufUtil.getNumbers(meta);
89
+ const bigints = ProtobufUtil.getBigints(meta);
90
+
91
+ for (const type of ["int64", "uint64"])
92
+ if (
93
+ numbers.some((n) => n === type) &&
94
+ bigints.some((b) => b === type)
95
+ )
96
+ insert(
97
+ `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
98
+ );
99
+ }
100
+ //----
74
101
  // ARRRAY CASES
75
102
  //----
76
103
  // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
77
- else if (
104
+ if (
78
105
  meta.arrays.length &&
79
106
  meta.arrays.some((array) => !!array.type.value.arrays.length)
80
107
  )
81
- throw notSupportedError({ method })("two dimenstional array type");
108
+ noSupport("over two dimenstional array type");
82
109
  // CHILD OF ARRAY TYPE MUST BE REQUIRED
83
- else if (
110
+ if (
84
111
  meta.arrays.length &&
85
112
  meta.arrays.some(
86
113
  (array) =>
@@ -88,15 +115,15 @@ export namespace ProtobufFactory {
88
115
  array.type.value.nullable === true,
89
116
  )
90
117
  )
91
- throw notSupportedError({ method })("optional type in array");
118
+ noSupport("optional type in array");
92
119
  // UNION IN ARRAY
93
- else if (
120
+ if (
94
121
  meta.arrays.length &&
95
122
  meta.arrays.some((a) => a.type.value.size() > 1)
96
123
  )
97
- throw notSupportedError({ method })("union type in array");
124
+ noSupport("union type in array");
98
125
  // DO DYNAMIC OBJECT IN ARRAY
99
- else if (
126
+ if (
100
127
  meta.arrays.length &&
101
128
  meta.arrays.some(
102
129
  (a) =>
@@ -107,21 +134,21 @@ export namespace ProtobufFactory {
107
134
  )),
108
135
  )
109
136
  )
110
- throw notSupportedError({ method })("dynamic object in array");
137
+ noSupport("dynamic object in array");
111
138
  // UNION WITH ARRAY
112
- else if (meta.size() > 1 && meta.arrays.length)
113
- throw notSupportedError({ method })("union type with array type");
139
+ if (meta.size() > 1 && meta.arrays.length)
140
+ noSupport("union type with array type");
114
141
  //----
115
142
  // OBJECT CASES
116
143
  //----
117
144
  // EMPTY PROPERTY
118
- else if (
145
+ if (
119
146
  meta.objects.length &&
120
147
  meta.objects.some((obj) => obj.properties.length === 0)
121
148
  )
122
- throw notSupportedError({ method })("empty object type");
149
+ noSupport("empty object type");
123
150
  // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
124
- else if (
151
+ if (
125
152
  meta.objects.length &&
126
153
  meta.objects.some(
127
154
  (obj) =>
@@ -129,11 +156,11 @@ export namespace ProtobufFactory {
129
156
  .length > 1,
130
157
  )
131
158
  )
132
- throw notSupportedError({ method })(
159
+ noSupport(
133
160
  "object type with multiple dynamic key typed properties. Keep only one.",
134
161
  );
135
162
  // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
136
- else if (
163
+ if (
137
164
  meta.objects.length &&
138
165
  meta.objects.some(
139
166
  (obj) =>
@@ -141,11 +168,11 @@ export namespace ProtobufFactory {
141
168
  obj.properties.some((p) => !p.key.isSoleLiteral()),
142
169
  )
143
170
  )
144
- throw notSupportedError({ method })(
171
+ noSupport(
145
172
  "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
146
173
  );
147
174
  // STATIC PROPERTY, BUT INVALID KEY NAME
148
- else if (
175
+ if (
149
176
  meta.objects.length &&
150
177
  meta.objects.some((obj) =>
151
178
  obj.properties.some(
@@ -155,91 +182,71 @@ export namespace ProtobufFactory {
155
182
  ),
156
183
  )
157
184
  )
158
- throw notSupportedError({ method })(
159
- `object type with invalid static key name.`,
160
- );
185
+ throw noSupport(`object type with invalid static key name.`);
161
186
  // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
162
- else if (
187
+ if (
163
188
  meta.objects.length &&
164
189
  isDynamicObject(meta.objects[0]!) &&
165
190
  meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
166
191
  )
167
- throw notSupportedError({ method })(
168
- "dynamic object with array value type",
169
- );
192
+ noSupport("dynamic object with array value type");
170
193
  // UNION WITH DYNAMIC OBJECT
171
- else if (
194
+ if (
172
195
  meta.size() > 1 &&
173
196
  meta.objects.length &&
174
197
  isDynamicObject(meta.objects[0]!)
175
198
  )
176
- throw notSupportedError({ method })(
177
- "union type with dynamic object type",
178
- );
199
+ noSupport("union type with dynamic object type");
179
200
  // UNION IN DYNAMIC PROPERTY VALUE
180
- else if (
201
+ if (
181
202
  meta.objects.length &&
182
203
  meta.objects.some(
183
204
  (obj) =>
184
205
  isDynamicObject(obj) &&
185
- obj.properties.some((p) => p.value.isBinaryUnion()),
206
+ obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
186
207
  )
187
208
  )
188
- throw notSupportedError({ method })(
189
- "union type in dynamic property",
190
- );
209
+ noSupport("union type in dynamic property");
191
210
  //----
192
211
  // MAP CASES
193
212
  //----
194
- // MAP TYPE, BUT PROPERTY KEY TYPE IS NOT STRING
195
- // @todo -> need to allow other typed keys
196
- else if (
213
+ // KEY TYPE IS UNION
214
+ if (
197
215
  meta.maps.length &&
198
- meta.maps.some(
199
- (m) =>
200
- m.key.isBinaryUnion() ||
201
- (m.key.atomics.find((v) => v.type === "string") ===
202
- undefined &&
203
- m.key.constants.find((c) => c.type === "string") ===
204
- undefined),
205
- )
216
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
217
+ )
218
+ noSupport("union key typed map");
219
+ // KEY TYPE IS NOT ATOMIC
220
+ if (
221
+ meta.maps.length &&
222
+ meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
206
223
  )
207
- throw notSupportedError({ method })("non-string key typed map");
224
+ noSupport("non-atomic key typed map");
208
225
  // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
209
- else if (
226
+ if (
210
227
  meta.maps.length &&
211
228
  meta.maps.some(
212
229
  (m) => m.key.isRequired() === false || m.key.nullable,
213
230
  )
214
231
  )
215
- throw notSupportedError({ method })("optional key typed map");
232
+ noSupport("optional key typed map");
216
233
  // MAP TYPE, BUT VALUE TYPE IS ARRAY
217
- else if (
218
- meta.maps.length &&
219
- meta.maps.some((m) => !!m.value.arrays.length)
220
- )
221
- throw notSupportedError({ method })(
222
- "map type with array value type",
223
- );
234
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
235
+ noSupport("map type with array value type");
224
236
  // UNION WITH MAP
225
- else if (meta.size() > 1 && meta.maps.length)
226
- throw notSupportedError({ method })("union type with map type");
237
+ if (meta.size() > 1 && meta.maps.length)
238
+ noSupport("union type with map type");
227
239
  // UNION IN MAP
228
- else if (
240
+ if (
229
241
  meta.maps.length &&
230
- meta.maps.some((m) => m.value.isBinaryUnion())
242
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
231
243
  )
232
- throw notSupportedError({ method })("union type in map");
244
+ noSupport("union type in map");
245
+
246
+ return errors;
233
247
  };
234
248
  }
235
249
 
236
- const prefix = (method: string) => `Error on ${method}():`;
237
-
238
- const notSupportedError = (p: { method: string }) => (title: string) =>
239
- new Error(
240
- `${prefix(p.method)}: protocol buffer does not support ${title}.`,
241
- );
242
-
243
250
  const isDynamicObject = (obj: MetadataObject): boolean =>
244
251
  obj.properties[0]!.key.isSoleLiteral() === false;
245
252
 
@@ -1,11 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  export namespace TypeFactory {
4
- export const resolve =
5
- (checker: ts.TypeChecker) =>
6
- (type: ts.Type): ts.Type | null =>
7
- getReturnType(checker)(type)("toJSON");
8
-
9
4
  export const isFunction = (type: ts.Type): boolean =>
10
5
  getFunction(type) !== null;
11
6
 
@@ -1,4 +1,5 @@
1
1
  import { Metadata } from "../../../schemas/metadata/Metadata";
2
+ import { MetadataAtomic } from "../../../schemas/metadata/MetadataAtomic";
2
3
 
3
4
  import { ArrayUtil } from "../../../utils/ArrayUtil";
4
5
 
@@ -21,7 +22,11 @@ export const emend_metadata_atomics = (meta: Metadata) => {
21
22
  ArrayUtil.take(
22
23
  meta.atomics,
23
24
  (a) => a.type === "boolean",
24
- () => ({ type: "boolean" as const, tags: [] }),
25
+ () =>
26
+ MetadataAtomic.create({
27
+ type: "boolean" as const,
28
+ tags: [],
29
+ }),
25
30
  );
26
31
  }
27
32
  }
@@ -7,14 +7,18 @@ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
7
 
8
8
  import { MetadataCollection } from "../../MetadataCollection";
9
9
  import { MetadataFactory } from "../../MetadataFactory";
10
- import { MetadataTagFactory } from "../../MetadataTagFactory";
11
10
  import { explore_metadata } from "./explore_metadata";
12
11
 
13
12
  export const emplace_metadata_alias =
14
13
  (checker: ts.TypeChecker) =>
15
14
  (options: MetadataFactory.IOptions) =>
16
15
  (collection: MetadataCollection) =>
17
- (type: ts.Type, nullable: boolean): MetadataAlias => {
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ type: ts.Type,
19
+ nullable: boolean,
20
+ explore: MetadataFactory.IExplore,
21
+ ): MetadataAlias => {
18
22
  // CHECK EXISTENCE
19
23
  const [alias, newbie, closure] = collection.emplaceAlias(
20
24
  checker,
@@ -26,15 +30,12 @@ export const emplace_metadata_alias =
26
30
 
27
31
  // CONSTRUCT VALUE TYPE
28
32
  const value: Metadata = explore_metadata(checker)(options)(collection)(
29
- type,
30
- false,
31
- true,
32
- );
33
+ errors,
34
+ )(type, {
35
+ ...explore,
36
+ escaped: false,
37
+ aliased: true,
38
+ });
33
39
  closure(value);
34
- alias.tags.push(
35
- ...MetadataTagFactory.generate(value)(alias.jsDocTags)(
36
- () => alias.name,
37
- ),
38
- );
39
40
  return alias;
40
41
  };
@@ -13,7 +13,12 @@ export const emplace_metadata_array_type =
13
13
  (checker: ts.TypeChecker) =>
14
14
  (options: MetadataFactory.IOptions) =>
15
15
  (collection: MetadataCollection) =>
16
- (type: ts.Type, nullable: boolean): MetadataArrayType => {
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ type: ts.Type,
19
+ nullable: boolean,
20
+ explore: MetadataFactory.IExplore,
21
+ ): MetadataArrayType => {
17
22
  // CHECK EXISTENCE
18
23
  const [array, newbie, setValue] = collection.emplaceArray(
19
24
  checker,
@@ -24,10 +29,12 @@ export const emplace_metadata_array_type =
24
29
 
25
30
  // CONSTRUCT VALUE TYPE
26
31
  const value: Metadata = explore_metadata(checker)(options)(collection)(
27
- type.getNumberIndexType()!,
28
- false,
29
- false,
30
- );
32
+ errors,
33
+ )(type.getNumberIndexType()!, {
34
+ ...explore,
35
+ escaped: false,
36
+ aliased: false,
37
+ });
31
38
  setValue(value);
32
39
 
33
40
  return array;
@@ -18,6 +18,7 @@ export const emplace_metadata_object =
18
18
  (checker: ts.TypeChecker) =>
19
19
  (options: MetadataFactory.IOptions) =>
20
20
  (collection: MetadataCollection) =>
21
+ (errors: MetadataFactory.IError[]) =>
21
22
  (parent: ts.Type, nullable: boolean): MetadataObject => {
22
23
  // EMPLACE OBJECT
23
24
  const [obj, newbie] = collection.emplace(checker, parent);
@@ -61,7 +62,6 @@ export const emplace_metadata_object =
61
62
  value,
62
63
  description,
63
64
  jsDocTags,
64
- tags: [],
65
65
  });
66
66
  obj.properties.push(property);
67
67
  return property;
@@ -100,7 +100,14 @@ export const emplace_metadata_object =
100
100
  const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
101
101
  const value: Metadata = explore_metadata(checker)(options)(
102
102
  collection,
103
- )(type, false);
103
+ )(errors)(type, {
104
+ top: false,
105
+ object: obj,
106
+ property: prop.name,
107
+ nested: null,
108
+ escaped: false,
109
+ aliased: false,
110
+ });
104
111
 
105
112
  // OPTIONAL, BUT CAN BE RQUIRED BY `Required<T>` TYPE
106
113
  if (node?.questionToken) Writable(value).optional = true;
@@ -112,10 +119,17 @@ export const emplace_metadata_object =
112
119
  //----
113
120
  for (const index of checker.getIndexInfosOfType(parent)) {
114
121
  // GET EXACT TYPE
115
- const analyzer = (type: ts.Type) =>
116
- explore_metadata(checker)(options)(collection)(type, false);
117
- const key: Metadata = analyzer(index.keyType);
118
- const value: Metadata = analyzer(index.type);
122
+ const analyzer = (type: ts.Type) => (property: {} | null) =>
123
+ explore_metadata(checker)(options)(collection)(errors)(type, {
124
+ top: false,
125
+ object: obj,
126
+ property,
127
+ nested: null,
128
+ escaped: false,
129
+ aliased: false,
130
+ });
131
+ const key: Metadata = analyzer(index.keyType)(null);
132
+ const value: Metadata = analyzer(index.type)({});
119
133
 
120
134
  // INSERT WITH REQUIRED CONFIGURATION
121
135
  insert(key)(value)(
@@ -15,7 +15,12 @@ export const emplace_metadata_tuple =
15
15
  (checker: ts.TypeChecker) =>
16
16
  (options: MetadataFactory.IOptions) =>
17
17
  (collection: MetadataCollection) =>
18
- (type: ts.TupleType, nullable: boolean): MetadataTupleType => {
18
+ (errors: MetadataFactory.IError[]) =>
19
+ (
20
+ type: ts.TupleType,
21
+ nullable: boolean,
22
+ explore: MetadataFactory.IExplore,
23
+ ): MetadataTupleType => {
19
24
  // CHECK EXISTENCE
20
25
  const [tuple, newbie, closure] = collection.emplaceTuple(checker, type);
21
26
  ArrayUtil.add(tuple.nullables, nullable);
@@ -31,7 +36,12 @@ export const emplace_metadata_tuple =
31
36
  .map((elem, i) => {
32
37
  const child: Metadata = explore_metadata(checker)(options)(
33
38
  collection,
34
- )(elem, false, false);
39
+ )(errors)(elem, {
40
+ ...explore,
41
+ nested: tuple,
42
+ aliased: false,
43
+ escaped: false,
44
+ });
35
45
 
36
46
  // CHECK OPTIONAL
37
47
  const flag: ts.ElementFlags | undefined = flagList[i];
@@ -11,23 +11,17 @@ export const explore_metadata =
11
11
  (checker: ts.TypeChecker) =>
12
12
  (options: MetadataFactory.IOptions) =>
13
13
  (collection: MetadataCollection) =>
14
- (
15
- type: ts.Type | null,
16
- parentResolved: boolean,
17
- aliased: boolean = false,
18
- ): Metadata => {
14
+ (errors: MetadataFactory.IError[]) =>
15
+ (type: ts.Type | null, explore: MetadataFactory.IExplore): Metadata => {
19
16
  // CONSTRUCT METADATA
20
- const meta: Metadata = Metadata.initialize(parentResolved);
21
- collection.entire_.add(meta);
22
-
17
+ const meta: Metadata = Metadata.initialize(explore.escaped);
23
18
  if (type === null) return meta;
24
19
 
25
20
  // ITERATE TYPESCRIPT TYPES
26
- iterate_metadata(checker)(options)(collection)(
21
+ iterate_metadata(checker)(options)(collection)(errors)(
27
22
  meta,
28
23
  type,
29
- parentResolved,
30
- aliased,
24
+ explore,
31
25
  );
32
26
  emend_metadata_atomics(meta);
33
27
  if (meta.escaped) {
@@ -2,9 +2,9 @@ import ts from "typescript";
2
2
 
3
3
  import { Metadata } from "../../../schemas/metadata/Metadata";
4
4
 
5
- // import { ArrayUtil } from "../../../utils/ArrayUtil";
6
5
  import { MetadataCollection } from "../../MetadataCollection";
7
6
  import { MetadataFactory } from "../../MetadataFactory";
7
+ import { TypeFactory } from "../../TypeFactory";
8
8
  import { iterate_metadata_alias } from "./iterate_metadata_alias";
9
9
  import { iterate_metadata_array } from "./iterate_metadata_array";
10
10
  import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
@@ -24,39 +24,42 @@ export const iterate_metadata =
24
24
  (checker: ts.TypeChecker) =>
25
25
  (options: MetadataFactory.IOptions) =>
26
26
  (collection: MetadataCollection) =>
27
+ (errors: MetadataFactory.IError[]) =>
27
28
  (
28
29
  meta: Metadata,
29
30
  type: ts.Type,
30
- resolved: boolean,
31
- aliased: boolean,
31
+ explore: MetadataFactory.IExplore,
32
32
  ): void => {
33
- if (type.isTypeParameter() === true)
34
- throw new Error(
35
- `Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
36
- );
33
+ if (type.isTypeParameter() === true) {
34
+ errors.push({
35
+ name: TypeFactory.getFullName(checker)(type),
36
+ explore: { ...explore },
37
+ messages: ["non-specified generic argument found."],
38
+ });
39
+ return;
40
+ }
37
41
  // CHECK SPECIAL CASES
38
- if (
39
- (aliased !== true &&
40
- iterate_metadata_alias(checker)(options)(collection)(
42
+ else if (
43
+ (explore.aliased !== true &&
44
+ iterate_metadata_alias(checker)(options)(collection)(errors)(
41
45
  meta,
42
46
  type,
47
+ explore,
43
48
  )) ||
44
- iterate_metadata_intersection(checker)(options)(collection)(
49
+ iterate_metadata_intersection(checker)(options)(collection)(errors)(
45
50
  meta,
46
51
  type,
47
- resolved,
48
- aliased,
52
+ explore,
49
53
  ) ||
50
- iterate_metadata_union(checker)(options)(collection)(
54
+ iterate_metadata_union(checker)(options)(collection)(errors)(
51
55
  meta,
52
56
  type,
53
- resolved,
57
+ explore,
54
58
  ) ||
55
- iterate_metadata_resolve(checker)(options)(collection)(
59
+ iterate_metadata_resolve(checker)(options)(collection)(errors)(
56
60
  meta,
57
61
  type,
58
- resolved,
59
- aliased,
62
+ explore,
60
63
  )
61
64
  )
62
65
  return;
@@ -64,18 +67,35 @@ export const iterate_metadata =
64
67
  // ITERATE CASES
65
68
  iterate_metadata_coalesce(meta, type) ||
66
69
  iterate_metadata_constant(checker)(options)(meta, type) ||
67
- iterate_metadata_template(checker)(options)(collection)(
70
+ iterate_metadata_template(checker)(options)(collection)(errors)(
68
71
  meta,
69
72
  type,
73
+ explore,
70
74
  ) ||
71
75
  iterate_metadata_atomic(meta, type) ||
72
- iterate_metadata_tuple(checker)(options)(collection)(
76
+ iterate_metadata_tuple(checker)(options)(collection)(errors)(
73
77
  meta,
74
78
  type as ts.TupleType,
79
+ explore,
80
+ ) ||
81
+ iterate_metadata_array(checker)(options)(collection)(errors)(
82
+ meta,
83
+ type,
84
+ explore,
75
85
  ) ||
76
- iterate_metadata_array(checker)(options)(collection)(meta, type) ||
77
86
  iterate_metadata_native(checker)(meta, type) ||
78
- iterate_metadata_map(checker)(options)(collection)(meta, type) ||
79
- iterate_metadata_set(checker)(options)(collection)(meta, type) ||
80
- iterate_metadata_object(checker)(options)(collection)(meta, type);
87
+ iterate_metadata_map(checker)(options)(collection)(errors)(
88
+ meta,
89
+ type,
90
+ explore,
91
+ ) ||
92
+ iterate_metadata_set(checker)(options)(collection)(errors)(
93
+ meta,
94
+ type,
95
+ explore,
96
+ ) ||
97
+ iterate_metadata_object(checker)(options)(collection)(errors)(
98
+ meta,
99
+ type,
100
+ );
81
101
  };