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
@@ -1,17 +1,22 @@
1
- export type TagBase<
2
- Target extends "bigint" | "number" | "string" | "array",
3
- Kind extends string,
4
- Value extends boolean | bigint | number | string,
5
- Validate extends
6
- | string
7
- | {
8
- [key in Target]?: string;
9
- },
10
- > = {
11
- "typia.tag"?: {
1
+ export type TagBase<Props extends TagBase.IProps<any, any, any, any, any>> = {
2
+ "typia.tag"?: Props;
3
+ };
4
+ export namespace TagBase {
5
+ export interface IProps<
6
+ Target extends "bigint" | "number" | "string" | "array",
7
+ Kind extends string,
8
+ Value extends boolean | bigint | number | string | undefined,
9
+ Validate extends
10
+ | string
11
+ | {
12
+ [key in Target]?: string;
13
+ },
14
+ Exclusive extends boolean | string[],
15
+ > {
12
16
  target: Target;
13
17
  kind: Kind;
14
18
  value: Value;
15
19
  validate: Validate;
16
- };
17
- };
20
+ exclusive?: Exclusive | string[];
21
+ }
22
+ }
package/src/tags/Type.ts CHANGED
@@ -1,30 +1,27 @@
1
+ import { TagBase } from "./TagBase";
2
+
1
3
  export type Type<
2
- Target extends
3
- | "int"
4
- | "uint"
5
- | "int32"
6
- | "uint32"
7
- | "int64"
8
- | "uint64"
9
- | "float",
10
- > = {
11
- "typia.tag"?: {
12
- target: Target extends "uint64" ? "bigint" : "number" | "bigint";
13
- kind: "type";
14
- value: Target;
15
- validate: Target extends "int" | "int32"
16
- ? `Number.isInteger($input) && -2147483648 <= $input && $input <= 2147483647`
17
- : Target extends "uint" | "uint32"
18
- ? `Number.isInteger($input) && 0 <= $input && $input <= 4294967295`
19
- : Target extends "int64"
20
- ? {
21
- number: `Number.isInteger($input) && -9223372036854775808 <= $input && $input <= 9223372036854775807`;
22
- }
23
- : Target extends "uint64"
24
- ? {
25
- number: `Number.isInteger($input) && 0 <= $input && $input <= 18446744073709551615`;
26
- bigint: `BigInt(0) <= $input && $input <= BigInt(18446744073709551615)`;
27
- }
28
- : `-1.175494351e38 <= $input <= 3.4028235e38`;
29
- };
30
- };
4
+ Value extends "int32" | "uint32" | "int64" | "uint64" | "float" | "double",
5
+ > = TagBase<{
6
+ target: Value extends "int64" | "uint64" ? "bigint" | "number" : "number";
7
+ kind: "type";
8
+ value: Value;
9
+ validate: Value extends "int32"
10
+ ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`
11
+ : Value extends "uint32"
12
+ ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`
13
+ : Value extends "int64"
14
+ ? {
15
+ number: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`;
16
+ bigint: `true`;
17
+ }
18
+ : Value extends "uint64"
19
+ ? {
20
+ number: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`;
21
+ bigint: `BigInt(0) <= $input`;
22
+ }
23
+ : Value extends "float"
24
+ ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`
25
+ : `true`;
26
+ exclusive: true;
27
+ }>;
package/src/tags/index.ts CHANGED
@@ -7,6 +7,7 @@ export * from "./MaxLength";
7
7
  export * from "./Minimum";
8
8
  export * from "./MinItems";
9
9
  export * from "./MinLength";
10
+ export * from "./MultipleOf";
10
11
  export * from "./Pattern";
11
12
  export * from "./TagBase";
12
13
  export * from "./Type";
package/src/transform.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { FileTransformer } from "./transformers/FileTransformer";
4
+ import { IProject } from "./transformers/IProject";
4
5
  import { ITransformOptions } from "./transformers/ITransformOptions";
5
6
 
6
7
  export const transform = (
7
8
  program: ts.Program,
8
- options?: ITransformOptions,
9
+ options: ITransformOptions | undefined,
10
+ extras: IProject["extras"],
9
11
  ): ts.TransformerFactory<ts.SourceFile> => {
10
12
  const compilerOptions: ts.CompilerOptions = program.getCompilerOptions();
11
13
  const strict: boolean =
@@ -13,15 +15,21 @@ export const transform = (
13
15
  ? !!compilerOptions.strictNullChecks
14
16
  : !!compilerOptions.strict;
15
17
  if (strict === false)
16
- throw new Error(
17
- `Error on "tsconfig.json": typia requires \`compilerOptions.strictNullChecks\` to be true.`,
18
- );
18
+ extras.addDiagnostic({
19
+ category: ts.DiagnosticCategory.Error,
20
+ code: "(typia)" as any,
21
+ file: undefined,
22
+ start: undefined,
23
+ length: undefined,
24
+ messageText: "strict mode is required.",
25
+ });
19
26
  return FileTransformer.transform({
20
27
  program,
21
28
  compilerOptions,
22
29
  checker: program.getTypeChecker(),
23
30
  printer: ts.createPrinter(),
24
- options: options || {},
31
+ options: options ?? {},
32
+ extras,
25
33
  });
26
34
  };
27
35
  export default transform;
@@ -64,7 +64,7 @@ import { ProtobufValidateEncodeTransformer } from "./features/protobuf/ProtobufV
64
64
  export namespace CallExpressionTransformer {
65
65
  export const transform =
66
66
  (project: IProject) =>
67
- (expression: ts.CallExpression): ts.Expression => {
67
+ (expression: ts.CallExpression): ts.Expression | null => {
68
68
  //----
69
69
  // VALIDATIONS
70
70
  //----
@@ -95,7 +95,10 @@ export namespace CallExpressionTransformer {
95
95
  if (functor === undefined) return expression;
96
96
 
97
97
  // RETURNS WITH TRANSFORMATION
98
- return functor()(project)(expression.expression)(expression);
98
+ const result: ts.Expression | null = functor()(project)(
99
+ expression.expression,
100
+ )(expression);
101
+ return result ?? expression;
99
102
  };
100
103
 
101
104
  const isTarget = (location: string): boolean => {
@@ -126,7 +129,7 @@ type Task = (
126
129
  project: IProject,
127
130
  ) => (
128
131
  modulo: ts.LeftHandSideExpression,
129
- ) => (expression: ts.CallExpression) => ts.Expression;
132
+ ) => (expression: ts.CallExpression) => ts.Expression | null;
130
133
 
131
134
  const FUNCTORS: Record<string, Record<string, () => Task>> = {
132
135
  module: {
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IProject } from "./IProject";
4
4
  import { NodeTransformer } from "./NodeTransformer";
5
+ import { TransformerError } from "./TransformerError";
5
6
 
6
7
  export namespace FileTransformer {
7
8
  export const transform =
@@ -19,29 +20,40 @@ export namespace FileTransformer {
19
20
  const iterate_node =
20
21
  (project: IProject) =>
21
22
  (context: ts.TransformationContext) =>
22
- (node: ts.Node): ts.Node =>
23
- ts.visitEachChild(
24
- try_transform_node(project)(node),
23
+ (node: ts.Node): ts.Node => {
24
+ const changed: ts.Node | null = try_transform_node(project)(node);
25
+ return ts.visitEachChild(
26
+ changed ?? node,
25
27
  (child) => iterate_node(project)(context)(child),
26
28
  context,
27
29
  );
30
+ };
28
31
 
29
32
  const try_transform_node =
30
33
  (project: IProject) =>
31
- (node: ts.Node): ts.Node => {
34
+ (node: ts.Node): ts.Node | null => {
32
35
  try {
33
36
  return NodeTransformer.transform(project)(node);
34
37
  } catch (exp) {
35
- if (!(exp instanceof Error)) throw exp;
38
+ // ONLY ACCEPT TRANSFORMER-ERROR
39
+ if (!isTransformerError(exp)) throw exp;
36
40
 
37
- const file: ts.SourceFile = node.getSourceFile();
38
- const { line, character } = file.getLineAndCharacterOfPosition(
39
- node.pos,
40
- );
41
- exp.message += ` - ${file.fileName}:${line + 1}:${
42
- character + 1
43
- }`;
44
- throw exp;
41
+ // REPORT DIAGNOSTIC
42
+ const diagnostic = ts.createDiagnosticForNode(node, {
43
+ key: exp.code,
44
+ category: ts.DiagnosticCategory.Error,
45
+ message: exp.message,
46
+ code: `(${exp.code})` as any,
47
+ });
48
+ project.extras.addDiagnostic(diagnostic);
49
+ return null;
45
50
  }
46
51
  };
47
52
  }
53
+
54
+ const isTransformerError = (error: any): error is TransformerError =>
55
+ typeof error === "object" &&
56
+ error !== null &&
57
+ error.constructor.name === "TransformerError" &&
58
+ typeof error.code === "string" &&
59
+ typeof error.message === "string";
@@ -9,4 +9,7 @@ export interface IProject {
9
9
  printer: ts.Printer;
10
10
  options: ITransformOptions;
11
11
  context: ts.TransformationContext;
12
+ extras: {
13
+ addDiagnostic: (diag: ts.Diagnostic) => number;
14
+ };
12
15
  }
@@ -6,7 +6,7 @@ import { IProject } from "./IProject";
6
6
  export namespace NodeTransformer {
7
7
  export const transform =
8
8
  (project: IProject) =>
9
- (expression: ts.Node): ts.Node =>
9
+ (expression: ts.Node): ts.Node | null =>
10
10
  ts.isCallExpression(expression)
11
11
  ? CallExpressionTransformer.transform(project)(expression)
12
12
  : expression;
@@ -0,0 +1,55 @@
1
+ import { MetadataFactory } from "../factories/MetadataFactory";
2
+
3
+ import { MetadataObject } from "../schemas/metadata/MetadataObject";
4
+
5
+ import { Escaper } from "../utils/Escaper";
6
+
7
+ export class TransformerError extends Error {
8
+ public readonly code: string;
9
+
10
+ public constructor(props: TransformerError.IProps) {
11
+ super(props.message);
12
+ this.code = props.code;
13
+
14
+ // INHERITANCE POLYFILL
15
+ const proto = new.target.prototype;
16
+ if (Object.setPrototypeOf) Object.setPrototypeOf(this, proto);
17
+ else (this as any).__proto__ = proto;
18
+ }
19
+ }
20
+ export namespace TransformerError {
21
+ export interface IProps {
22
+ code: string;
23
+ message: string;
24
+ }
25
+
26
+ export const from =
27
+ (method: string) =>
28
+ (errors: MetadataFactory.IError[]): TransformerError => {
29
+ const body: string = errors
30
+ .map((e) => {
31
+ const subject: string =
32
+ e.explore.object === null
33
+ ? ""
34
+ : join(e.explore.object)(e.explore.property);
35
+ const type: string = `${
36
+ subject.length ? `${subject}: ` : ""
37
+ }${e.name}`;
38
+ return `- ${type}\n${e.messages
39
+ .map((msg) => ` - ${msg}`)
40
+ .join("\n")}`;
41
+ })
42
+ .join("\n\n");
43
+ return new TransformerError({
44
+ code: method,
45
+ message: `unsupported type detected\n\n${body}`,
46
+ });
47
+ };
48
+
49
+ const join = (object: MetadataObject) => (key: string | object | null) => {
50
+ if (key === null) return object.name;
51
+ else if (typeof key === "object") return `${object.name}[key]`;
52
+ else if (Escaper.variable(key)) return `${object.name}.${key}`;
53
+ return `${object.name}[${JSON.stringify(key)}]`;
54
+ };
55
+ }
@@ -3,6 +3,7 @@ import ts from "typescript";
3
3
  import { RandomProgrammer } from "../../programmers/RandomProgrammer";
4
4
 
5
5
  import { IProject } from "../IProject";
6
+ import { TransformerError } from "../TransformerError";
6
7
 
7
8
  export namespace CreateRandomTransformer {
8
9
  export const transform =
@@ -10,13 +11,21 @@ export namespace CreateRandomTransformer {
10
11
  (modulo: ts.LeftHandSideExpression) =>
11
12
  (expression: ts.CallExpression): ts.Expression => {
12
13
  // CHECK GENERIC ARGUMENT EXISTENCE
13
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
14
+ if (!expression.typeArguments?.[0])
15
+ throw new TransformerError({
16
+ code: "typia.createRandom",
17
+ message: "generic argument is not specified.",
18
+ });
14
19
 
15
20
  // GET TYPE INFO
16
21
  const node: ts.TypeNode = expression.typeArguments[0];
17
22
  const type: ts.Type = project.checker.getTypeFromTypeNode(node);
18
23
 
19
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
24
+ if (type.isTypeParameter())
25
+ throw new TransformerError({
26
+ code: "typia.createRandom",
27
+ message: "non-specified generic argument.",
28
+ });
20
29
 
21
30
  // DO TRANSFORM
22
31
  return RandomProgrammer.write({
@@ -32,8 +41,3 @@ export namespace CreateRandomTransformer {
32
41
  );
33
42
  };
34
43
  }
35
-
36
- const NOT_SPECIFIED =
37
- "Error on typia.createRandom(): generic argument is not specified.";
38
- const NO_GENERIC_ARGUMENT =
39
- "Error on typia.createRandom(): non-specified generic argument.";
@@ -3,6 +3,7 @@ import ts from "typescript";
3
3
  import { RandomProgrammer } from "../../programmers/RandomProgrammer";
4
4
 
5
5
  import { IProject } from "../IProject";
6
+ import { TransformerError } from "../TransformerError";
6
7
 
7
8
  export namespace RandomTransformer {
8
9
  export const transform =
@@ -10,13 +11,21 @@ export namespace RandomTransformer {
10
11
  (modulo: ts.LeftHandSideExpression) =>
11
12
  (expression: ts.CallExpression): ts.Expression => {
12
13
  // CHECK GENERIC ARGUMENT EXISTENCE
13
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
14
+ if (!expression.typeArguments?.[0])
15
+ throw new TransformerError({
16
+ code: `typia.${modulo.getText()}`,
17
+ message: "generic argument is not specified.",
18
+ });
14
19
 
15
20
  // GET TYPE INFO
16
21
  const node: ts.TypeNode = expression.typeArguments[0];
17
22
  const type: ts.Type = project.checker.getTypeFromTypeNode(node);
18
23
 
19
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
24
+ if (type.isTypeParameter())
25
+ throw new TransformerError({
26
+ code: `typia.${modulo.getText()}`,
27
+ message: "non-specified generic argument.",
28
+ });
20
29
 
21
30
  // DO TRANSFORM
22
31
  return ts.factory.createCallExpression(
@@ -35,8 +44,3 @@ export namespace RandomTransformer {
35
44
  );
36
45
  };
37
46
  }
38
-
39
- const NOT_SPECIFIED =
40
- "Error on typia.random(): generic argument is not specified.";
41
- const NO_GENERIC_ARGUMENT =
42
- "Error on typia.random(): non-specified generic argument.";
@@ -1,5 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { JsonMetadataFactory } from "../../../factories/JsonMetadataFactory";
3
4
  import { LiteralFactory } from "../../../factories/LiteralFactory";
4
5
  import { MetadataCollection } from "../../../factories/MetadataCollection";
5
6
  import { MetadataFactory } from "../../../factories/MetadataFactory";
@@ -9,14 +10,20 @@ import { Metadata } from "../../../schemas/metadata/Metadata";
9
10
 
10
11
  import { JsonApplicationProgrammer } from "../../../programmers/json/JsonApplicationProgrammer";
11
12
 
13
+ import { ValidationPipe } from "../../../typings/ValidationPipe";
14
+
12
15
  import { IProject } from "../../IProject";
16
+ import { TransformerError } from "../../TransformerError";
13
17
 
14
18
  export namespace JsonApplicationTransformer {
15
19
  export const transform =
16
20
  ({ checker }: IProject) =>
17
21
  (expression: ts.CallExpression): ts.Expression => {
18
22
  if (!expression.typeArguments?.length)
19
- throw new Error(NO_GENERIC_ARGUMENT);
23
+ throw new TransformerError({
24
+ code: "typia.json.application",
25
+ message: "no generic argument.",
26
+ });
20
27
 
21
28
  //----
22
29
  // GET ARGUMENTS
@@ -32,7 +39,10 @@ export namespace JsonApplicationTransformer {
32
39
  checker.getTypeFromTypeNode(child as ts.TypeNode),
33
40
  );
34
41
  if (types.some((t) => t.isTypeParameter()))
35
- throw new Error(GENERIC_ARGUMENT);
42
+ throw new TransformerError({
43
+ code: "typia.json.application",
44
+ message: "non-specified generic argument(s).",
45
+ });
36
46
 
37
47
  // ADDITIONAL PARAMETERS
38
48
  const purpose: "swagger" | "ajv" = get_parameter(
@@ -48,24 +58,25 @@ export namespace JsonApplicationTransformer {
48
58
  //----
49
59
  // METADATA
50
60
  const collection: MetadataCollection = new MetadataCollection();
51
- const metadatas: Array<Metadata> = types.map((type) =>
52
- MetadataFactory.analyze(checker)({
53
- escape: true,
54
- constant: true,
55
- absorb: false,
56
- validate: (meta) => {
57
- if (meta.atomics.find((atom) => atom.type === "bigint"))
58
- throw new Error(NO_BIGIT);
59
- else if (
60
- meta.arrays.some(
61
- (array) =>
62
- array.type.value.isRequired() === false,
63
- )
64
- )
65
- throw new Error(NO_UNDEFINED_IN_ARRAY);
66
- },
67
- })(collection)(type),
68
- );
61
+ const results: ValidationPipe<Metadata, MetadataFactory.IError>[] =
62
+ types.map((type) =>
63
+ MetadataFactory.analyze(checker)({
64
+ escape: true,
65
+ constant: true,
66
+ absorb: false,
67
+ validate: JsonMetadataFactory.validate,
68
+ })(collection)(type),
69
+ );
70
+
71
+ // REPORT BUG IF REQUIRED
72
+ const metadatas: Metadata[] = [];
73
+ const errors: MetadataFactory.IError[] = [];
74
+ for (const r of results) {
75
+ if (r.success === false) errors.push(...r.errors);
76
+ else metadatas.push(r.data);
77
+ }
78
+ if (errors.length)
79
+ throw TransformerError.from("typia.json.application")(errors);
69
80
 
70
81
  // APPLICATION
71
82
  const app: IJsonApplication = JsonApplicationProgrammer.write({
@@ -88,25 +99,18 @@ export namespace JsonApplicationTransformer {
88
99
  // CHECK LITERAL TYPE
89
100
  const type: ts.Type = checker.getTypeFromTypeNode(node);
90
101
  if (!type.isLiteral())
91
- throw new Error(
92
- `Error on typia.application(): generic argument "${name}" must be constant.`,
93
- );
102
+ throw new TransformerError({
103
+ code: "typia.json.application",
104
+ message: `generic argument "${name}" must be constant.`,
105
+ });
94
106
 
95
107
  // GET VALUE AND VALIDATE IT
96
108
  const value = type.value;
97
109
  if (typeof value !== "string" || predicator(value) === false)
98
- throw new Error(
99
- `Error on typia.application(): invalid value on generic argument "${name}".`,
100
- );
110
+ throw new TransformerError({
111
+ code: "typia.json.application",
112
+ message: `invalid value on generic argument "${name}".`,
113
+ });
101
114
  return value as T;
102
115
  };
103
116
  }
104
-
105
- const NO_GENERIC_ARGUMENT =
106
- "Error on typia.json.application(): no generic argument.";
107
- const GENERIC_ARGUMENT =
108
- "Error on typia.json.application(): non-specified generic argument(s).";
109
- const NO_BIGIT =
110
- "Error on typia.json.application(): does not allow bigint type.";
111
- const NO_UNDEFINED_IN_ARRAY =
112
- "Error on typia.json.application(): does not allow undefined type in array.";
@@ -8,13 +8,17 @@ import { IMetadataApplication } from "../../../schemas/metadata/IMetadataApplica
8
8
  import { Metadata } from "../../../schemas/metadata/Metadata";
9
9
 
10
10
  import { IProject } from "../../IProject";
11
+ import { TransformerError } from "../../TransformerError";
11
12
 
12
13
  export namespace MetadataTransformer {
13
14
  export const transform =
14
15
  ({ checker }: IProject) =>
15
16
  (expression: ts.CallExpression): ts.Expression => {
16
17
  if (!expression.typeArguments?.length)
17
- throw new Error(NO_GENERIC_ARGUMENT);
18
+ throw new TransformerError({
19
+ code: "typia.metadata",
20
+ message: "no generic argument.",
21
+ });
18
22
 
19
23
  // VALIDATE TUPLE ARGUMENTS
20
24
  const top: ts.Node = expression.typeArguments[0]!;
@@ -27,17 +31,25 @@ export namespace MetadataTransformer {
27
31
  checker.getTypeFromTypeNode(child as ts.TypeNode),
28
32
  );
29
33
  if (types.some((t) => t.isTypeParameter()))
30
- throw new Error(GENERIC_ARGUMENT);
34
+ throw new TransformerError({
35
+ code: "typia.metadata",
36
+ message: "non-specified generic argument(s).",
37
+ });
31
38
 
32
39
  // METADATA
33
40
  const collection: MetadataCollection = new MetadataCollection();
34
- const metadatas: Array<Metadata> = types.map((type) =>
35
- MetadataFactory.analyze(checker)({
41
+ const metadatas: Array<Metadata> = types.map((type) => {
42
+ const result = MetadataFactory.analyze(checker)({
36
43
  escape: true,
37
44
  constant: true,
38
45
  absorb: true,
39
- })(collection)(type),
40
- );
46
+ })(collection)(type);
47
+ if (result.success === false)
48
+ throw TransformerError.from("typia.metadata")(
49
+ result.errors,
50
+ );
51
+ return result.data;
52
+ });
41
53
 
42
54
  // CONVERT TO PRIMITIVE TYPE
43
55
  const app: IMetadataApplication = {
@@ -47,7 +59,3 @@ export namespace MetadataTransformer {
47
59
  return LiteralFactory.generate(app);
48
60
  };
49
61
  }
50
-
51
- const NO_GENERIC_ARGUMENT = "Error on typia.metadata(): no generic argument.";
52
- const GENERIC_ARGUMENT =
53
- "Error on typia.metadata(): non-specified generic argument(s).";
@@ -1,9 +1,9 @@
1
- import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
1
+ import { MiscIsPruneProgrammer } from "../../../programmers/misc/MiscIsPruneProgrammer";
2
2
 
3
3
  import { GenericTransformer } from "../../internal/GenericTransformer";
4
4
 
5
5
  export namespace MiscCreateIsPruneTransformer {
6
6
  export const transform = GenericTransformer.factory("createIsPrune")(
7
- (project) => (modulo) => IsPruneProgrammer.write(project)(modulo),
7
+ (project) => (modulo) => MiscIsPruneProgrammer.write(project)(modulo),
8
8
  );
9
9
  }
@@ -1,9 +1,9 @@
1
- import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
1
+ import { MiscIsPruneProgrammer } from "../../../programmers/misc/MiscIsPruneProgrammer";
2
2
 
3
3
  import { GenericTransformer } from "../../internal/GenericTransformer";
4
4
 
5
5
  export namespace MiscIsPruneTransformer {
6
6
  export const transform = GenericTransformer.scalar("isPrune")(
7
- (project) => (modulo) => IsPruneProgrammer.write(project)(modulo),
7
+ (project) => (modulo) => MiscIsPruneProgrammer.write(project)(modulo),
8
8
  );
9
9
  }
@@ -3,26 +3,30 @@ import ts from "typescript";
3
3
  import { MiscLiteralsProgrammer } from "../../../programmers/misc/MiscLiteralsProgrammer";
4
4
 
5
5
  import { IProject } from "../../IProject";
6
+ import { TransformerError } from "../../TransformerError";
6
7
 
7
8
  export namespace MiscLiteralsTransformer {
8
9
  export const transform =
9
10
  (project: IProject) =>
10
11
  (expression: ts.CallExpression): ts.Expression => {
11
12
  // CHECK GENERIC ARGUMENT EXISTENCE
12
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
13
+ if (!expression.typeArguments?.[0])
14
+ throw new TransformerError({
15
+ code: "typia.misc.literals",
16
+ message: "generic argument is not specified.",
17
+ });
13
18
 
14
19
  // GET TYPE INFO
15
20
  const node: ts.TypeNode = expression.typeArguments[0];
16
21
  const type: ts.Type = project.checker.getTypeFromTypeNode(node);
17
22
 
18
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
23
+ if (type.isTypeParameter())
24
+ throw new TransformerError({
25
+ code: "typia.misc.literals",
26
+ message: "non-specified generic argument.",
27
+ });
19
28
 
20
29
  // DO TRANSFORM
21
30
  return MiscLiteralsProgrammer.write(project)(type);
22
31
  };
23
32
  }
24
-
25
- const NOT_SPECIFIED =
26
- "Error on typia.literals(): generic argument is not specified.";
27
- const NO_GENERIC_ARGUMENT =
28
- "Error on typia.literals(): non-specified generic argument.";