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
@@ -5,6 +5,10 @@ import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
5
 
6
6
  import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
7
 
8
+ import { TransformerError } from "../transformers/TransformerError";
9
+
10
+ import { ValidationPipe } from "../typings/ValidationPipe";
11
+
8
12
  import { Escaper } from "../utils/Escaper";
9
13
 
10
14
  import { MetadataCollection } from "./MetadataCollection";
@@ -15,65 +19,72 @@ export namespace ProtobufFactory {
15
19
  (method: string) =>
16
20
  (checker: ts.TypeChecker) =>
17
21
  (collection: MetadataCollection) =>
18
- (type: ts.Type) => {
22
+ (type: ts.Type): Metadata => {
19
23
  // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
20
- const top: Metadata = MetadataFactory.analyze(checker)({
21
- escape: false,
22
- constant: true,
23
- absorb: true,
24
- validate: validate(method),
25
- })(collection)(type);
24
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
+ MetadataFactory.analyze(checker)({
26
+ escape: false,
27
+ constant: true,
28
+ absorb: true,
29
+ validate,
30
+ })(collection)(type);
31
+ if (result.success === false)
32
+ throw TransformerError.from(`typia.protobuf.${method}`)(
33
+ result.errors,
34
+ );
35
+ return result.data;
36
+ };
37
+
38
+ const validate = (
39
+ meta: Metadata,
40
+ explore: MetadataFactory.IExplore,
41
+ ): string[] => {
42
+ const errors: string[] = [];
43
+ const insert = (msg: string) => errors.push(msg);
26
44
 
27
- // TOP LEVEL TYPE MUST BE A SINGLE OBJECT
45
+ if (explore.top === true) {
28
46
  const onlyObject: boolean =
29
- top.size() === 1 &&
30
- top.objects.length === 1 &&
31
- top.objects[0]!.properties.every((p) =>
47
+ meta.size() === 1 &&
48
+ meta.objects.length === 1 &&
49
+ meta.objects[0]!.properties.every((p) =>
32
50
  p.key.isSoleLiteral(),
33
51
  ) &&
34
- top.isRequired() === true &&
35
- top.nullable === false;
52
+ meta.isRequired() === true &&
53
+ meta.nullable === false;
36
54
  if (onlyObject === false)
37
- throw new Error(
38
- `${prefix(
39
- method,
40
- )} target type must be a sole and static object.`,
41
- );
42
-
43
- return top;
44
- };
55
+ insert("target type must be a sole and static object type");
56
+ return errors;
57
+ }
45
58
 
46
- const validate = (method: string) => (meta: Metadata) => {
47
59
  //----
48
60
  // NOT SUPPORTED TYPES
49
61
  //----
62
+ const noSupport = (msg: string) => insert(`does not support ${msg}`);
63
+
50
64
  // PROHIBIT ANY TYPE
51
- if (meta.any) throw notSupportedError({ method })("any type");
65
+ if (meta.any) noSupport("any type");
52
66
  // PROHIBIT FUNCTIONAL TYPE
53
- else if (meta.functional)
54
- throw notSupportedError({ method })("functional type");
67
+ if (meta.functional) noSupport("functional type");
55
68
  // PROHIBIT TUPLE TYPE
56
- else if (meta.tuples.length)
57
- throw notSupportedError({ method })("tuple type");
69
+ if (meta.tuples.length) noSupport("tuple type");
58
70
  // PROHIBIT SET TYPE
59
- else if (meta.sets.length)
60
- throw notSupportedError({ method })("Set type");
71
+ if (meta.sets.length) noSupport("Set type");
61
72
  // NATIVE TYPE, BUT NOT Uint8Array
62
- else if (meta.natives.length) {
73
+ if (meta.natives.length) {
63
74
  const banned = meta.natives
64
75
  .map((n) => [n, BANNED_NATIVE_TYPES.get(n)] as const)
65
76
  .filter(([_n, b]) => b !== undefined)[0];
66
77
  if (banned !== undefined)
67
- throw notSupportedError({ method })(
78
+ noSupport(
68
79
  banned[1] === null
69
- ? banned[0]
70
- : `${banned[0]}. Use ${banned[1]} instead.`,
80
+ ? `${banned[0]} type`
81
+ : `does ${banned[0]} type. Use ${banned[1]} type instead.`,
71
82
  );
72
83
  }
73
84
  //----
74
85
  // ATOMIC CASES
75
86
  //----
76
- else if (meta.atomics.length) {
87
+ if (meta.atomics.length) {
77
88
  const numbers = ProtobufUtil.getNumbers(meta);
78
89
  const bigints = ProtobufUtil.getBigints(meta);
79
90
 
@@ -82,21 +93,21 @@ export namespace ProtobufFactory {
82
93
  numbers.some((n) => n === type) &&
83
94
  bigints.some((b) => b === type)
84
95
  )
85
- throw notSupportedError({ method })(
86
- `${type} cannot be used in both number and bigint types. Recommend to remove from number type`,
96
+ insert(
97
+ `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
87
98
  );
88
99
  }
89
100
  //----
90
101
  // ARRRAY CASES
91
102
  //----
92
103
  // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
93
- else if (
104
+ if (
94
105
  meta.arrays.length &&
95
106
  meta.arrays.some((array) => !!array.type.value.arrays.length)
96
107
  )
97
- throw notSupportedError({ method })("two dimenstional array type");
108
+ noSupport("over two dimenstional array type");
98
109
  // CHILD OF ARRAY TYPE MUST BE REQUIRED
99
- else if (
110
+ if (
100
111
  meta.arrays.length &&
101
112
  meta.arrays.some(
102
113
  (array) =>
@@ -104,15 +115,15 @@ export namespace ProtobufFactory {
104
115
  array.type.value.nullable === true,
105
116
  )
106
117
  )
107
- throw notSupportedError({ method })("optional type in array");
118
+ noSupport("optional type in array");
108
119
  // UNION IN ARRAY
109
- else if (
120
+ if (
110
121
  meta.arrays.length &&
111
122
  meta.arrays.some((a) => a.type.value.size() > 1)
112
123
  )
113
- throw notSupportedError({ method })("union type in array");
124
+ noSupport("union type in array");
114
125
  // DO DYNAMIC OBJECT IN ARRAY
115
- else if (
126
+ if (
116
127
  meta.arrays.length &&
117
128
  meta.arrays.some(
118
129
  (a) =>
@@ -123,21 +134,21 @@ export namespace ProtobufFactory {
123
134
  )),
124
135
  )
125
136
  )
126
- throw notSupportedError({ method })("dynamic object in array");
137
+ noSupport("dynamic object in array");
127
138
  // UNION WITH ARRAY
128
- else if (meta.size() > 1 && meta.arrays.length)
129
- throw notSupportedError({ method })("union type with array type");
139
+ if (meta.size() > 1 && meta.arrays.length)
140
+ noSupport("union type with array type");
130
141
  //----
131
142
  // OBJECT CASES
132
143
  //----
133
144
  // EMPTY PROPERTY
134
- else if (
145
+ if (
135
146
  meta.objects.length &&
136
147
  meta.objects.some((obj) => obj.properties.length === 0)
137
148
  )
138
- throw notSupportedError({ method })("empty object type");
149
+ noSupport("empty object type");
139
150
  // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
140
- else if (
151
+ if (
141
152
  meta.objects.length &&
142
153
  meta.objects.some(
143
154
  (obj) =>
@@ -145,11 +156,11 @@ export namespace ProtobufFactory {
145
156
  .length > 1,
146
157
  )
147
158
  )
148
- throw notSupportedError({ method })(
159
+ noSupport(
149
160
  "object type with multiple dynamic key typed properties. Keep only one.",
150
161
  );
151
162
  // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
152
- else if (
163
+ if (
153
164
  meta.objects.length &&
154
165
  meta.objects.some(
155
166
  (obj) =>
@@ -157,11 +168,11 @@ export namespace ProtobufFactory {
157
168
  obj.properties.some((p) => !p.key.isSoleLiteral()),
158
169
  )
159
170
  )
160
- throw notSupportedError({ method })(
171
+ noSupport(
161
172
  "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
162
173
  );
163
174
  // STATIC PROPERTY, BUT INVALID KEY NAME
164
- else if (
175
+ if (
165
176
  meta.objects.length &&
166
177
  meta.objects.some((obj) =>
167
178
  obj.properties.some(
@@ -171,29 +182,23 @@ export namespace ProtobufFactory {
171
182
  ),
172
183
  )
173
184
  )
174
- throw notSupportedError({ method })(
175
- `object type with invalid static key name.`,
176
- );
185
+ throw noSupport(`object type with invalid static key name.`);
177
186
  // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
178
- else if (
187
+ if (
179
188
  meta.objects.length &&
180
189
  isDynamicObject(meta.objects[0]!) &&
181
190
  meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
182
191
  )
183
- throw notSupportedError({ method })(
184
- "dynamic object with array value type",
185
- );
192
+ noSupport("dynamic object with array value type");
186
193
  // UNION WITH DYNAMIC OBJECT
187
- else if (
194
+ if (
188
195
  meta.size() > 1 &&
189
196
  meta.objects.length &&
190
197
  isDynamicObject(meta.objects[0]!)
191
198
  )
192
- throw notSupportedError({ method })(
193
- "union type with dynamic object type",
194
- );
199
+ noSupport("union type with dynamic object type");
195
200
  // UNION IN DYNAMIC PROPERTY VALUE
196
- else if (
201
+ if (
197
202
  meta.objects.length &&
198
203
  meta.objects.some(
199
204
  (obj) =>
@@ -201,59 +206,47 @@ export namespace ProtobufFactory {
201
206
  obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
202
207
  )
203
208
  )
204
- throw notSupportedError({ method })(
205
- "union type in dynamic property",
206
- );
209
+ noSupport("union type in dynamic property");
207
210
  //----
208
211
  // MAP CASES
209
212
  //----
210
- // KEY TYPE ISUNION
211
- else if (
213
+ // KEY TYPE IS UNION
214
+ if (
212
215
  meta.maps.length &&
213
216
  meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
214
217
  )
215
- throw notSupportedError({ method })("union key typed map");
218
+ noSupport("union key typed map");
216
219
  // KEY TYPE IS NOT ATOMIC
217
- else if (
220
+ if (
218
221
  meta.maps.length &&
219
222
  meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
220
223
  )
221
- throw notSupportedError({ method })("non-atomic key typed map");
224
+ noSupport("non-atomic key typed map");
222
225
  // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
223
- else if (
226
+ if (
224
227
  meta.maps.length &&
225
228
  meta.maps.some(
226
229
  (m) => m.key.isRequired() === false || m.key.nullable,
227
230
  )
228
231
  )
229
- throw notSupportedError({ method })("optional key typed map");
232
+ noSupport("optional key typed map");
230
233
  // MAP TYPE, BUT VALUE TYPE IS ARRAY
231
- else if (
232
- meta.maps.length &&
233
- meta.maps.some((m) => !!m.value.arrays.length)
234
- )
235
- throw notSupportedError({ method })(
236
- "map type with array value type",
237
- );
234
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
235
+ noSupport("map type with array value type");
238
236
  // UNION WITH MAP
239
- else if (meta.size() > 1 && meta.maps.length)
240
- throw notSupportedError({ method })("union type with map type");
237
+ if (meta.size() > 1 && meta.maps.length)
238
+ noSupport("union type with map type");
241
239
  // UNION IN MAP
242
- else if (
240
+ if (
243
241
  meta.maps.length &&
244
242
  meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
245
243
  )
246
- throw notSupportedError({ method })("union type in map");
244
+ noSupport("union type in map");
245
+
246
+ return errors;
247
247
  };
248
248
  }
249
249
 
250
- const prefix = (method: string) => `Error on ${method}():`;
251
-
252
- const notSupportedError = (p: { method: string }) => (title: string) =>
253
- new Error(
254
- `${prefix(p.method)}: protocol buffer does not support ${title}.`,
255
- );
256
-
257
250
  const isDynamicObject = (obj: MetadataObject): boolean =>
258
251
  obj.properties[0]!.key.isSoleLiteral() === false;
259
252
 
@@ -1,11 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  export namespace TypeFactory {
4
- export const resolve =
5
- (checker: ts.TypeChecker) =>
6
- (type: ts.Type): ts.Type | null =>
7
- getReturnType(checker)(type)("toJSON");
8
-
9
4
  export const isFunction = (type: ts.Type): boolean =>
10
5
  getFunction(type) !== null;
11
6
 
@@ -13,7 +13,12 @@ export const emplace_metadata_alias =
13
13
  (checker: ts.TypeChecker) =>
14
14
  (options: MetadataFactory.IOptions) =>
15
15
  (collection: MetadataCollection) =>
16
- (type: ts.Type, nullable: boolean): MetadataAlias => {
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ type: ts.Type,
19
+ nullable: boolean,
20
+ explore: MetadataFactory.IExplore,
21
+ ): MetadataAlias => {
17
22
  // CHECK EXISTENCE
18
23
  const [alias, newbie, closure] = collection.emplaceAlias(
19
24
  checker,
@@ -25,10 +30,12 @@ export const emplace_metadata_alias =
25
30
 
26
31
  // CONSTRUCT VALUE TYPE
27
32
  const value: Metadata = explore_metadata(checker)(options)(collection)(
28
- type,
29
- false,
30
- true,
31
- );
33
+ errors,
34
+ )(type, {
35
+ ...explore,
36
+ escaped: false,
37
+ aliased: true,
38
+ });
32
39
  closure(value);
33
40
  return alias;
34
41
  };
@@ -13,7 +13,12 @@ export const emplace_metadata_array_type =
13
13
  (checker: ts.TypeChecker) =>
14
14
  (options: MetadataFactory.IOptions) =>
15
15
  (collection: MetadataCollection) =>
16
- (type: ts.Type, nullable: boolean): MetadataArrayType => {
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ type: ts.Type,
19
+ nullable: boolean,
20
+ explore: MetadataFactory.IExplore,
21
+ ): MetadataArrayType => {
17
22
  // CHECK EXISTENCE
18
23
  const [array, newbie, setValue] = collection.emplaceArray(
19
24
  checker,
@@ -24,10 +29,12 @@ export const emplace_metadata_array_type =
24
29
 
25
30
  // CONSTRUCT VALUE TYPE
26
31
  const value: Metadata = explore_metadata(checker)(options)(collection)(
27
- type.getNumberIndexType()!,
28
- false,
29
- false,
30
- );
32
+ errors,
33
+ )(type.getNumberIndexType()!, {
34
+ ...explore,
35
+ escaped: false,
36
+ aliased: false,
37
+ });
31
38
  setValue(value);
32
39
 
33
40
  return array;
@@ -18,6 +18,7 @@ export const emplace_metadata_object =
18
18
  (checker: ts.TypeChecker) =>
19
19
  (options: MetadataFactory.IOptions) =>
20
20
  (collection: MetadataCollection) =>
21
+ (errors: MetadataFactory.IError[]) =>
21
22
  (parent: ts.Type, nullable: boolean): MetadataObject => {
22
23
  // EMPLACE OBJECT
23
24
  const [obj, newbie] = collection.emplace(checker, parent);
@@ -99,7 +100,14 @@ export const emplace_metadata_object =
99
100
  const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
100
101
  const value: Metadata = explore_metadata(checker)(options)(
101
102
  collection,
102
- )(type, false);
103
+ )(errors)(type, {
104
+ top: false,
105
+ object: obj,
106
+ property: prop.name,
107
+ nested: null,
108
+ escaped: false,
109
+ aliased: false,
110
+ });
103
111
 
104
112
  // OPTIONAL, BUT CAN BE RQUIRED BY `Required<T>` TYPE
105
113
  if (node?.questionToken) Writable(value).optional = true;
@@ -111,10 +119,17 @@ export const emplace_metadata_object =
111
119
  //----
112
120
  for (const index of checker.getIndexInfosOfType(parent)) {
113
121
  // GET EXACT TYPE
114
- const analyzer = (type: ts.Type) =>
115
- explore_metadata(checker)(options)(collection)(type, false);
116
- const key: Metadata = analyzer(index.keyType);
117
- const value: Metadata = analyzer(index.type);
122
+ const analyzer = (type: ts.Type) => (property: {} | null) =>
123
+ explore_metadata(checker)(options)(collection)(errors)(type, {
124
+ top: false,
125
+ object: obj,
126
+ property,
127
+ nested: null,
128
+ escaped: false,
129
+ aliased: false,
130
+ });
131
+ const key: Metadata = analyzer(index.keyType)(null);
132
+ const value: Metadata = analyzer(index.type)({});
118
133
 
119
134
  // INSERT WITH REQUIRED CONFIGURATION
120
135
  insert(key)(value)(
@@ -15,7 +15,12 @@ export const emplace_metadata_tuple =
15
15
  (checker: ts.TypeChecker) =>
16
16
  (options: MetadataFactory.IOptions) =>
17
17
  (collection: MetadataCollection) =>
18
- (type: ts.TupleType, nullable: boolean): MetadataTupleType => {
18
+ (errors: MetadataFactory.IError[]) =>
19
+ (
20
+ type: ts.TupleType,
21
+ nullable: boolean,
22
+ explore: MetadataFactory.IExplore,
23
+ ): MetadataTupleType => {
19
24
  // CHECK EXISTENCE
20
25
  const [tuple, newbie, closure] = collection.emplaceTuple(checker, type);
21
26
  ArrayUtil.add(tuple.nullables, nullable);
@@ -31,7 +36,12 @@ export const emplace_metadata_tuple =
31
36
  .map((elem, i) => {
32
37
  const child: Metadata = explore_metadata(checker)(options)(
33
38
  collection,
34
- )(elem, false, false);
39
+ )(errors)(elem, {
40
+ ...explore,
41
+ nested: tuple,
42
+ aliased: false,
43
+ escaped: false,
44
+ });
35
45
 
36
46
  // CHECK OPTIONAL
37
47
  const flag: ts.ElementFlags | undefined = flagList[i];
@@ -11,23 +11,17 @@ export const explore_metadata =
11
11
  (checker: ts.TypeChecker) =>
12
12
  (options: MetadataFactory.IOptions) =>
13
13
  (collection: MetadataCollection) =>
14
- (
15
- type: ts.Type | null,
16
- parentResolved: boolean,
17
- aliased: boolean = false,
18
- ): Metadata => {
14
+ (errors: MetadataFactory.IError[]) =>
15
+ (type: ts.Type | null, explore: MetadataFactory.IExplore): Metadata => {
19
16
  // CONSTRUCT METADATA
20
- const meta: Metadata = Metadata.initialize(parentResolved);
21
- collection.entire_.add(meta);
22
-
17
+ const meta: Metadata = Metadata.initialize(explore.escaped);
23
18
  if (type === null) return meta;
24
19
 
25
20
  // ITERATE TYPESCRIPT TYPES
26
- iterate_metadata(checker)(options)(collection)(
21
+ iterate_metadata(checker)(options)(collection)(errors)(
27
22
  meta,
28
23
  type,
29
- parentResolved,
30
- aliased,
24
+ explore,
31
25
  );
32
26
  emend_metadata_atomics(meta);
33
27
  if (meta.escaped) {
@@ -2,9 +2,9 @@ import ts from "typescript";
2
2
 
3
3
  import { Metadata } from "../../../schemas/metadata/Metadata";
4
4
 
5
- // import { ArrayUtil } from "../../../utils/ArrayUtil";
6
5
  import { MetadataCollection } from "../../MetadataCollection";
7
6
  import { MetadataFactory } from "../../MetadataFactory";
7
+ import { TypeFactory } from "../../TypeFactory";
8
8
  import { iterate_metadata_alias } from "./iterate_metadata_alias";
9
9
  import { iterate_metadata_array } from "./iterate_metadata_array";
10
10
  import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
@@ -24,39 +24,42 @@ export const iterate_metadata =
24
24
  (checker: ts.TypeChecker) =>
25
25
  (options: MetadataFactory.IOptions) =>
26
26
  (collection: MetadataCollection) =>
27
+ (errors: MetadataFactory.IError[]) =>
27
28
  (
28
29
  meta: Metadata,
29
30
  type: ts.Type,
30
- resolved: boolean,
31
- aliased: boolean,
31
+ explore: MetadataFactory.IExplore,
32
32
  ): void => {
33
- if (type.isTypeParameter() === true)
34
- throw new Error(
35
- `Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
36
- );
33
+ if (type.isTypeParameter() === true) {
34
+ errors.push({
35
+ name: TypeFactory.getFullName(checker)(type),
36
+ explore: { ...explore },
37
+ messages: ["non-specified generic argument found."],
38
+ });
39
+ return;
40
+ }
37
41
  // CHECK SPECIAL CASES
38
- if (
39
- (aliased !== true &&
40
- iterate_metadata_alias(checker)(options)(collection)(
42
+ else if (
43
+ (explore.aliased !== true &&
44
+ iterate_metadata_alias(checker)(options)(collection)(errors)(
41
45
  meta,
42
46
  type,
47
+ explore,
43
48
  )) ||
44
- iterate_metadata_intersection(checker)(options)(collection)(
49
+ iterate_metadata_intersection(checker)(options)(collection)(errors)(
45
50
  meta,
46
51
  type,
47
- resolved,
48
- aliased,
52
+ explore,
49
53
  ) ||
50
- iterate_metadata_union(checker)(options)(collection)(
54
+ iterate_metadata_union(checker)(options)(collection)(errors)(
51
55
  meta,
52
56
  type,
53
- resolved,
57
+ explore,
54
58
  ) ||
55
- iterate_metadata_resolve(checker)(options)(collection)(
59
+ iterate_metadata_resolve(checker)(options)(collection)(errors)(
56
60
  meta,
57
61
  type,
58
- resolved,
59
- aliased,
62
+ explore,
60
63
  )
61
64
  )
62
65
  return;
@@ -64,18 +67,35 @@ export const iterate_metadata =
64
67
  // ITERATE CASES
65
68
  iterate_metadata_coalesce(meta, type) ||
66
69
  iterate_metadata_constant(checker)(options)(meta, type) ||
67
- iterate_metadata_template(checker)(options)(collection)(
70
+ iterate_metadata_template(checker)(options)(collection)(errors)(
68
71
  meta,
69
72
  type,
73
+ explore,
70
74
  ) ||
71
75
  iterate_metadata_atomic(meta, type) ||
72
- iterate_metadata_tuple(checker)(options)(collection)(
76
+ iterate_metadata_tuple(checker)(options)(collection)(errors)(
73
77
  meta,
74
78
  type as ts.TupleType,
79
+ explore,
80
+ ) ||
81
+ iterate_metadata_array(checker)(options)(collection)(errors)(
82
+ meta,
83
+ type,
84
+ explore,
75
85
  ) ||
76
- iterate_metadata_array(checker)(options)(collection)(meta, type) ||
77
86
  iterate_metadata_native(checker)(meta, type) ||
78
- iterate_metadata_map(checker)(options)(collection)(meta, type) ||
79
- iterate_metadata_set(checker)(options)(collection)(meta, type) ||
80
- iterate_metadata_object(checker)(options)(collection)(meta, type);
87
+ iterate_metadata_map(checker)(options)(collection)(errors)(
88
+ meta,
89
+ type,
90
+ explore,
91
+ ) ||
92
+ iterate_metadata_set(checker)(options)(collection)(errors)(
93
+ meta,
94
+ type,
95
+ explore,
96
+ ) ||
97
+ iterate_metadata_object(checker)(options)(collection)(errors)(
98
+ meta,
99
+ type,
100
+ );
81
101
  };
@@ -13,7 +13,12 @@ export const iterate_metadata_alias =
13
13
  (checker: ts.TypeChecker) =>
14
14
  (options: MetadataFactory.IOptions) =>
15
15
  (collection: MetadataCollection) =>
16
- (meta: Metadata, type: ts.Type): boolean => {
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ meta: Metadata,
19
+ type: ts.Type,
20
+ explore: MetadataFactory.IExplore,
21
+ ): boolean => {
17
22
  if (options.absorb !== false || type.aliasSymbol === undefined)
18
23
  return false;
19
24
 
@@ -24,7 +29,7 @@ export const iterate_metadata_alias =
24
29
  // CONSTRUCT DEFINITION
25
30
  const alias: MetadataAlias = emplace_metadata_alias(checker)(options)(
26
31
  collection,
27
- )(type, meta.nullable);
32
+ )(errors)(type, meta.nullable, explore);
28
33
  ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
29
34
  return true;
30
35
  };
@@ -14,12 +14,17 @@ export const iterate_metadata_array =
14
14
  (checker: ts.TypeChecker) =>
15
15
  (options: MetadataFactory.IOptions) =>
16
16
  (collection: MetadataCollection) =>
17
- (meta: Metadata, type: ts.Type): boolean => {
17
+ (errors: MetadataFactory.IError[]) =>
18
+ (
19
+ meta: Metadata,
20
+ type: ts.Type,
21
+ explore: MetadataFactory.IExplore,
22
+ ): boolean => {
18
23
  if (!checker.isArrayType(type)) return false;
19
24
 
20
25
  const arrayType: MetadataArrayType = emplace_metadata_array_type(
21
26
  checker,
22
- )(options)(collection)(type, meta.nullable);
27
+ )(options)(collection)(errors)(type, meta.nullable, explore);
23
28
  ArrayUtil.add(
24
29
  meta.arrays,
25
30
  MetadataArray.create({