typia 5.0.0-dev.20230827 → 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 (265) hide show
  1. package/lib/executable/TypiaGenerateWizard.js +1 -1
  2. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  3. package/lib/executable/TypiaSetupWizard.js +1 -1
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/PackageManager.js +1 -1
  6. package/lib/executable/setup/PackageManager.js.map +1 -1
  7. package/lib/executable/setup/PluginConfigurator.js +2 -2
  8. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  9. package/lib/factories/ExpressionFactory.js +2 -2
  10. package/lib/factories/ExpressionFactory.js.map +1 -1
  11. package/lib/factories/JsonMetadataFactory.d.ts +7 -0
  12. package/lib/factories/JsonMetadataFactory.js +38 -0
  13. package/lib/factories/JsonMetadataFactory.js.map +1 -0
  14. package/lib/factories/LiteralFactory.js +1 -1
  15. package/lib/factories/LiteralFactory.js.map +1 -1
  16. package/lib/factories/MetadataCollection.js +0 -1
  17. package/lib/factories/MetadataCollection.js.map +1 -1
  18. package/lib/factories/MetadataCommentTagFactory.js +129 -118
  19. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  20. package/lib/factories/MetadataFactory.d.ts +22 -2
  21. package/lib/factories/MetadataFactory.js +221 -17
  22. package/lib/factories/MetadataFactory.js.map +1 -1
  23. package/lib/factories/MetadataTypeTagFactory.d.ts +3 -2
  24. package/lib/factories/MetadataTypeTagFactory.js +246 -173
  25. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  26. package/lib/factories/ProtobufFactory.js +73 -68
  27. package/lib/factories/ProtobufFactory.js.map +1 -1
  28. package/lib/factories/TypeFactory.d.ts +0 -1
  29. package/lib/factories/TypeFactory.js +0 -5
  30. package/lib/factories/TypeFactory.js.map +1 -1
  31. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +1 -1
  32. package/lib/factories/internal/metadata/emplace_metadata_alias.js +20 -7
  33. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  34. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +1 -1
  35. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +20 -7
  36. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  37. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +1 -1
  38. package/lib/factories/internal/metadata/emplace_metadata_object.js +100 -84
  39. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  40. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +1 -1
  41. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +34 -21
  42. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
  43. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  44. package/lib/factories/internal/metadata/explore_metadata.js +12 -12
  45. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata.js +39 -19
  48. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +1 -1
  50. package/lib/factories/internal/metadata/iterate_metadata_alias.js +12 -10
  51. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  52. package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +1 -1
  53. package/lib/factories/internal/metadata/iterate_metadata_array.js +11 -9
  54. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -1
  56. package/lib/factories/internal/metadata/iterate_metadata_collection.js +47 -45
  57. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  58. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -1
  59. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +16 -20
  60. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  61. package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +1 -1
  62. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +145 -135
  63. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  64. package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +1 -1
  65. package/lib/factories/internal/metadata/iterate_metadata_map.js +28 -15
  66. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  67. package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +1 -1
  68. package/lib/factories/internal/metadata/iterate_metadata_object.js +16 -14
  69. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  70. package/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts +1 -1
  71. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +28 -15
  72. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  73. package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +1 -1
  74. package/lib/factories/internal/metadata/iterate_metadata_set.js +24 -11
  75. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  76. package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +1 -1
  77. package/lib/factories/internal/metadata/iterate_metadata_template.js +28 -15
  78. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  79. package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +1 -1
  80. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +11 -9
  81. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  82. package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +1 -1
  83. package/lib/factories/internal/metadata/iterate_metadata_union.js +20 -7
  84. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  85. package/lib/programmers/CheckerProgrammer.js +13 -8
  86. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  87. package/lib/programmers/FeatureProgrammer.d.ts +1 -1
  88. package/lib/programmers/FeatureProgrammer.js +1 -1
  89. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  90. package/lib/programmers/IsProgrammer.js +1 -1
  91. package/lib/programmers/IsProgrammer.js.map +1 -1
  92. package/lib/programmers/RandomProgrammer.js +9 -4
  93. package/lib/programmers/RandomProgrammer.js.map +1 -1
  94. package/lib/programmers/TypiaProgrammer.js +58 -28
  95. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  96. package/lib/programmers/internal/application_escaped.d.ts +4 -0
  97. package/lib/programmers/internal/{application_resolved.js → application_escaped.js} +4 -4
  98. package/lib/programmers/internal/application_escaped.js.map +1 -0
  99. package/lib/programmers/internal/application_schema.js +5 -5
  100. package/lib/programmers/internal/application_schema.js.map +1 -1
  101. package/lib/programmers/json/JsonApplicationProgrammer.js +5 -1
  102. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  103. package/lib/programmers/json/JsonAssertParseProgrammer.js +2 -0
  104. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  105. package/lib/programmers/json/JsonIsParseProgrammer.js +2 -0
  106. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  107. package/lib/programmers/json/JsonStringifyProgrammer.js +20 -62
  108. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  109. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -0
  110. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  111. package/lib/programmers/misc/MiscCloneProgrammer.js +13 -8
  112. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  113. package/lib/programmers/misc/MiscLiteralsProgrammer.js +10 -5
  114. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  115. package/lib/programmers/misc/MiscPruneProgrammer.js +13 -8
  116. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  117. package/lib/schemas/metadata/Metadata.js +4 -4
  118. package/lib/schemas/metadata/Metadata.js.map +1 -1
  119. package/lib/transform.d.ts +2 -1
  120. package/lib/transform.js +11 -3
  121. package/lib/transform.js.map +1 -1
  122. package/lib/transformers/CallExpressionTransformer.d.ts +1 -1
  123. package/lib/transformers/CallExpressionTransformer.js +2 -1
  124. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  125. package/lib/transformers/FileTransformer.js +18 -8
  126. package/lib/transformers/FileTransformer.js.map +1 -1
  127. package/lib/transformers/IProject.d.ts +3 -0
  128. package/lib/transformers/NodeTransformer.d.ts +1 -1
  129. package/lib/transformers/TransformerError.d.ts +12 -0
  130. package/lib/transformers/TransformerError.js +66 -0
  131. package/lib/transformers/TransformerError.js.map +1 -0
  132. package/lib/transformers/features/AssertTransformer.d.ts +1 -0
  133. package/lib/transformers/features/CreateAssertTransformer.d.ts +1 -0
  134. package/lib/transformers/features/CreateIsTransformer.d.ts +1 -0
  135. package/lib/transformers/features/CreateRandomTransformer.js +9 -4
  136. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  137. package/lib/transformers/features/CreateValidateTransformer.d.ts +1 -0
  138. package/lib/transformers/features/IsTransformer.d.ts +1 -0
  139. package/lib/transformers/features/RandomTransformer.js +9 -4
  140. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  141. package/lib/transformers/features/ValidateTransformer.d.ts +1 -0
  142. package/lib/transformers/features/json/JsonApplicationTransformer.js +79 -19
  143. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  144. package/lib/transformers/features/json/JsonAssertParseTransformer.d.ts +1 -0
  145. package/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts +1 -0
  146. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts +1 -0
  147. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts +1 -0
  148. package/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts +1 -0
  149. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts +1 -0
  150. package/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts +1 -0
  151. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts +1 -0
  152. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts +1 -0
  153. package/lib/transformers/features/json/JsonIsParseTransformer.d.ts +1 -0
  154. package/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts +1 -0
  155. package/lib/transformers/features/json/JsonStringifyTransformer.d.ts +1 -0
  156. package/lib/transformers/features/json/JsonValidateParseTransformer.d.ts +1 -0
  157. package/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts +1 -0
  158. package/lib/transformers/features/misc/MetadataTransformer.js +13 -5
  159. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  160. package/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts +1 -0
  161. package/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts +1 -0
  162. package/lib/transformers/features/misc/MiscCloneTransformer.d.ts +1 -0
  163. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts +1 -0
  164. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts +1 -0
  165. package/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts +1 -0
  166. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts +1 -0
  167. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts +1 -0
  168. package/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts +1 -0
  169. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts +1 -0
  170. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts +1 -0
  171. package/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts +1 -0
  172. package/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts +1 -0
  173. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +9 -4
  174. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  175. package/lib/transformers/features/misc/MiscPruneTransformer.d.ts +1 -0
  176. package/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts +1 -0
  177. package/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts +1 -0
  178. package/lib/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.d.ts +1 -0
  179. package/lib/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.d.ts +1 -0
  180. package/lib/transformers/features/protobuf/CreateProtobufDecodeTransformer.d.ts +1 -0
  181. package/lib/transformers/features/protobuf/CreateProtobufEncodeTransformer.d.ts +1 -0
  182. package/lib/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.d.ts +1 -0
  183. package/lib/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.d.ts +1 -0
  184. package/lib/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.d.ts +1 -0
  185. package/lib/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.d.ts +1 -0
  186. package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts +1 -0
  187. package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts +1 -0
  188. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts +1 -0
  189. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts +1 -0
  190. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts +1 -0
  191. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts +1 -0
  192. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +9 -2
  193. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  194. package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts +1 -0
  195. package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts +1 -0
  196. package/lib/transformers/internal/GenericTransformer.js +17 -4
  197. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  198. package/lib/typings/ValidationPipe.d.ts +7 -0
  199. package/lib/typings/ValidationPipe.js +3 -0
  200. package/lib/typings/ValidationPipe.js.map +1 -0
  201. package/package.json +3 -1
  202. package/src/executable/TypiaGenerateWizard.ts +1 -1
  203. package/src/executable/TypiaSetupWizard.ts +1 -1
  204. package/src/executable/setup/PackageManager.ts +1 -1
  205. package/src/executable/setup/PluginConfigurator.ts +2 -2
  206. package/src/factories/ExpressionFactory.ts +2 -2
  207. package/src/factories/JsonMetadataFactory.ts +43 -0
  208. package/src/factories/LiteralFactory.ts +2 -1
  209. package/src/factories/MetadataCollection.ts +0 -5
  210. package/src/factories/MetadataCommentTagFactory.ts +130 -84
  211. package/src/factories/MetadataFactory.ts +169 -7
  212. package/src/factories/MetadataTypeTagFactory.ts +191 -141
  213. package/src/factories/ProtobufFactory.ts +86 -93
  214. package/src/factories/TypeFactory.ts +0 -5
  215. package/src/factories/internal/metadata/emplace_metadata_alias.ts +12 -5
  216. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +12 -5
  217. package/src/factories/internal/metadata/emplace_metadata_object.ts +20 -5
  218. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +12 -2
  219. package/src/factories/internal/metadata/explore_metadata.ts +5 -11
  220. package/src/factories/internal/metadata/iterate_metadata.ts +44 -24
  221. package/src/factories/internal/metadata/iterate_metadata_alias.ts +7 -2
  222. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -2
  223. package/src/factories/internal/metadata/iterate_metadata_collection.ts +30 -29
  224. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +21 -22
  225. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +33 -17
  226. package/src/factories/internal/metadata/iterate_metadata_map.ts +20 -4
  227. package/src/factories/internal/metadata/iterate_metadata_object.ts +2 -1
  228. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +15 -12
  229. package/src/factories/internal/metadata/iterate_metadata_set.ts +11 -2
  230. package/src/factories/internal/metadata/iterate_metadata_template.ts +12 -3
  231. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -2
  232. package/src/factories/internal/metadata/iterate_metadata_union.ts +10 -7
  233. package/src/programmers/CheckerProgrammer.ts +8 -2
  234. package/src/programmers/FeatureProgrammer.ts +4 -1
  235. package/src/programmers/IsProgrammer.ts +1 -1
  236. package/src/programmers/RandomProgrammer.ts +18 -17
  237. package/src/programmers/TypiaProgrammer.ts +27 -2
  238. package/src/programmers/internal/{application_resolved.ts → application_escaped.ts} +1 -1
  239. package/src/programmers/internal/application_schema.ts +5 -5
  240. package/src/programmers/json/JsonApplicationProgrammer.ts +6 -3
  241. package/src/programmers/json/JsonAssertParseProgrammer.ts +7 -2
  242. package/src/programmers/json/JsonIsParseProgrammer.ts +7 -2
  243. package/src/programmers/json/JsonStringifyProgrammer.ts +7 -37
  244. package/src/programmers/json/JsonValidateParseProgrammer.ts +7 -2
  245. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +1 -1
  246. package/src/programmers/misc/MiscCloneProgrammer.ts +14 -11
  247. package/src/programmers/misc/MiscLiteralsProgrammer.ts +11 -6
  248. package/src/programmers/misc/MiscPruneProgrammer.ts +8 -2
  249. package/src/schemas/metadata/Metadata.ts +4 -4
  250. package/src/transform.ts +13 -5
  251. package/src/transformers/CallExpressionTransformer.ts +6 -3
  252. package/src/transformers/FileTransformer.ts +25 -13
  253. package/src/transformers/IProject.ts +3 -0
  254. package/src/transformers/NodeTransformer.ts +1 -1
  255. package/src/transformers/TransformerError.ts +55 -0
  256. package/src/transformers/features/CreateRandomTransformer.ts +11 -7
  257. package/src/transformers/features/RandomTransformer.ts +11 -7
  258. package/src/transformers/features/json/JsonApplicationTransformer.ts +39 -35
  259. package/src/transformers/features/misc/MetadataTransformer.ts +18 -10
  260. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +11 -7
  261. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +9 -7
  262. package/src/transformers/internal/GenericTransformer.ts +17 -10
  263. package/src/typings/ValidationPipe.ts +9 -0
  264. package/lib/programmers/internal/application_resolved.d.ts +0 -4
  265. package/lib/programmers/internal/application_resolved.js.map +0 -1
@@ -9,10 +9,10 @@ import { application_alias } from "./application_alias";
9
9
  import { application_array } from "./application_array";
10
10
  import { application_boolean } from "./application_boolean";
11
11
  import { application_constant } from "./application_constant";
12
+ import { application_escaped } from "./application_escaped";
12
13
  import { application_native } from "./application_native";
13
14
  import { application_number } from "./application_number";
14
15
  import { application_object } from "./application_object";
15
- import { application_resolved } from "./application_resolved";
16
16
  import { application_string } from "./application_string";
17
17
  import { application_templates } from "./application_templates";
18
18
  import { application_tuple } from "./application_tuple";
@@ -61,7 +61,7 @@ export const application_schema =
61
61
  // toJSON() METHOD
62
62
  if (meta.escaped !== null)
63
63
  union.push(
64
- ...application_resolved(options)(blockNever)(components)(
64
+ ...application_escaped(options)(blockNever)(components)(
65
65
  meta.escaped,
66
66
  )(attribute),
67
67
  );
@@ -70,7 +70,7 @@ export const application_schema =
70
70
  if (meta.templates.length && AtomicPredicator.template(meta))
71
71
  insert(application_templates(meta)(attribute));
72
72
  for (const constant of meta.constants)
73
- if (constant.type === "bigint") throw new Error(NO_BIGINT);
73
+ if (constant.type === "bigint") throw new TypeError(NO_BIGINT);
74
74
  else if (
75
75
  (constant.type === "string" && meta.templates.length) ||
76
76
  AtomicPredicator.constant(meta)(constant.type) === false
@@ -78,7 +78,7 @@ export const application_schema =
78
78
  continue;
79
79
  else insert(application_constant(constant)(attribute));
80
80
  for (const a of meta.atomics)
81
- if (a.type === "bigint") throw new Error(NO_BIGINT);
81
+ if (a.type === "bigint") throw new TypeError(NO_BIGINT);
82
82
  else if (a.type === "boolean")
83
83
  insert(application_boolean(attribute));
84
84
  else if (a.type === "number")
@@ -103,7 +103,7 @@ export const application_schema =
103
103
  if (AtomicPredicator.native(native)) {
104
104
  const type: string = native.toLowerCase();
105
105
  if (meta.atomics.some((a) => a.type === type)) continue;
106
- else if (type === "bigint") throw new Error(NO_BIGINT);
106
+ else if (type === "bigint") throw new TypeError(NO_BIGINT);
107
107
  else if (type === "boolean")
108
108
  insert(application_boolean(attribute));
109
109
  else if (type === "number")
@@ -3,6 +3,8 @@ import { IJsonComponents } from "../../schemas/json/IJsonComponents";
3
3
  import { IJsonSchema } from "../../schemas/json/IJsonSchema";
4
4
  import { Metadata } from "../../schemas/metadata/Metadata";
5
5
 
6
+ import { TransformerError } from "../../transformers/TransformerError";
7
+
6
8
  import { application_schema } from "../internal/application_schema";
7
9
 
8
10
  export namespace JsonApplicationProgrammer {
@@ -35,9 +37,10 @@ export namespace JsonApplicationProgrammer {
35
37
  schemas: metadatas.map((meta, i) => {
36
38
  const schema: IJsonSchema | null = generator(meta)({});
37
39
  if (schema === null)
38
- throw new Error(
39
- `Error on typia.application(): invalid type on argument - (${meta.getName()}, ${i})`,
40
- );
40
+ throw new TransformerError({
41
+ code: "typia.json.application",
42
+ message: `invalid type on argument - (${meta.getName()}, ${i})`,
43
+ });
41
44
  return schema;
42
45
  }),
43
46
  components,
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { JsonMetadataFactory } from "../../factories/JsonMetadataFactory";
4
5
  import { StatementFactory } from "../../factories/StatementFactory";
5
6
  import { TypeFactory } from "../../factories/TypeFactory";
6
7
 
@@ -12,8 +13,11 @@ export namespace JsonAssertParseProgrammer {
12
13
  export const write =
13
14
  (project: IProject) =>
14
15
  (modulo: ts.LeftHandSideExpression) =>
15
- (type: ts.Type, name?: string) =>
16
- ts.factory.createArrowFunction(
16
+ (type: ts.Type, name?: string): ts.ArrowFunction => {
17
+ JsonMetadataFactory.analyze(`typia.json.${modulo.getText()}`)(
18
+ project.checker,
19
+ )(type);
20
+ return ts.factory.createArrowFunction(
17
21
  undefined,
18
22
  undefined,
19
23
  [
@@ -63,4 +67,5 @@ export namespace JsonAssertParseProgrammer {
63
67
  ),
64
68
  ]),
65
69
  );
70
+ };
66
71
  }
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { JsonMetadataFactory } from "../../factories/JsonMetadataFactory";
4
5
  import { StatementFactory } from "../../factories/StatementFactory";
5
6
  import { TypeFactory } from "../../factories/TypeFactory";
6
7
 
@@ -12,8 +13,11 @@ export namespace JsonIsParseProgrammer {
12
13
  export const write =
13
14
  (project: IProject) =>
14
15
  (modulo: ts.LeftHandSideExpression) =>
15
- (type: ts.Type, name?: string) =>
16
- ts.factory.createArrowFunction(
16
+ (type: ts.Type, name?: string): ts.ArrowFunction => {
17
+ JsonMetadataFactory.analyze(`typia.json.${modulo.getText()}`)(
18
+ project.checker,
19
+ )(type);
20
+ return ts.factory.createArrowFunction(
17
21
  undefined,
18
22
  undefined,
19
23
  [
@@ -69,4 +73,5 @@ export namespace JsonIsParseProgrammer {
69
73
  ),
70
74
  ]),
71
75
  );
76
+ };
72
77
  }
@@ -2,8 +2,8 @@ import ts from "typescript";
2
2
 
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
  import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
+ import { JsonMetadataFactory } from "../../factories/JsonMetadataFactory";
5
6
  import { MetadataCollection } from "../../factories/MetadataCollection";
6
- import { MetadataFactory } from "../../factories/MetadataFactory";
7
7
  import { StatementFactory } from "../../factories/StatementFactory";
8
8
  import { TypeFactory } from "../../factories/TypeFactory";
9
9
  import { ValueFactory } from "../../factories/ValueFactory";
@@ -315,12 +315,7 @@ export namespace JsonStringifyProgrammer {
315
315
  });
316
316
 
317
317
  // TUPLES
318
- for (const tuple of meta.tuples) {
319
- for (const child of tuple.type.elements)
320
- if (StringifyPredicator.undefindable(meta))
321
- throw new Error(
322
- `Error on typia.json.stringify(): tuple cannot contain undefined value - (${child.getName()}).`,
323
- );
318
+ for (const tuple of meta.tuples)
324
319
  unions.push({
325
320
  type: "tuple",
326
321
  is: () =>
@@ -340,15 +335,9 @@ export namespace JsonStringifyProgrammer {
340
335
  explore,
341
336
  ),
342
337
  });
343
- }
344
338
 
345
339
  // ARRAYS
346
340
  if (meta.arrays.length) {
347
- for (const child of meta.arrays)
348
- if (StringifyPredicator.undefindable(child.type.value))
349
- throw new Error(
350
- `Error on typia.json.stringify(): array cannot contain undefined value (${child.type.value.getName()}).`,
351
- );
352
341
  const value: () => ts.Expression =
353
342
  meta.arrays.length === 1
354
343
  ? () =>
@@ -935,25 +924,11 @@ export namespace JsonStringifyProgrammer {
935
924
 
936
925
  const initializer: FeatureProgrammer.IConfig["initializer"] =
937
926
  ({ checker }) =>
938
- (type) => {
939
- const collection: MetadataCollection = new MetadataCollection();
940
- const meta: Metadata = MetadataFactory.analyze(checker)({
941
- escape: true,
942
- constant: true,
943
- absorb: true,
944
- validate: (meta) => {
945
- if (meta.atomics.find((a) => a.type === "bigint"))
946
- throw new Error(NO_BIGINT);
947
- else if (
948
- meta.arrays.some(
949
- (array) => array.type.value.isRequired() === false,
950
- )
951
- )
952
- throw new Error(NO_UNDEFINED_IN_ARRAY);
953
- },
954
- })(collection)(type);
955
- return [collection, meta];
956
- };
927
+ (importer) =>
928
+ (type) =>
929
+ JsonMetadataFactory.analyze(`typia.json.${importer.method}`)(
930
+ checker,
931
+ )(type);
957
932
 
958
933
  const create_throw_error =
959
934
  (importer: FunctionImporter) =>
@@ -987,8 +962,3 @@ interface IUnion {
987
962
  is: () => ts.Expression;
988
963
  value: () => ts.Expression;
989
964
  }
990
-
991
- const NO_BIGINT =
992
- "Error on typia.json.stringify(): does not allow bigint type.";
993
- const NO_UNDEFINED_IN_ARRAY =
994
- "Error on typia.json.stringify(): does not allow undefined type in array.";
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { JsonMetadataFactory } from "../../factories/JsonMetadataFactory";
4
5
  import { StatementFactory } from "../../factories/StatementFactory";
5
6
  import { TypeFactory } from "../../factories/TypeFactory";
6
7
 
@@ -12,8 +13,11 @@ export namespace JsonValidateParseProgrammer {
12
13
  export const write =
13
14
  (project: IProject) =>
14
15
  (modulo: ts.LeftHandSideExpression) =>
15
- (type: ts.Type, name?: string) =>
16
- ts.factory.createArrowFunction(
16
+ (type: ts.Type, name?: string): ts.ArrowFunction => {
17
+ JsonMetadataFactory.analyze(`typia.json.${modulo.getText()}`)(
18
+ project.checker,
19
+ )(type);
20
+ return ts.factory.createArrowFunction(
17
21
  undefined,
18
22
  undefined,
19
23
  [
@@ -60,4 +64,5 @@ export namespace JsonValidateParseProgrammer {
60
64
  ),
61
65
  ]),
62
66
  );
67
+ };
63
68
  }
@@ -13,7 +13,7 @@ export namespace JsonValidateStringifyProgrammer {
13
13
  export const write =
14
14
  (project: IProject) =>
15
15
  (modulo: ts.LeftHandSideExpression) =>
16
- (type: ts.Type, name?: string) =>
16
+ (type: ts.Type, name?: string): ts.ArrowFunction =>
17
17
  ts.factory.createArrowFunction(
18
18
  undefined,
19
19
  undefined,
@@ -13,6 +13,7 @@ import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
13
13
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
14
14
 
15
15
  import { IProject } from "../../transformers/IProject";
16
+ import { TransformerError } from "../../transformers/TransformerError";
16
17
 
17
18
  import { FeatureProgrammer } from "../FeatureProgrammer";
18
19
  import { IsProgrammer } from "../IsProgrammer";
@@ -696,7 +697,7 @@ export namespace MiscCloneProgrammer {
696
697
  prefix: PREFIX,
697
698
  trace: false,
698
699
  path: false,
699
- initializer: initializer(importer.method),
700
+ initializer,
700
701
  decoder: () => decode(project)(config)(importer),
701
702
  objector: {
702
703
  checker: () => IsProgrammer.decode(project)(importer),
@@ -720,27 +721,29 @@ export namespace MiscCloneProgrammer {
720
721
  return config;
721
722
  };
722
723
 
723
- const initializer =
724
- (method: string): FeatureProgrammer.IConfig["initializer"] =>
724
+ const initializer: FeatureProgrammer.IConfig["initializer"] =
725
725
  ({ checker }) =>
726
+ (importer) =>
726
727
  (type) => {
727
728
  const collection = new MetadataCollection();
728
- const meta = MetadataFactory.analyze(checker)({
729
+ const result = MetadataFactory.analyze(checker)({
729
730
  escape: false,
730
731
  constant: true,
731
732
  absorb: true,
732
733
  validate: (meta) => {
734
+ const output: string[] = [];
733
735
  if (meta.natives.some((n) => n === "WeakSet"))
734
- throw new Error(
735
- `Error on ${method}(): WeakSet is not supported.`,
736
- );
736
+ output.push("unable to clone WeakSet");
737
737
  else if (meta.natives.some((n) => n === "WeakMap"))
738
- throw new Error(
739
- `Error on ${method}(): WeakMap is not supported.`,
740
- );
738
+ output.push("unable to clone WeakMap");
739
+ return output;
741
740
  },
742
741
  })(collection)(type);
743
- return [collection, meta];
742
+ if (result.success === false)
743
+ throw TransformerError.from(`typia.misc.${importer.method}`)(
744
+ result.errors,
745
+ );
746
+ return [collection, result.data];
744
747
  };
745
748
 
746
749
  const create_throw_error =
@@ -7,6 +7,7 @@ import { MetadataFactory } from "../../factories/MetadataFactory";
7
7
  import { Metadata } from "../../schemas/metadata/Metadata";
8
8
 
9
9
  import { IProject } from "../../transformers/IProject";
10
+ import { TransformerError } from "../../transformers/TransformerError";
10
11
 
11
12
  import { Atomic } from "../../typings/Atomic";
12
13
 
@@ -14,7 +15,7 @@ import { ArrayUtil } from "../../utils/ArrayUtil";
14
15
 
15
16
  export namespace MiscLiteralsProgrammer {
16
17
  export const write = (project: IProject) => (type: ts.Type) => {
17
- const meta: Metadata = MetadataFactory.analyze(project.checker)({
18
+ const result = MetadataFactory.analyze(project.checker)({
18
19
  escape: true,
19
20
  constant: true,
20
21
  absorb: true,
@@ -24,11 +25,15 @@ export namespace MiscLiteralsProgrammer {
24
25
  .map((c) => c.values.length)
25
26
  .reduce((a, b) => a + b, 0) +
26
27
  meta.atomics.filter((a) => a.type === "boolean").length;
27
- if (0 === length) throw new Error(ErrorMessages.NO);
28
- else if (meta.size() !== length)
29
- throw new Error(ErrorMessages.ONLY);
28
+ if (0 === length) return [ErrorMessages.NO];
29
+ else if (meta.size() !== length) return [ErrorMessages.ONLY];
30
+ return [];
30
31
  },
31
32
  })(new MetadataCollection())(type);
33
+ if (result.success === false)
34
+ throw TransformerError.from(`typia.misc.literals`)(result.errors);
35
+
36
+ const meta: Metadata = result.data;
32
37
  const values: Set<Atomic.Type | null> = new Set([
33
38
  ...ArrayUtil.flat<Atomic.Type>(meta.constants.map((c) => c.values)),
34
39
  ...(meta.atomics.filter((a) => a.type === "boolean").length
@@ -59,6 +64,6 @@ export namespace MiscLiteralsProgrammer {
59
64
  }
60
65
 
61
66
  enum ErrorMessages {
62
- NO = "Error on typia.literals(): no literal type found.",
63
- ONLY = "Error on typia.literals(): only literal type allowed.",
67
+ NO = "no constant literal type found.",
68
+ ONLY = "only constant literal types are allowed.",
64
69
  }
@@ -13,6 +13,7 @@ import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
13
13
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
14
14
 
15
15
  import { IProject } from "../../transformers/IProject";
16
+ import { TransformerError } from "../../transformers/TransformerError";
16
17
 
17
18
  import { FeatureProgrammer } from "../FeatureProgrammer";
18
19
  import { IsProgrammer } from "../IsProgrammer";
@@ -506,14 +507,19 @@ export namespace MiscPruneProgrammer {
506
507
 
507
508
  const initializer: FeatureProgrammer.IConfig["initializer"] =
508
509
  ({ checker }) =>
510
+ (importer) =>
509
511
  (type) => {
510
512
  const collection = new MetadataCollection();
511
- const meta = MetadataFactory.analyze(checker)({
513
+ const result = MetadataFactory.analyze(checker)({
512
514
  escape: false,
513
515
  constant: true,
514
516
  absorb: true,
515
517
  })(collection)(type);
516
- return [collection, meta];
518
+ if (result.success === false)
519
+ throw TransformerError.from(`typia.misc.${importer.method}`)(
520
+ result.errors,
521
+ );
522
+ return [collection, result.data];
517
523
  };
518
524
 
519
525
  const create_throw_error =
@@ -236,7 +236,7 @@ export class Metadata {
236
236
  arrays: meta.arrays.map((ref) => {
237
237
  const type = dict.arrays.get(ref.name);
238
238
  if (type === undefined)
239
- throw new Error(
239
+ throw new RangeError(
240
240
  `Error on Metadata.from(): failed to find array "${ref.name}".`,
241
241
  );
242
242
  return MetadataArray.create({
@@ -247,7 +247,7 @@ export class Metadata {
247
247
  tuples: meta.tuples.map((t) => {
248
248
  const type = dict.tuples.get(t.name);
249
249
  if (type === undefined)
250
- throw new Error(
250
+ throw new RangeError(
251
251
  `Error on Metadata.from(): failed to find tuple "${t.name}".`,
252
252
  );
253
253
  return MetadataTuple.create({
@@ -258,7 +258,7 @@ export class Metadata {
258
258
  objects: meta.objects.map((name) => {
259
259
  const found = dict.objects.get(name);
260
260
  if (found === undefined)
261
- throw new Error(
261
+ throw new RangeError(
262
262
  `Error on Metadata.from(): failed to find object "${name}".`,
263
263
  );
264
264
  return found;
@@ -266,7 +266,7 @@ export class Metadata {
266
266
  aliases: meta.aliases.map((alias) => {
267
267
  const found = dict.aliases.get(alias);
268
268
  if (found === undefined)
269
- throw new Error(
269
+ throw new RangeError(
270
270
  `Error on Metadata.from(): failed to find alias "${alias}".`,
271
271
  );
272
272
  return found;
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;
36
-
37
- const file: ts.SourceFile | undefined = node.getSourceFile();
38
- if (file === undefined) throw exp;
38
+ // ONLY ACCEPT TRANSFORMER-ERROR
39
+ if (!isTransformerError(exp)) throw exp;
39
40
 
40
- const { line, character } = file.getLineAndCharacterOfPosition(
41
- node.pos,
42
- );
43
- console.error(`${file.fileName}:${line}:${character}:`, exp);
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.";