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
@@ -4,38 +4,39 @@ import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
4
  import { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";
5
5
 
6
6
  import { MetadataCollection } from "../../MetadataCollection";
7
+ import { MetadataFactory } from "../../MetadataFactory";
7
8
  import { iterate_metadata_comment_tags } from "./iterate_metadata_comment_tags";
8
9
 
9
- export const iterate_metadata_collection = (
10
- collection: MetadataCollection,
11
- ): void => {
12
- for (const array of collection.arrays())
13
- if (array.recursive === null)
14
- collection.setArrayRecursive(
15
- array,
16
- isArrayRecursive(new Set())(array)(array.value),
17
- );
18
- for (const tuple of collection.tuples())
19
- if (tuple.recursive === null) {
20
- const visited: Set<Metadata> = new Set();
21
- collection.setTupleRecursive(
22
- tuple,
23
- tuple.elements.some(isTupleRecursive(visited)(tuple)),
24
- );
25
- }
26
- for (const obj of collection.objects()) {
27
- iterate_metadata_comment_tags(obj);
28
- if (obj.recursive === null) {
29
- const visited: Set<Metadata> = new Set();
30
- collection.setObjectRecursive(
31
- obj,
32
- obj.properties.some((p) =>
33
- isObjectRecursive(visited)(obj)(p.value),
34
- ),
35
- );
10
+ export const iterate_metadata_collection =
11
+ (errors: MetadataFactory.IError[]) =>
12
+ (collection: MetadataCollection): void => {
13
+ for (const array of collection.arrays())
14
+ if (array.recursive === null)
15
+ collection.setArrayRecursive(
16
+ array,
17
+ isArrayRecursive(new Set())(array)(array.value),
18
+ );
19
+ for (const tuple of collection.tuples())
20
+ if (tuple.recursive === null) {
21
+ const visited: Set<Metadata> = new Set();
22
+ collection.setTupleRecursive(
23
+ tuple,
24
+ tuple.elements.some(isTupleRecursive(visited)(tuple)),
25
+ );
26
+ }
27
+ for (const obj of collection.objects()) {
28
+ iterate_metadata_comment_tags(errors)(obj);
29
+ if (obj.recursive === null) {
30
+ const visited: Set<Metadata> = new Set();
31
+ collection.setObjectRecursive(
32
+ obj,
33
+ obj.properties.some((p) =>
34
+ isObjectRecursive(visited)(obj)(p.value),
35
+ ),
36
+ );
37
+ }
36
38
  }
37
- }
38
- };
39
+ };
39
40
 
40
41
  const isArrayRecursive =
41
42
  (visited: Set<Metadata>) =>
@@ -1,27 +1,26 @@
1
1
  import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
2
2
 
3
- import { Escaper } from "../../../utils/Escaper";
4
-
5
3
  import { MetadataCommentTagFactory } from "../../MetadataCommentTagFactory";
4
+ import { MetadataFactory } from "../../MetadataFactory";
6
5
 
7
- export const iterate_metadata_comment_tags = (obj: MetadataObject) => {
8
- if (obj.tagged_ === true) return;
9
- obj.tagged_ = true;
10
-
11
- for (const prop of obj.properties) {
12
- const key: string = prop.key.getName();
13
- const variable: string | null =
14
- key.length >= 3 &&
15
- key[0] === '"' &&
16
- key[key.length - 1] === '"' &&
17
- Escaper.variable(key.slice(1, -1))
18
- ? key.slice(1, -1)
19
- : null;
6
+ export const iterate_metadata_comment_tags =
7
+ (errors: MetadataFactory.IError[]) => (object: MetadataObject) => {
8
+ if (object.tagged_ === true) return;
9
+ object.tagged_ = true;
20
10
 
21
- MetadataCommentTagFactory.analyze(
22
- variable !== null
23
- ? () => `${obj.name}.${variable}`
24
- : () => `${obj.name}[${key}]`,
25
- )(prop.value)(prop.jsDocTags);
26
- }
27
- };
11
+ for (const property of object.properties) {
12
+ MetadataCommentTagFactory.analyze(errors)(property.value)(
13
+ property.jsDocTags,
14
+ {
15
+ top: false,
16
+ object,
17
+ property: property.key.isSoleLiteral()
18
+ ? property.key.getSoleLiteral()!
19
+ : {},
20
+ nested: null,
21
+ escaped: false,
22
+ aliased: false,
23
+ },
24
+ );
25
+ }
26
+ };
@@ -17,11 +17,11 @@ export const iterate_metadata_intersection =
17
17
  (checker: ts.TypeChecker) =>
18
18
  (options: MetadataFactory.IOptions) =>
19
19
  (collection: MetadataCollection) =>
20
+ (errors: MetadataFactory.IError[]) =>
20
21
  (
21
22
  meta: Metadata,
22
23
  type: ts.Type,
23
- resolved: boolean,
24
- aliased: boolean,
24
+ explore: MetadataFactory.IExplore,
25
25
  ): boolean => {
26
26
  if (!type.isIntersection()) return false;
27
27
  else if (
@@ -36,25 +36,32 @@ export const iterate_metadata_intersection =
36
36
 
37
37
  // COSTRUCT FAKE METADATA LIST
38
38
  const fakeCollection: MetadataCollection = new MetadataCollection();
39
+ const fakeErrors: MetadataFactory.IError[] = [];
39
40
  const children: Metadata[] = [
40
41
  ...new Map(
41
42
  type.types.map((t) => {
42
43
  const m: Metadata = explore_metadata(checker)({
43
44
  ...options,
44
45
  absorb: true,
45
- })(fakeCollection)(t, resolved);
46
+ })(fakeCollection)(fakeErrors)(t, {
47
+ ...explore,
48
+ aliased: false,
49
+ });
46
50
  return [m.getName(), m] as const;
47
51
  }),
48
52
  ).values(),
49
53
  ];
54
+ if (fakeErrors.length) {
55
+ errors.push(...fakeErrors);
56
+ return true;
57
+ }
50
58
 
51
59
  // ONLY ONE CHILD AFTER REMOVING DUPLICATES
52
60
  if (children.length === 1) {
53
- iterate_metadata(checker)(options)(collection)(
61
+ iterate_metadata(checker)(options)(collection)(errors)(
54
62
  meta,
55
63
  type.types[0]!,
56
- resolved,
57
- aliased,
64
+ explore,
58
65
  );
59
66
  return true;
60
67
  } else if (
@@ -102,9 +109,18 @@ export const iterate_metadata_intersection =
102
109
  atomics.size + arrays.size > 1 ||
103
110
  individuals.length + objects.length + constants.length !==
104
111
  children.length
105
- )
106
- throw new Error(message(children));
107
- else if (atomics.size === 0 && arrays.size === 0 && constants.length) {
112
+ ) {
113
+ errors.push({
114
+ name: children.map((c) => c.getName()).join(" & "),
115
+ explore: { ...explore },
116
+ messages: ["nonsensible intersection"],
117
+ });
118
+ return true;
119
+ } else if (
120
+ atomics.size === 0 &&
121
+ arrays.size === 0 &&
122
+ constants.length
123
+ ) {
108
124
  for (const m of constants) {
109
125
  for (const tpl of m.templates)
110
126
  ArrayUtil.add(
@@ -151,11 +167,16 @@ export const iterate_metadata_intersection =
151
167
  else if (target === "array") {
152
168
  const name: string = arrays.values().next().value;
153
169
  if (!meta.arrays.some((a) => a.type.name === name)) {
154
- iterate_metadata_array(checker)(options)(collection)(
170
+ iterate_metadata_array(checker)(options)(collection)(errors)(
155
171
  meta,
156
172
  type.types[
157
173
  individuals.find((i) => i[0].arrays.length === 1)![1]
158
174
  ]!,
175
+ {
176
+ ...explore,
177
+ aliased: false,
178
+ escaped: false,
179
+ },
159
180
  );
160
181
  }
161
182
  }
@@ -163,8 +184,8 @@ export const iterate_metadata_intersection =
163
184
  // ASSIGN TAGS
164
185
  if (objects.length && target !== "boolean") {
165
186
  const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze(
166
- target,
167
- )(objects.map((om) => om.objects).flat());
187
+ errors,
188
+ )(target)(objects.map((om) => om.objects).flat(), explore);
168
189
  if (tags.length)
169
190
  if (target === "array") meta.arrays.at(-1)!.tags.push(tags);
170
191
  else
@@ -174,8 +195,3 @@ export const iterate_metadata_intersection =
174
195
  }
175
196
  return true;
176
197
  };
177
-
178
- const message = (children: Metadata[]) =>
179
- `Error on typia.MetadataFactory.analyze(): nonsensible intersection type detected - ${children
180
- .map((c) => c.getName())
181
- .join(" & ")}.`;
@@ -13,7 +13,12 @@ export const iterate_metadata_map =
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
  type = checker.getApparentType(type);
18
23
 
19
24
  const name = TypeFactory.getFullName(checker)(type, type.getSymbol());
@@ -29,10 +34,21 @@ export const iterate_metadata_map =
29
34
  ArrayUtil.set(
30
35
  meta.maps,
31
36
  {
32
- key: explore_metadata(checker)(options)(collection)(key, false),
33
- value: explore_metadata(checker)(options)(collection)(
37
+ key: explore_metadata(checker)(options)(collection)(errors)(
38
+ key,
39
+ {
40
+ ...explore,
41
+ escaped: false,
42
+ aliased: false,
43
+ },
44
+ ),
45
+ value: explore_metadata(checker)(options)(collection)(errors)(
34
46
  value,
35
- false,
47
+ {
48
+ ...explore,
49
+ escaped: false,
50
+ aliased: false,
51
+ },
36
52
  ),
37
53
  },
38
54
  (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
@@ -13,6 +13,7 @@ export const iterate_metadata_object =
13
13
  (checker: ts.TypeChecker) =>
14
14
  (options: MetadataFactory.IOptions) =>
15
15
  (collection: MetadataCollection) =>
16
+ (errors: MetadataFactory.IError[]) =>
16
17
  (meta: Metadata, type: ts.Type, ensure: boolean = false): boolean => {
17
18
  if (ensure === false) {
18
19
  const filter = (flag: ts.TypeFlags) =>
@@ -37,7 +38,7 @@ export const iterate_metadata_object =
37
38
 
38
39
  const obj: MetadataObject = emplace_metadata_object(checker)(options)(
39
40
  collection,
40
- )(type, meta.nullable);
41
+ )(errors)(type, meta.nullable);
41
42
  ArrayUtil.add(meta.objects, obj, (elem) => elem.name === obj.name);
42
43
  return true;
43
44
  };
@@ -10,21 +10,20 @@ import { MetadataFactory } from "../../MetadataFactory";
10
10
  import { TypeFactory } from "../../TypeFactory";
11
11
  import { iterate_metadata } from "./iterate_metadata";
12
12
 
13
- // import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
14
-
15
13
  export const iterate_metadata_resolve =
16
14
  (checker: ts.TypeChecker) =>
17
15
  (options: MetadataFactory.IOptions) =>
18
16
  (collection: MetadataCollection) =>
17
+ (errors: MetadataFactory.IError[]) =>
19
18
  (
20
19
  meta: Metadata,
21
20
  type: ts.Type,
22
- resolved: boolean,
23
- aliased: boolean,
21
+ explore: MetadataFactory.IExplore,
24
22
  ): boolean => {
25
- if (options.escape === false || resolved === true) return false;
23
+ if (options.escape === false || explore.escaped === true) return false;
26
24
 
27
- const escaped: ts.Type | null = TypeFactory.resolve(checker)(type);
25
+ const escaped: ts.Type | null =
26
+ TypeFactory.getReturnType(checker)(type)("toJSON");
28
27
  if (escaped === null) return false;
29
28
 
30
29
  if (meta.escaped === null) {
@@ -33,17 +32,21 @@ export const iterate_metadata_resolve =
33
32
  returns: Metadata.initialize(),
34
33
  });
35
34
  }
36
- iterate_metadata(checker)(options)(collection)(
35
+ iterate_metadata(checker)(options)(collection)(errors)(
37
36
  meta.escaped!.original,
38
37
  type,
39
- true,
40
- aliased,
38
+ {
39
+ ...explore,
40
+ escaped: true,
41
+ },
41
42
  );
42
- iterate_metadata(checker)(options)(collection)(
43
+ iterate_metadata(checker)(options)(collection)(errors)(
43
44
  meta.escaped!.returns,
44
45
  escaped,
45
- true,
46
- aliased,
46
+ {
47
+ ...explore,
48
+ escaped: true,
49
+ },
47
50
  );
48
51
  return true;
49
52
  };
@@ -13,7 +13,12 @@ export const iterate_metadata_set =
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
  type = checker.getApparentType(type);
18
23
 
19
24
  const name = TypeFactory.getFullName(checker)(type, type.getSymbol());
@@ -26,7 +31,11 @@ export const iterate_metadata_set =
26
31
  const key: ts.Type = generic[0]!;
27
32
  ArrayUtil.set(
28
33
  meta.sets,
29
- explore_metadata(checker)(options)(collection)(key, false),
34
+ explore_metadata(checker)(options)(collection)(errors)(key, {
35
+ ...explore,
36
+ escaped: false,
37
+ aliased: false,
38
+ }),
30
39
  (elem) => elem.getName(),
31
40
  );
32
41
  return true;
@@ -11,7 +11,12 @@ export const iterate_metadata_template =
11
11
  (checker: ts.TypeChecker) =>
12
12
  (options: MetadataFactory.IOptions) =>
13
13
  (collection: MetadataCollection) =>
14
- (meta: Metadata, type: ts.Type): boolean => {
14
+ (errors: MetadataFactory.IError[]) =>
15
+ (
16
+ meta: Metadata,
17
+ type: ts.Type,
18
+ explore: MetadataFactory.IExplore,
19
+ ): boolean => {
15
20
  const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
16
21
  if (!filter(ts.TypeFlags.TemplateLiteral)) return false;
17
22
 
@@ -26,9 +31,13 @@ export const iterate_metadata_template =
26
31
  const binded: ts.Type | undefined = template.types[i];
27
32
  if (binded)
28
33
  row.push(
29
- explore_metadata(checker)(options)(collection)(
34
+ explore_metadata(checker)(options)(collection)(errors)(
30
35
  binded,
31
- false,
36
+ {
37
+ ...explore,
38
+ escaped: false,
39
+ aliased: false,
40
+ },
32
41
  ),
33
42
  );
34
43
  });
@@ -14,12 +14,17 @@ export const iterate_metadata_tuple =
14
14
  (checker: ts.TypeChecker) =>
15
15
  (options: MetadataFactory.IOptions) =>
16
16
  (collection: MetadataCollection) =>
17
- (meta: Metadata, type: ts.TupleType): boolean => {
17
+ (errors: MetadataFactory.IError[]) =>
18
+ (
19
+ meta: Metadata,
20
+ type: ts.TupleType,
21
+ explore: MetadataFactory.IExplore,
22
+ ): boolean => {
18
23
  if (!checker.isTupleType(type)) return false;
19
24
 
20
25
  const tupleType: MetadataTupleType = emplace_metadata_tuple(checker)(
21
26
  options,
22
- )(collection)(type, meta.nullable);
27
+ )(collection)(errors)(type, meta.nullable, explore);
23
28
  ArrayUtil.add(
24
29
  meta.tuples,
25
30
  MetadataTuple.create({
@@ -10,15 +10,18 @@ export const iterate_metadata_union =
10
10
  (checker: ts.TypeChecker) =>
11
11
  (options: MetadataFactory.IOptions) =>
12
12
  (collection: MetadataCollection) =>
13
- (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
13
+ (errors: MetadataFactory.IError[]) =>
14
+ (
15
+ meta: Metadata,
16
+ type: ts.Type,
17
+ explore: MetadataFactory.IExplore,
18
+ ): boolean => {
14
19
  if (!type.isUnion()) return false;
15
20
  type.types.forEach((t) =>
16
- iterate_metadata(checker)(options)(collection)(
17
- meta,
18
- t,
19
- parentResolved,
20
- false,
21
- ),
21
+ iterate_metadata(checker)(options)(collection)(errors)(meta, t, {
22
+ ...explore,
23
+ aliased: false,
24
+ }),
22
25
  );
23
26
  return true;
24
27
  };
@@ -15,6 +15,7 @@ import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
15
15
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
16
16
 
17
17
  import { IProject } from "../transformers/IProject";
18
+ import { TransformerError } from "../transformers/TransformerError";
18
19
 
19
20
  import { FeatureProgrammer } from "./FeatureProgrammer";
20
21
  import { AtomicPredicator } from "./helpers/AtomicPredicator";
@@ -208,15 +209,20 @@ export namespace CheckerProgrammer {
208
209
  prefix: config.prefix,
209
210
  initializer:
210
211
  ({ checker }) =>
212
+ (importer) =>
211
213
  (type) => {
212
214
  const collection: MetadataCollection =
213
215
  new MetadataCollection();
214
- const meta: Metadata = MetadataFactory.analyze(checker)({
216
+ const result = MetadataFactory.analyze(checker)({
215
217
  escape: false,
216
218
  constant: true,
217
219
  absorb: true,
218
220
  })(collection)(type);
219
- return [collection, meta];
221
+ if (result.success === false)
222
+ throw TransformerError.from(`typia.${importer.method}`)(
223
+ result.errors,
224
+ );
225
+ return [collection, result.data];
220
226
  },
221
227
  addition: config.addition,
222
228
  decoder: () =>
@@ -47,6 +47,8 @@ export namespace FeatureProgrammer {
47
47
  */
48
48
  initializer: (
49
49
  project: IProject,
50
+ ) => (
51
+ importer: FunctionImporter,
50
52
  ) => (type: ts.Type) => [MetadataCollection, Metadata];
51
53
 
52
54
  /**
@@ -200,7 +202,8 @@ export namespace FeatureProgrammer {
200
202
  (config: IConfig) =>
201
203
  (importer: FunctionImporter) =>
202
204
  (type: ts.Type, name?: string) => {
203
- const [collection, meta] = config.initializer(project)(type);
205
+ const [collection, meta] =
206
+ config.initializer(project)(importer)(type);
204
207
 
205
208
  // ITERATE OVER ALL METADATA
206
209
  const output: ts.ConciseBody = config.decoder()(
@@ -23,9 +23,9 @@ export namespace IsProgrammer {
23
23
  (options?: Partial<CONFIG.IOptions>) =>
24
24
  (importer: FunctionImporter): CheckerProgrammer.IConfig => ({
25
25
  prefix: "$i",
26
+ equals: !!options?.object,
26
27
  trace: false,
27
28
  path: false,
28
- equals: !!options?.object,
29
29
  numeric: OptionPredicator.numeric({
30
30
  numeric: options?.numeric,
31
31
  }),
@@ -17,6 +17,7 @@ import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
17
17
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
18
18
 
19
19
  import { IProject } from "../transformers/IProject";
20
+ import { TransformerError } from "../transformers/TransformerError";
20
21
 
21
22
  import { Escaper } from "../utils/Escaper";
22
23
 
@@ -36,23 +37,23 @@ export namespace RandomProgrammer {
36
37
  return (type: ts.Type, name?: string) => {
37
38
  // INITIALIZE METADATA
38
39
  const collection: MetadataCollection = new MetadataCollection();
39
- const meta: Metadata = MetadataFactory.analyze(project.checker)(
40
- {
41
- escape: false,
42
- constant: true,
43
- absorb: true,
44
- validate: (meta) => {
45
- if (meta.natives.some((n) => n === "WeakSet"))
46
- throw new Error(
47
- `Error on ${modulo.getText()}(): WeakSet is not supported.`,
48
- );
49
- else if (meta.natives.some((n) => n === "WeakMap"))
50
- throw new Error(
51
- `Error on ${modulo.getText()}(): WeakMap is not supported.`,
52
- );
53
- },
40
+ const result = MetadataFactory.analyze(project.checker)({
41
+ escape: false,
42
+ constant: true,
43
+ absorb: true,
44
+ validate: (meta) => {
45
+ const output: string[] = [];
46
+ if (meta.natives.some((n) => n === "WeakSet"))
47
+ output.push(`WeakSet is not supported.`);
48
+ else if (meta.natives.some((n) => n === "WeakMap"))
49
+ output.push(`WeakMap is not supported.`);
50
+ return output;
54
51
  },
55
- )(collection)(type);
52
+ })(collection)(type);
53
+ if (result.success === false)
54
+ throw TransformerError.from(`typia.${importer.method}`)(
55
+ result.errors,
56
+ );
56
57
 
57
58
  // GENERATE FUNCTION
58
59
  const functions = {
@@ -64,7 +65,7 @@ export namespace RandomProgrammer {
64
65
  const output: ts.Expression = decode(importer)({
65
66
  function: false,
66
67
  recursive: false,
67
- })(meta);
68
+ })(result.data);
68
69
 
69
70
  return ts.factory.createArrowFunction(
70
71
  undefined,
@@ -20,7 +20,7 @@ export namespace TypiaProgrammer {
20
20
  props.output = path.resolve(props.output);
21
21
 
22
22
  if ((await is_directory(props.input)) === false)
23
- throw new Error(
23
+ throw new URIError(
24
24
  "Error on TypiaGenerator.generate(): input path is not a directory.",
25
25
  );
26
26
  else if (fs.existsSync(props.output) === false)
@@ -28,7 +28,7 @@ export namespace TypiaProgrammer {
28
28
  else if ((await is_directory(props.output)) === false) {
29
29
  const parent: string = path.join(props.output, "..");
30
30
  if ((await is_directory(parent)) === false)
31
- throw new Error(
31
+ throw new URIError(
32
32
  "Error on TypiaGenerator.generate(): output path is not a directory.",
33
33
  );
34
34
  await fs.promises.mkdir(props.output);
@@ -56,6 +56,7 @@ export namespace TypiaProgrammer {
56
56
  );
57
57
 
58
58
  // DO TRANSFORM
59
+ const diagnostics: ts.Diagnostic[] = [];
59
60
  const result: ts.TransformationResult<ts.SourceFile> = ts.transform(
60
61
  program
61
62
  .getSourceFiles()
@@ -73,11 +74,35 @@ export namespace TypiaProgrammer {
73
74
  p.transform === "typia/lib/transform" ||
74
75
  p.transform === "../src/transform.ts",
75
76
  ) ?? {},
77
+ {
78
+ addDiagnostic: (diag) => diagnostics.push(diag),
79
+ },
76
80
  ),
77
81
  ],
78
82
  program.getCompilerOptions(),
79
83
  );
80
84
 
85
+ // TRACE ERRORS
86
+ for (const diag of diagnostics) {
87
+ const file: string = diag.file
88
+ ? path.relative(diag.file.fileName, process.cwd())
89
+ : "(unknown file)";
90
+ const category: string =
91
+ diag.category === ts.DiagnosticCategory.Warning
92
+ ? "warning"
93
+ : diag.category === ts.DiagnosticCategory.Error
94
+ ? "error"
95
+ : diag.category === ts.DiagnosticCategory.Suggestion
96
+ ? "suggestion"
97
+ : diag.category === ts.DiagnosticCategory.Message
98
+ ? "message"
99
+ : "unkown";
100
+ console.error(
101
+ `${file}:${diag.start}:${diag.length} - ${category} TS(${diag.code}): ${diag.messageText}`,
102
+ );
103
+ }
104
+ if (diagnostics.length) process.exit(-1);
105
+
81
106
  // ARCHIVE TRANSFORMED FILES
82
107
  const printer: ts.Printer = ts.createPrinter({
83
108
  newLine: ts.NewLineKind.LineFeed,
@@ -5,7 +5,7 @@ import { IJsonComponents, IJsonSchema } from "../../module";
5
5
  import { JsonApplicationProgrammer } from "../json/JsonApplicationProgrammer";
6
6
  import { application_schema } from "./application_schema";
7
7
 
8
- export const application_resolved =
8
+ export const application_escaped =
9
9
  (options: JsonApplicationProgrammer.IOptions) =>
10
10
  <BlockNever extends boolean>(blockNever: BlockNever) =>
11
11
  (components: IJsonComponents) =>