typia 5.0.0-dev.20230827 → 5.0.0-dev.20230829

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 (277) 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 +248 -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 +112 -97
  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/helpers/ProtobufUtil.js +1 -1
  97. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  98. package/lib/programmers/internal/application_escaped.d.ts +4 -0
  99. package/lib/programmers/internal/{application_resolved.js → application_escaped.js} +4 -4
  100. package/lib/programmers/internal/application_escaped.js.map +1 -0
  101. package/lib/programmers/internal/application_schema.js +5 -5
  102. package/lib/programmers/internal/application_schema.js.map +1 -1
  103. package/lib/programmers/json/JsonApplicationProgrammer.js +5 -1
  104. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  105. package/lib/programmers/json/JsonAssertParseProgrammer.js +2 -0
  106. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  107. package/lib/programmers/json/JsonIsParseProgrammer.js +2 -0
  108. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  109. package/lib/programmers/json/JsonStringifyProgrammer.js +20 -62
  110. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  111. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -0
  112. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  113. package/lib/programmers/misc/MiscCloneProgrammer.js +13 -8
  114. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  115. package/lib/programmers/misc/MiscLiteralsProgrammer.js +10 -5
  116. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  117. package/lib/programmers/misc/MiscPruneProgrammer.js +13 -8
  118. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  119. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +21 -1
  120. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  121. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +11 -1
  122. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  123. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +22 -1
  124. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  125. package/lib/schemas/metadata/Metadata.js +4 -4
  126. package/lib/schemas/metadata/Metadata.js.map +1 -1
  127. package/lib/transform.d.ts +2 -1
  128. package/lib/transform.js +11 -3
  129. package/lib/transform.js.map +1 -1
  130. package/lib/transformers/CallExpressionTransformer.d.ts +1 -1
  131. package/lib/transformers/CallExpressionTransformer.js +2 -1
  132. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  133. package/lib/transformers/FileTransformer.js +18 -8
  134. package/lib/transformers/FileTransformer.js.map +1 -1
  135. package/lib/transformers/IProject.d.ts +3 -0
  136. package/lib/transformers/NodeTransformer.d.ts +1 -1
  137. package/lib/transformers/TransformerError.d.ts +12 -0
  138. package/lib/transformers/TransformerError.js +66 -0
  139. package/lib/transformers/TransformerError.js.map +1 -0
  140. package/lib/transformers/features/AssertTransformer.d.ts +1 -0
  141. package/lib/transformers/features/CreateAssertTransformer.d.ts +1 -0
  142. package/lib/transformers/features/CreateIsTransformer.d.ts +1 -0
  143. package/lib/transformers/features/CreateRandomTransformer.js +9 -4
  144. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  145. package/lib/transformers/features/CreateValidateTransformer.d.ts +1 -0
  146. package/lib/transformers/features/IsTransformer.d.ts +1 -0
  147. package/lib/transformers/features/RandomTransformer.js +9 -4
  148. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  149. package/lib/transformers/features/ValidateTransformer.d.ts +1 -0
  150. package/lib/transformers/features/json/JsonApplicationTransformer.js +79 -19
  151. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  152. package/lib/transformers/features/json/JsonAssertParseTransformer.d.ts +1 -0
  153. package/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts +1 -0
  154. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts +1 -0
  155. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts +1 -0
  156. package/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts +1 -0
  157. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts +1 -0
  158. package/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts +1 -0
  159. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts +1 -0
  160. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts +1 -0
  161. package/lib/transformers/features/json/JsonIsParseTransformer.d.ts +1 -0
  162. package/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts +1 -0
  163. package/lib/transformers/features/json/JsonStringifyTransformer.d.ts +1 -0
  164. package/lib/transformers/features/json/JsonValidateParseTransformer.d.ts +1 -0
  165. package/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts +1 -0
  166. package/lib/transformers/features/misc/MetadataTransformer.js +13 -5
  167. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  168. package/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts +1 -0
  169. package/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts +1 -0
  170. package/lib/transformers/features/misc/MiscCloneTransformer.d.ts +1 -0
  171. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts +1 -0
  172. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts +1 -0
  173. package/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts +1 -0
  174. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts +1 -0
  175. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts +1 -0
  176. package/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts +1 -0
  177. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts +1 -0
  178. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts +1 -0
  179. package/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts +1 -0
  180. package/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts +1 -0
  181. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +9 -4
  182. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  183. package/lib/transformers/features/misc/MiscPruneTransformer.d.ts +1 -0
  184. package/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts +1 -0
  185. package/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts +1 -0
  186. package/lib/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.d.ts +1 -0
  187. package/lib/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.d.ts +1 -0
  188. package/lib/transformers/features/protobuf/CreateProtobufDecodeTransformer.d.ts +1 -0
  189. package/lib/transformers/features/protobuf/CreateProtobufEncodeTransformer.d.ts +1 -0
  190. package/lib/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.d.ts +1 -0
  191. package/lib/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.d.ts +1 -0
  192. package/lib/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.d.ts +1 -0
  193. package/lib/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.d.ts +1 -0
  194. package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts +1 -0
  195. package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts +1 -0
  196. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts +1 -0
  197. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts +1 -0
  198. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts +1 -0
  199. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts +1 -0
  200. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +9 -2
  201. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  202. package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts +1 -0
  203. package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts +1 -0
  204. package/lib/transformers/internal/GenericTransformer.js +17 -4
  205. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  206. package/lib/typings/ValidationPipe.d.ts +7 -0
  207. package/lib/typings/ValidationPipe.js +3 -0
  208. package/lib/typings/ValidationPipe.js.map +1 -0
  209. package/package.json +5 -1
  210. package/src/executable/TypiaGenerateWizard.ts +1 -1
  211. package/src/executable/TypiaSetupWizard.ts +1 -1
  212. package/src/executable/setup/PackageManager.ts +1 -1
  213. package/src/executable/setup/PluginConfigurator.ts +2 -2
  214. package/src/factories/ExpressionFactory.ts +2 -2
  215. package/src/factories/JsonMetadataFactory.ts +43 -0
  216. package/src/factories/LiteralFactory.ts +2 -1
  217. package/src/factories/MetadataCollection.ts +0 -5
  218. package/src/factories/MetadataCommentTagFactory.ts +130 -84
  219. package/src/factories/MetadataFactory.ts +175 -7
  220. package/src/factories/MetadataTypeTagFactory.ts +191 -141
  221. package/src/factories/ProtobufFactory.ts +92 -102
  222. package/src/factories/TypeFactory.ts +0 -5
  223. package/src/factories/internal/metadata/emplace_metadata_alias.ts +12 -5
  224. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +12 -5
  225. package/src/factories/internal/metadata/emplace_metadata_object.ts +20 -5
  226. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +12 -2
  227. package/src/factories/internal/metadata/explore_metadata.ts +5 -11
  228. package/src/factories/internal/metadata/iterate_metadata.ts +44 -24
  229. package/src/factories/internal/metadata/iterate_metadata_alias.ts +7 -2
  230. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -2
  231. package/src/factories/internal/metadata/iterate_metadata_collection.ts +30 -29
  232. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +21 -22
  233. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +33 -17
  234. package/src/factories/internal/metadata/iterate_metadata_map.ts +20 -4
  235. package/src/factories/internal/metadata/iterate_metadata_object.ts +2 -1
  236. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +15 -12
  237. package/src/factories/internal/metadata/iterate_metadata_set.ts +11 -2
  238. package/src/factories/internal/metadata/iterate_metadata_template.ts +12 -3
  239. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -2
  240. package/src/factories/internal/metadata/iterate_metadata_union.ts +10 -7
  241. package/src/programmers/CheckerProgrammer.ts +8 -2
  242. package/src/programmers/FeatureProgrammer.ts +4 -1
  243. package/src/programmers/IsProgrammer.ts +1 -1
  244. package/src/programmers/RandomProgrammer.ts +18 -17
  245. package/src/programmers/TypiaProgrammer.ts +27 -2
  246. package/src/programmers/helpers/ProtobufUtil.ts +1 -1
  247. package/src/programmers/internal/{application_resolved.ts → application_escaped.ts} +1 -1
  248. package/src/programmers/internal/application_schema.ts +5 -5
  249. package/src/programmers/json/JsonApplicationProgrammer.ts +6 -3
  250. package/src/programmers/json/JsonAssertParseProgrammer.ts +7 -2
  251. package/src/programmers/json/JsonIsParseProgrammer.ts +7 -2
  252. package/src/programmers/json/JsonStringifyProgrammer.ts +7 -37
  253. package/src/programmers/json/JsonValidateParseProgrammer.ts +7 -2
  254. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +1 -1
  255. package/src/programmers/misc/MiscCloneProgrammer.ts +14 -11
  256. package/src/programmers/misc/MiscLiteralsProgrammer.ts +11 -6
  257. package/src/programmers/misc/MiscPruneProgrammer.ts +8 -2
  258. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +17 -1
  259. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +15 -1
  260. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +18 -1
  261. package/src/schemas/metadata/Metadata.ts +4 -4
  262. package/src/transform.ts +13 -5
  263. package/src/transformers/CallExpressionTransformer.ts +6 -3
  264. package/src/transformers/FileTransformer.ts +25 -13
  265. package/src/transformers/IProject.ts +3 -0
  266. package/src/transformers/NodeTransformer.ts +1 -1
  267. package/src/transformers/TransformerError.ts +55 -0
  268. package/src/transformers/features/CreateRandomTransformer.ts +11 -7
  269. package/src/transformers/features/RandomTransformer.ts +11 -7
  270. package/src/transformers/features/json/JsonApplicationTransformer.ts +39 -35
  271. package/src/transformers/features/misc/MetadataTransformer.ts +18 -10
  272. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +11 -7
  273. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +9 -7
  274. package/src/transformers/internal/GenericTransformer.ts +17 -10
  275. package/src/typings/ValidationPipe.ts +9 -0
  276. package/lib/programmers/internal/application_resolved.d.ts +0 -4
  277. package/lib/programmers/internal/application_resolved.js.map +0 -1
@@ -3,10 +3,30 @@ import { Metadata } from "../schemas/metadata/Metadata";
3
3
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
4
4
  import { MetadataProperty } from "../schemas/metadata/MetadataProperty";
5
5
 
6
+ import { MetadataFactory } from "./MetadataFactory";
7
+
6
8
  export namespace MetadataTypeTagFactory {
7
9
  export const analyze =
10
+ (errors: MetadataFactory.IError[]) =>
8
11
  (type: "bigint" | "number" | "string" | "array") =>
9
- (objects: MetadataObject[]): IMetadataTypeTag[] => {
12
+ (
13
+ objects: MetadataObject[],
14
+ explore: MetadataFactory.IExplore,
15
+ ): IMetadataTypeTag[] => {
16
+ const messages: string[] = [];
17
+ const report =
18
+ (property: string | null) =>
19
+ (msg: string): false => {
20
+ messages.push(
21
+ `the property ${
22
+ property === null
23
+ ? `["typia.tag"]`
24
+ : `["typia.tag.${property}"]`
25
+ } ${msg}.`,
26
+ );
27
+ return false;
28
+ };
29
+
10
30
  //----
11
31
  // VALIDATION PROCESS
12
32
  //----
@@ -23,7 +43,7 @@ export namespace MetadataTypeTagFactory {
23
43
  )
24
44
  return false;
25
45
  else if (top.value.optional === false)
26
- throw error(null)("must be optional object");
46
+ return report(null)("must be optional object");
27
47
 
28
48
  // CHECK LIST OF PROPERTIES
29
49
  const tag: MetadataObject = top.value.objects[0]!;
@@ -31,19 +51,19 @@ export namespace MetadataTypeTagFactory {
31
51
  .map((p) => p.key.getSoleLiteral()!)
32
52
  .filter((str) => str !== null);
33
53
  if (FIELDS.some((f) => !statics.includes(f)))
34
- throw error(null)(
54
+ return report(null)(
35
55
  `must have four properties - ${FIELDS.map(
36
56
  (str) => `'${str}'`,
37
57
  ).join(", ")}`,
38
58
  );
39
59
 
40
- tag.properties.forEach((p) => {
60
+ const each: boolean[] = tag.properties.map((p) => {
41
61
  const key: string | null = p.key.getSoleLiteral();
42
- if (key === null) return;
43
- else if (FIELDS.includes(key) === false) return;
44
- validate_property(key, p.value);
62
+ if (key === null) return true;
63
+ else if (FIELDS.includes(key) === false) return true;
64
+ return validate_property(report)(key, p.value);
45
65
  });
46
- return true;
66
+ return each.every((v) => v === true);
47
67
  });
48
68
  if (filtered.length === 0) return [];
49
69
 
@@ -51,25 +71,47 @@ export namespace MetadataTypeTagFactory {
51
71
  // CONSTRUCT TYPE TAGS
52
72
  //----
53
73
  // CREATE 1ST
54
- const tagList: ITypeTag[] = filtered.map(create_metadata_type_tag);
55
- const output: IMetadataTypeTag[] = tagList.map((tag) => ({
56
- target: tag.target,
57
- name: tag.name,
58
- kind: tag.kind,
59
- value: tag.value,
60
- validate: tag.validate[type]!,
61
- exclusive: tag.exclusive,
62
- }));
63
- validate(type)(output);
74
+ const tagList: Array<ITypeTag | null> = filtered.map(
75
+ create_metadata_type_tag(report),
76
+ );
77
+
78
+ const output: IMetadataTypeTag[] = [];
79
+ for (const tag of tagList)
80
+ if (tag !== null)
81
+ output.push({
82
+ target: tag.target.some((str) => str === type)
83
+ ? type
84
+ : null!,
85
+ name: tag.name,
86
+ kind: tag.kind,
87
+ value: tag.value,
88
+ validate: tag.validate[type]!,
89
+ exclusive: tag.exclusive,
90
+ });
91
+ validate(report)(type)(output);
92
+
93
+ if (messages.length > 0) {
94
+ errors.push({
95
+ name: [type, ...objects.map((o) => o.name)].join(" & "),
96
+ explore,
97
+ messages,
98
+ });
99
+ return [];
100
+ }
64
101
  return output;
65
102
  };
66
103
 
67
104
  export const validate =
105
+ (report: (property: string | null) => (msg: string) => false) =>
68
106
  (type: "bigint" | "number" | "string" | "array") =>
69
- (tagList: IMetadataTypeTag[]) => {
107
+ (tagList: IMetadataTypeTag[]): boolean => {
108
+ let success: boolean = true;
70
109
  for (const tag of tagList)
71
- if (tag.target.includes(type))
72
- error(null)(`target must constains ${type} type - ${tag}`);
110
+ if (tag.target !== type) {
111
+ success &&= report(null)(
112
+ `target must constains ${type} type`,
113
+ );
114
+ }
73
115
 
74
116
  tagList.forEach((tag, i) => {
75
117
  if (tag.exclusive === false) return;
@@ -78,7 +120,7 @@ export namespace MetadataTypeTagFactory {
78
120
  (opposite, j) => i !== j && opposite.kind === tag.kind,
79
121
  );
80
122
  if (some === true)
81
- throw error(null)(
123
+ success &&= report(null)(
82
124
  `kind '${tag.kind}' can't be duplicated`,
83
125
  );
84
126
  } else if (Array.isArray(tag.exclusive)) {
@@ -89,133 +131,147 @@ export namespace MetadataTypeTagFactory {
89
131
  (tag.exclusive as string[]).includes(opposite.name),
90
132
  );
91
133
  if (some !== undefined)
92
- throw error(null)(
134
+ success ??= report(null)(
93
135
  `kind '${tag.kind}' can't be used with '${some.name}'`,
94
136
  );
95
137
  }
96
138
  });
139
+ return success;
97
140
  };
98
141
 
99
- const validate_property = (key: string, value: Metadata) => {
100
- if (
101
- // TARGET
102
- key === "target" &&
103
- (value.constants.length !== 1 ||
104
- value.constants[0]!.values.length !== value.size() ||
105
- value.constants[0]!.values.some(
106
- (v) =>
107
- v !== "bigint" &&
108
- v !== "number" &&
109
- v !== "string" &&
110
- v !== "array",
111
- ))
112
- )
113
- throw error(key)(
114
- `must be one of 'bigint', 'number', 'string', 'array'`,
115
- );
116
- else if (
117
- // KIND
118
- key === "kind" &&
119
- (value.size() !== 1 ||
120
- value.constants.length !== 1 ||
121
- value.constants[0]!.type !== "string" ||
122
- value.constants[0]!.values.length !== 1)
123
- )
124
- throw error(key)("must be a string literal type");
125
- else if (
126
- // VALUE
127
- key === "value" &&
128
- (value.size() > 1 ||
129
- (value.size() !== 0 &&
130
- (value.constants.length !== 1 ||
131
- value.constants[0]!.values.length !== 1)))
132
- )
133
- throw error(key)(
134
- "must be a constant literal type or undefined value",
135
- );
136
- else if (key === "exclusive") get_exclusive(key)(value);
137
- else if (key === "validate") {
138
- //----
139
- // VALIDATE
140
- //----
141
- // STRING CASE
142
- const single: boolean =
143
- value.size() === 1 &&
144
- value.constants.length === 1 &&
145
- value.constants[0]!.type === "string" &&
146
- value.constants[0]!.values.length === 1;
147
- if (single === true) return;
148
-
149
- // RECORD<TARGET, STRING>
150
- const target: string[] | undefined = value.objects[0]?.properties
151
- .map((p) => p.key.getSoleLiteral()!)
152
- .filter((str) => str !== null) as string[] | undefined;
153
- if (target === undefined)
154
- throw error("target")(
142
+ const validate_property =
143
+ (report: (property: string | null) => (msg: string) => false) =>
144
+ (key: string, value: Metadata): boolean => {
145
+ if (
146
+ // TARGET
147
+ key === "target" &&
148
+ (value.constants.length !== 1 ||
149
+ value.constants[0]!.values.length !== value.size() ||
150
+ value.constants[0]!.values.some(
151
+ (v) =>
152
+ v !== "bigint" &&
153
+ v !== "number" &&
154
+ v !== "string" &&
155
+ v !== "array",
156
+ ))
157
+ )
158
+ return report(key)(
155
159
  `must be one of 'bigint', 'number', 'string', 'array'`,
156
160
  );
157
- const variadic: boolean =
158
- value.size() === 1 &&
159
- value.objects.length === 1 &&
160
- value.objects[0]!.properties.every(
161
- (vp) =>
162
- vp.value.size() === 1 &&
163
- vp.value.isRequired() &&
164
- vp.value.nullable === false &&
165
- vp.value.constants.length === 1 &&
166
- vp.value.constants[0]!.type === "string" &&
167
- vp.value.constants[0]!.values.length === 1 &&
168
- target.includes(vp.key.getSoleLiteral()!),
161
+ else if (
162
+ // KIND
163
+ key === "kind" &&
164
+ (value.size() !== 1 ||
165
+ value.constants.length !== 1 ||
166
+ value.constants[0]!.type !== "string" ||
167
+ value.constants[0]!.values.length !== 1)
168
+ )
169
+ return report(key)("must be a string literal type");
170
+ else if (
171
+ // VALUE
172
+ key === "value" &&
173
+ (value.size() > 1 ||
174
+ (value.size() !== 0 &&
175
+ (value.constants.length !== 1 ||
176
+ value.constants[0]!.values.length !== 1)))
177
+ )
178
+ return report(key)(
179
+ "must be a constant literal type or undefined value",
169
180
  );
170
- if (variadic === false)
171
- throw error(key)(
172
- `must be a string literal type or Record<Target, string> type.`,
181
+ else if (key === "exclusive")
182
+ return get_exclusive(report)(key)(value) !== null;
183
+ else if (key === "validate") {
184
+ //----
185
+ // VALIDATE
186
+ //----
187
+ // STRING CASE
188
+ const single: boolean =
189
+ value.size() === 1 &&
190
+ value.constants.length === 1 &&
191
+ value.constants[0]!.type === "string" &&
192
+ value.constants[0]!.values.length === 1;
193
+ if (single === true) return true;
194
+
195
+ // RECORD<TARGET, STRING>
196
+ const target: string[] | undefined =
197
+ value.objects[0]?.properties
198
+ .map((p) => p.key.getSoleLiteral()!)
199
+ .filter((str) => str !== null) as string[] | undefined;
200
+ if (target === undefined)
201
+ return report("target")(
202
+ `must be one of 'bigint', 'number', 'string', 'array'`,
203
+ );
204
+ const variadic: boolean =
205
+ value.size() === 1 &&
206
+ value.objects.length === 1 &&
207
+ value.objects[0]!.properties.every(
208
+ (vp) =>
209
+ vp.value.size() === 1 &&
210
+ vp.value.isRequired() &&
211
+ vp.value.nullable === false &&
212
+ vp.value.constants.length === 1 &&
213
+ vp.value.constants[0]!.type === "string" &&
214
+ vp.value.constants[0]!.values.length === 1 &&
215
+ target.includes(vp.key.getSoleLiteral()!),
216
+ );
217
+ if (variadic === false)
218
+ return report(key)(
219
+ `must be a string literal type or Record<Target, string> type.`,
220
+ );
221
+ }
222
+ return true;
223
+ };
224
+
225
+ const create_metadata_type_tag =
226
+ (report: (property: string | null) => (msg: string) => false) =>
227
+ (obj: MetadataObject): ITypeTag | null => {
228
+ const find = (key: string): MetadataProperty | undefined =>
229
+ obj.properties[0]?.value.objects[0]?.properties.find(
230
+ (p) => p.key.getSoleLiteral() === key,
173
231
  );
174
- }
175
- };
176
232
 
177
- const create_metadata_type_tag = (obj: MetadataObject): ITypeTag => {
178
- const find = (key: string): MetadataProperty | undefined =>
179
- obj.properties[0]?.value.objects[0]?.properties.find(
180
- (p) => p.key.getSoleLiteral() === key,
181
- );
233
+ const target = find("target")!.value.constants[0]!
234
+ .values as ITypeTag["target"];
235
+ const kind: string = find("kind")!.value.constants[0]!
236
+ .values[0] as string;
237
+ const value: boolean | bigint | number | string | undefined =
238
+ find("value")?.value.constants[0]?.values[0];
239
+ const exclusive: string[] | boolean | null = get_exclusive(report)(
240
+ "exclusive",
241
+ )(find("exclusive")?.value);
242
+ if (exclusive === null) return null;
182
243
 
183
- const target = find("target")!.value.constants[0]!
184
- .values[0] as ITypeTag["target"];
185
- const kind: string = find("kind")!.value.constants[0]!
186
- .values[0] as string;
187
- const value: boolean | bigint | number | string | undefined =
188
- find("value")?.value.constants[0]?.values[0];
189
- const exclusive: string[] | boolean | undefined = get_exclusive(
190
- "exclusive",
191
- )(find("exclusive")?.value);
192
- const validate: Record<string, string> = (() => {
193
- const validate = find("validate")!.value;
194
- if (validate.constants.length)
195
- return {
196
- [target]: validate.constants[0]!.values[0] as string,
197
- };
198
- return Object.fromEntries(
199
- validate.objects[0]!.properties.map((p) => [
200
- p.key.getSoleLiteral()!,
201
- p.value.constants[0]!.values[0]! as string,
202
- ]),
203
- );
204
- })();
244
+ const validate: Record<string, string> = (() => {
245
+ const validate = find("validate")!.value;
246
+ if (validate.constants.length)
247
+ return Object.fromEntries(
248
+ target.map((t) => [
249
+ t,
250
+ validate.constants[0]!.values[0] as string,
251
+ ]),
252
+ );
253
+ return Object.fromEntries(
254
+ validate.objects[0]!.properties.map((p) => [
255
+ p.key.getSoleLiteral()!,
256
+ p.value.constants[0]!.values[0]! as string,
257
+ ]),
258
+ );
259
+ })();
205
260
 
206
- return {
207
- name: obj.name,
208
- target,
209
- kind,
210
- value,
211
- validate,
212
- exclusive: exclusive ?? false,
261
+ return {
262
+ name: obj.name,
263
+ target,
264
+ kind,
265
+ value,
266
+ validate,
267
+ exclusive: exclusive ?? false,
268
+ };
213
269
  };
214
- };
215
270
 
216
271
  const get_exclusive =
272
+ (report: (property: string | null) => (msg: string) => false) =>
217
273
  (key: string) =>
218
- (value: Metadata | undefined): boolean | string[] => {
274
+ (value: Metadata | undefined): boolean | string[] | null => {
219
275
  if (value === undefined) return false;
220
276
  else if (
221
277
  value.size() === 1 &&
@@ -238,15 +294,16 @@ export namespace MetadataTypeTagFactory {
238
294
  return value.tuples[0]!.type.elements.map(
239
295
  (elem) => elem.constants[0]!.values[0]! as string,
240
296
  );
241
- throw error(key)(
297
+ report(key)(
242
298
  "must a boolean literal type or a tuple of string literal types.",
243
299
  );
300
+ return null;
244
301
  };
245
302
  }
246
303
 
247
304
  interface ITypeTag {
248
305
  name: string;
249
- target: "bigint" | "number" | "string" | "array";
306
+ target: Array<"bigint" | "number" | "string" | "array">;
250
307
  kind: string;
251
308
  value?: boolean | bigint | number | string;
252
309
  validate: Record<string, string>;
@@ -254,10 +311,3 @@ interface ITypeTag {
254
311
  }
255
312
 
256
313
  const FIELDS = ["target", "kind", "value", "validate"];
257
-
258
- const error = (property: string | null) => (msg: string) =>
259
- new Error(
260
- `Error on typia.MetadataFactory.analyze(): the property '${
261
- property === null ? `["typia.tag"]` : `["typia.tag.${property}"]`
262
- }' ${msg}.`,
263
- );