typia 5.0.0-dev.20230824 → 5.0.0-dev.20230828

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/executable/TypiaGenerateWizard.js +1 -1
  4. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  5. package/lib/executable/TypiaSetupWizard.js +1 -1
  6. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  7. package/lib/executable/setup/PackageManager.js +1 -1
  8. package/lib/executable/setup/PackageManager.js.map +1 -1
  9. package/lib/executable/setup/PluginConfigurator.js +2 -2
  10. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  11. package/lib/factories/ExpressionFactory.d.ts +1 -1
  12. package/lib/factories/ExpressionFactory.js +3 -3
  13. package/lib/factories/ExpressionFactory.js.map +1 -1
  14. package/lib/factories/JsonMetadataFactory.d.ts +7 -0
  15. package/lib/factories/JsonMetadataFactory.js +38 -0
  16. package/lib/factories/JsonMetadataFactory.js.map +1 -0
  17. package/lib/factories/LiteralFactory.js +6 -2
  18. package/lib/factories/LiteralFactory.js.map +1 -1
  19. package/lib/factories/MetadataCollection.js +0 -2
  20. package/lib/factories/MetadataCollection.js.map +1 -1
  21. package/lib/factories/MetadataCommentTagFactory.js +543 -0
  22. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  23. package/lib/factories/MetadataFactory.d.ts +22 -2
  24. package/lib/factories/MetadataFactory.js +221 -17
  25. package/lib/factories/MetadataFactory.js.map +1 -1
  26. package/lib/factories/MetadataTypeTagFactory.d.ts +7 -0
  27. package/lib/factories/MetadataTypeTagFactory.js +280 -0
  28. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  29. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  30. package/lib/factories/NumericRangeFactory.js +34 -0
  31. package/lib/factories/NumericRangeFactory.js.map +1 -0
  32. package/lib/factories/ProtobufFactory.js +109 -73
  33. package/lib/factories/ProtobufFactory.js.map +1 -1
  34. package/lib/factories/TypeFactory.d.ts +0 -1
  35. package/lib/factories/TypeFactory.js +0 -5
  36. package/lib/factories/TypeFactory.js.map +1 -1
  37. package/lib/factories/internal/metadata/emend_metadata_atomics.js +7 -1
  38. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  39. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +1 -1
  40. package/lib/factories/internal/metadata/emplace_metadata_alias.js +20 -19
  41. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  42. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +1 -1
  43. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +20 -7
  44. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  45. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +1 -1
  46. package/lib/factories/internal/metadata/emplace_metadata_object.js +100 -85
  47. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  48. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +1 -1
  49. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +34 -21
  50. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
  51. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  52. package/lib/factories/internal/metadata/explore_metadata.js +12 -12
  53. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  54. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata.js +39 -19
  56. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  57. package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +1 -1
  58. package/lib/factories/internal/metadata/iterate_metadata_alias.js +12 -10
  59. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  60. package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +1 -1
  61. package/lib/factories/internal/metadata/iterate_metadata_array.js +11 -9
  62. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  63. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  64. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  65. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -1
  66. package/lib/factories/internal/metadata/iterate_metadata_collection.js +47 -45
  67. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  68. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -1
  69. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +17 -22
  70. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  71. package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +1 -1
  72. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +147 -135
  73. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  74. package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +1 -1
  75. package/lib/factories/internal/metadata/iterate_metadata_map.js +28 -15
  76. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  77. package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +1 -1
  78. package/lib/factories/internal/metadata/iterate_metadata_object.js +16 -14
  79. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  80. package/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts +1 -1
  81. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +28 -15
  82. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  83. package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +1 -1
  84. package/lib/factories/internal/metadata/iterate_metadata_set.js +24 -11
  85. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  86. package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +1 -1
  87. package/lib/factories/internal/metadata/iterate_metadata_template.js +28 -15
  88. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  89. package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +1 -1
  90. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +11 -9
  91. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  92. package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +1 -1
  93. package/lib/factories/internal/metadata/iterate_metadata_union.js +20 -7
  94. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  95. package/lib/functional/Namespace.js +0 -16
  96. package/lib/functional/Namespace.js.map +1 -1
  97. package/lib/programmers/AssertProgrammer.js +28 -8
  98. package/lib/programmers/AssertProgrammer.js.map +1 -1
  99. package/lib/programmers/CheckerProgrammer.js +78 -60
  100. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  101. package/lib/programmers/FeatureProgrammer.d.ts +4 -6
  102. package/lib/programmers/FeatureProgrammer.js +7 -7
  103. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  104. package/lib/programmers/IsProgrammer.d.ts +1 -1
  105. package/lib/programmers/IsProgrammer.js +33 -20
  106. package/lib/programmers/IsProgrammer.js.map +1 -1
  107. package/lib/programmers/RandomProgrammer.js +163 -138
  108. package/lib/programmers/RandomProgrammer.js.map +1 -1
  109. package/lib/programmers/TypiaProgrammer.js +58 -28
  110. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  111. package/lib/programmers/ValidateProgrammer.js +28 -8
  112. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  113. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  114. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  115. package/lib/programmers/helpers/ICheckEntry.d.ts +3 -2
  116. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  117. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  118. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  119. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  120. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  121. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  122. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  123. package/lib/programmers/helpers/RandomRanger.js +13 -33
  124. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  125. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  126. package/lib/programmers/helpers/UnionExplorer.js +6 -6
  127. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  128. package/lib/programmers/internal/application_alias.js +0 -1
  129. package/lib/programmers/internal/application_alias.js.map +1 -1
  130. package/lib/programmers/internal/application_array.js +60 -20
  131. package/lib/programmers/internal/application_array.js.map +1 -1
  132. package/lib/programmers/internal/application_escaped.d.ts +4 -0
  133. package/lib/programmers/internal/{application_resolved.js → application_escaped.js} +4 -4
  134. package/lib/programmers/internal/application_escaped.js.map +1 -0
  135. package/lib/programmers/internal/application_number.js +95 -69
  136. package/lib/programmers/internal/application_number.js.map +1 -1
  137. package/lib/programmers/internal/application_object.js +0 -3
  138. package/lib/programmers/internal/application_object.js.map +1 -1
  139. package/lib/programmers/internal/application_schema.js +41 -24
  140. package/lib/programmers/internal/application_schema.js.map +1 -1
  141. package/lib/programmers/internal/application_string.js +56 -22
  142. package/lib/programmers/internal/application_string.js.map +1 -1
  143. package/lib/programmers/internal/check_array_length.js +25 -25
  144. package/lib/programmers/internal/check_array_length.js.map +1 -1
  145. package/lib/programmers/internal/check_bigint.js +13 -116
  146. package/lib/programmers/internal/check_bigint.js.map +1 -1
  147. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  148. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  149. package/lib/programmers/internal/check_number.js +62 -163
  150. package/lib/programmers/internal/check_number.js.map +1 -1
  151. package/lib/programmers/internal/check_string.js +16 -52
  152. package/lib/programmers/internal/check_string.js.map +1 -1
  153. package/lib/programmers/internal/check_template.js +16 -1
  154. package/lib/programmers/internal/check_template.js.map +1 -1
  155. package/lib/programmers/internal/check_union_array_like.js +4 -4
  156. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  157. package/lib/programmers/internal/feature_object_entries.js +1 -1
  158. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  159. package/lib/programmers/internal/random_custom.js +2 -2
  160. package/lib/programmers/internal/random_custom.js.map +1 -1
  161. package/lib/programmers/json/JsonApplicationProgrammer.js +5 -1
  162. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  163. package/lib/programmers/json/JsonAssertParseProgrammer.js +2 -0
  164. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  165. package/lib/programmers/json/JsonIsParseProgrammer.js +2 -0
  166. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  167. package/lib/programmers/json/JsonStringifyProgrammer.js +41 -78
  168. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  169. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -0
  170. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  171. package/lib/programmers/misc/MiscCloneProgrammer.js +26 -17
  172. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  173. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  174. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  175. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  176. package/lib/programmers/misc/MiscLiteralsProgrammer.js +10 -5
  177. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  178. package/lib/programmers/misc/MiscPruneProgrammer.js +23 -14
  179. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  180. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +24 -44
  181. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  182. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  183. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  184. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  185. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  186. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  187. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  188. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  189. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -0
  190. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  191. package/lib/schemas/metadata/Metadata.js +29 -29
  192. package/lib/schemas/metadata/Metadata.js.map +1 -1
  193. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  194. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  195. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  196. package/lib/schemas/metadata/MetadataArray.d.ts +2 -0
  197. package/lib/schemas/metadata/MetadataArray.js +45 -2
  198. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  199. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  200. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  201. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  202. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  203. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  204. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  205. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -2
  206. package/lib/schemas/metadata/MetadataTuple.js +1 -2
  207. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  208. package/lib/tags/ExclusiveMaximum.d.ts +10 -8
  209. package/lib/tags/ExclusiveMinimum.d.ts +10 -8
  210. package/lib/tags/Format.d.ts +8 -8
  211. package/lib/tags/MaxItems.d.ts +8 -8
  212. package/lib/tags/MaxLength.d.ts +8 -8
  213. package/lib/tags/Maximum.d.ts +10 -8
  214. package/lib/tags/MinItems.d.ts +8 -8
  215. package/lib/tags/MinLength.d.ts +8 -8
  216. package/lib/tags/Minimum.d.ts +10 -8
  217. package/lib/tags/MultipleOf.d.ts +10 -8
  218. package/lib/tags/Pattern.d.ts +7 -8
  219. package/lib/tags/TagBase.d.ts +10 -6
  220. package/lib/tags/Type.d.ts +14 -13
  221. package/lib/tags/index.d.ts +1 -0
  222. package/lib/tags/index.js +1 -0
  223. package/lib/tags/index.js.map +1 -1
  224. package/lib/transform.d.ts +2 -1
  225. package/lib/transform.js +11 -3
  226. package/lib/transform.js.map +1 -1
  227. package/lib/transformers/CallExpressionTransformer.d.ts +1 -1
  228. package/lib/transformers/CallExpressionTransformer.js +2 -1
  229. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  230. package/lib/transformers/FileTransformer.js +18 -6
  231. package/lib/transformers/FileTransformer.js.map +1 -1
  232. package/lib/transformers/IProject.d.ts +3 -0
  233. package/lib/transformers/NodeTransformer.d.ts +1 -1
  234. package/lib/transformers/TransformerError.d.ts +12 -0
  235. package/lib/transformers/TransformerError.js +66 -0
  236. package/lib/transformers/TransformerError.js.map +1 -0
  237. package/lib/transformers/features/AssertTransformer.d.ts +1 -0
  238. package/lib/transformers/features/CreateAssertTransformer.d.ts +1 -0
  239. package/lib/transformers/features/CreateIsTransformer.d.ts +1 -0
  240. package/lib/transformers/features/CreateRandomTransformer.js +9 -4
  241. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  242. package/lib/transformers/features/CreateValidateTransformer.d.ts +1 -0
  243. package/lib/transformers/features/IsTransformer.d.ts +1 -0
  244. package/lib/transformers/features/RandomTransformer.js +9 -4
  245. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  246. package/lib/transformers/features/ValidateTransformer.d.ts +1 -0
  247. package/lib/transformers/features/json/JsonApplicationTransformer.js +79 -19
  248. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  249. package/lib/transformers/features/json/JsonAssertParseTransformer.d.ts +1 -0
  250. package/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts +1 -0
  251. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts +1 -0
  252. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts +1 -0
  253. package/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts +1 -0
  254. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts +1 -0
  255. package/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts +1 -0
  256. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts +1 -0
  257. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts +1 -0
  258. package/lib/transformers/features/json/JsonIsParseTransformer.d.ts +1 -0
  259. package/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts +1 -0
  260. package/lib/transformers/features/json/JsonStringifyTransformer.d.ts +1 -0
  261. package/lib/transformers/features/json/JsonValidateParseTransformer.d.ts +1 -0
  262. package/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts +1 -0
  263. package/lib/transformers/features/misc/MetadataTransformer.js +13 -5
  264. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  265. package/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts +1 -0
  266. package/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts +1 -0
  267. package/lib/transformers/features/misc/MiscCloneTransformer.d.ts +1 -0
  268. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts +1 -0
  269. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts +1 -0
  270. package/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts +1 -0
  271. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts +1 -0
  272. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts +1 -0
  273. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  274. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  275. package/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts +1 -0
  276. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts +1 -0
  277. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts +1 -0
  278. package/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts +1 -0
  279. package/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts +1 -0
  280. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  281. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  282. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +9 -4
  283. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  284. package/lib/transformers/features/misc/MiscPruneTransformer.d.ts +1 -0
  285. package/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts +1 -0
  286. package/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts +1 -0
  287. package/lib/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.d.ts +1 -0
  288. package/lib/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.d.ts +1 -0
  289. package/lib/transformers/features/protobuf/CreateProtobufDecodeTransformer.d.ts +1 -0
  290. package/lib/transformers/features/protobuf/CreateProtobufEncodeTransformer.d.ts +1 -0
  291. package/lib/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.d.ts +1 -0
  292. package/lib/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.d.ts +1 -0
  293. package/lib/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.d.ts +1 -0
  294. package/lib/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.d.ts +1 -0
  295. package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts +1 -0
  296. package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts +1 -0
  297. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts +1 -0
  298. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts +1 -0
  299. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts +1 -0
  300. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts +1 -0
  301. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +9 -2
  302. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  303. package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts +1 -0
  304. package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts +1 -0
  305. package/lib/transformers/internal/GenericTransformer.js +17 -4
  306. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  307. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  308. package/lib/{schemas/metadata/ICommentTag.js → typings/ProtobufAtomic.js} +1 -1
  309. package/lib/typings/ProtobufAtomic.js.map +1 -0
  310. package/lib/typings/ValidationPipe.d.ts +7 -0
  311. package/lib/{schemas/metadata/IMetadataCommentTag.js → typings/ValidationPipe.js} +1 -1
  312. package/lib/typings/ValidationPipe.js.map +1 -0
  313. package/package.json +4 -2
  314. package/src/IRandomGenerator.ts +4 -3
  315. package/src/executable/TypiaGenerateWizard.ts +1 -1
  316. package/src/executable/TypiaSetupWizard.ts +1 -1
  317. package/src/executable/setup/PackageManager.ts +1 -1
  318. package/src/executable/setup/PluginConfigurator.ts +2 -2
  319. package/src/factories/ExpressionFactory.ts +4 -4
  320. package/src/factories/JsonMetadataFactory.ts +43 -0
  321. package/src/factories/LiteralFactory.ts +11 -3
  322. package/src/factories/MetadataCollection.ts +0 -6
  323. package/src/factories/MetadataCommentTagFactory.ts +629 -0
  324. package/src/factories/MetadataFactory.ts +169 -7
  325. package/src/factories/MetadataTypeTagFactory.ts +313 -0
  326. package/src/factories/NumericRangeFactory.ts +33 -0
  327. package/src/factories/ProtobufFactory.ts +106 -99
  328. package/src/factories/TypeFactory.ts +0 -5
  329. package/src/factories/internal/metadata/emend_metadata_atomics.ts +6 -1
  330. package/src/factories/internal/metadata/emplace_metadata_alias.ts +12 -11
  331. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +12 -5
  332. package/src/factories/internal/metadata/emplace_metadata_object.ts +20 -6
  333. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +12 -2
  334. package/src/factories/internal/metadata/explore_metadata.ts +5 -11
  335. package/src/factories/internal/metadata/iterate_metadata.ts +44 -24
  336. package/src/factories/internal/metadata/iterate_metadata_alias.ts +7 -2
  337. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -2
  338. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +2 -1
  339. package/src/factories/internal/metadata/iterate_metadata_collection.ts +30 -29
  340. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +22 -27
  341. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +44 -25
  342. package/src/factories/internal/metadata/iterate_metadata_map.ts +20 -4
  343. package/src/factories/internal/metadata/iterate_metadata_object.ts +2 -1
  344. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +15 -12
  345. package/src/factories/internal/metadata/iterate_metadata_set.ts +11 -2
  346. package/src/factories/internal/metadata/iterate_metadata_template.ts +12 -3
  347. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -2
  348. package/src/factories/internal/metadata/iterate_metadata_union.ts +10 -7
  349. package/src/functional/Namespace.ts +0 -16
  350. package/src/programmers/AssertProgrammer.ts +57 -21
  351. package/src/programmers/CheckerProgrammer.ts +51 -120
  352. package/src/programmers/FeatureProgrammer.ts +15 -34
  353. package/src/programmers/IsProgrammer.ts +53 -42
  354. package/src/programmers/RandomProgrammer.ts +223 -242
  355. package/src/programmers/TypiaProgrammer.ts +27 -2
  356. package/src/programmers/ValidateProgrammer.ts +60 -21
  357. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  358. package/src/programmers/helpers/ICheckEntry.ts +3 -2
  359. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  360. package/src/programmers/helpers/RandomJoiner.ts +11 -37
  361. package/src/programmers/helpers/RandomRanger.ts +16 -51
  362. package/src/programmers/helpers/UnionExplorer.ts +1 -20
  363. package/src/programmers/internal/application_alias.ts +0 -1
  364. package/src/programmers/internal/application_array.ts +32 -10
  365. package/src/programmers/internal/{application_resolved.ts → application_escaped.ts} +1 -1
  366. package/src/programmers/internal/application_number.ts +76 -70
  367. package/src/programmers/internal/application_object.ts +0 -3
  368. package/src/programmers/internal/application_schema.ts +40 -22
  369. package/src/programmers/internal/application_string.ts +33 -27
  370. package/src/programmers/internal/check_array_length.ts +34 -28
  371. package/src/programmers/internal/check_bigint.ts +25 -118
  372. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  373. package/src/programmers/internal/check_number.ts +81 -261
  374. package/src/programmers/internal/check_string.ts +28 -39
  375. package/src/programmers/internal/check_template.ts +17 -1
  376. package/src/programmers/internal/check_union_array_like.ts +1 -16
  377. package/src/programmers/internal/feature_object_entries.ts +12 -18
  378. package/src/programmers/internal/random_custom.ts +3 -3
  379. package/src/programmers/json/JsonApplicationProgrammer.ts +6 -3
  380. package/src/programmers/json/JsonAssertParseProgrammer.ts +7 -2
  381. package/src/programmers/json/JsonIsParseProgrammer.ts +7 -2
  382. package/src/programmers/json/JsonStringifyProgrammer.ts +32 -73
  383. package/src/programmers/json/JsonValidateParseProgrammer.ts +7 -2
  384. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +1 -1
  385. package/src/programmers/misc/MiscCloneProgrammer.ts +24 -35
  386. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  387. package/src/programmers/misc/MiscLiteralsProgrammer.ts +11 -6
  388. package/src/programmers/misc/MiscPruneProgrammer.ts +16 -20
  389. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +34 -68
  390. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +153 -98
  391. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  392. package/src/schemas/json/IJsonSchema.ts +11 -38
  393. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  394. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  395. package/src/schemas/metadata/IMetadataTypeTag.ts +2 -0
  396. package/src/schemas/metadata/Metadata.ts +32 -46
  397. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  398. package/src/schemas/metadata/MetadataArray.ts +21 -3
  399. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  400. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  401. package/src/schemas/metadata/MetadataTuple.ts +5 -4
  402. package/src/tags/ExclusiveMaximum.ts +13 -8
  403. package/src/tags/ExclusiveMinimum.ts +13 -8
  404. package/src/tags/Format.ts +21 -20
  405. package/src/tags/MaxItems.ts +9 -8
  406. package/src/tags/MaxLength.ts +9 -8
  407. package/src/tags/Maximum.ts +13 -8
  408. package/src/tags/MinItems.ts +9 -8
  409. package/src/tags/MinLength.ts +9 -8
  410. package/src/tags/Minimum.ts +13 -8
  411. package/src/tags/MultipleOf.ts +15 -10
  412. package/src/tags/Pattern.ts +8 -8
  413. package/src/tags/TagBase.ts +18 -13
  414. package/src/tags/Type.ts +26 -29
  415. package/src/tags/index.ts +1 -0
  416. package/src/transform.ts +13 -5
  417. package/src/transformers/CallExpressionTransformer.ts +6 -3
  418. package/src/transformers/FileTransformer.ts +25 -13
  419. package/src/transformers/IProject.ts +3 -0
  420. package/src/transformers/NodeTransformer.ts +1 -1
  421. package/src/transformers/TransformerError.ts +55 -0
  422. package/src/transformers/features/CreateRandomTransformer.ts +11 -7
  423. package/src/transformers/features/RandomTransformer.ts +11 -7
  424. package/src/transformers/features/json/JsonApplicationTransformer.ts +39 -35
  425. package/src/transformers/features/misc/MetadataTransformer.ts +18 -10
  426. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  427. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  428. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +11 -7
  429. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +9 -7
  430. package/src/transformers/internal/GenericTransformer.ts +17 -10
  431. package/src/typings/ProtobufAtomic.ts +19 -0
  432. package/src/typings/ValidationPipe.ts +9 -0
  433. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  434. package/lib/factories/MetadataTagFactory.js +0 -312
  435. package/lib/factories/MetadataTagFactory.js.map +0 -1
  436. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +0 -3
  437. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +0 -157
  438. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +0 -1
  439. package/lib/functional/$is_custom.d.ts +0 -2
  440. package/lib/functional/$is_custom.js +0 -13
  441. package/lib/functional/$is_custom.js.map +0 -1
  442. package/lib/functional/$is_date.d.ts +0 -1
  443. package/lib/functional/$is_date.js +0 -7
  444. package/lib/functional/$is_date.js.map +0 -1
  445. package/lib/functional/$is_datetime.d.ts +0 -1
  446. package/lib/functional/$is_datetime.js +0 -8
  447. package/lib/functional/$is_datetime.js.map +0 -1
  448. package/lib/functional/$is_email.d.ts +0 -1
  449. package/lib/functional/$is_email.js +0 -7
  450. package/lib/functional/$is_email.js.map +0 -1
  451. package/lib/functional/$is_ipv4.d.ts +0 -1
  452. package/lib/functional/$is_ipv4.js +0 -7
  453. package/lib/functional/$is_ipv4.js.map +0 -1
  454. package/lib/functional/$is_ipv6.d.ts +0 -1
  455. package/lib/functional/$is_ipv6.js +0 -7
  456. package/lib/functional/$is_ipv6.js.map +0 -1
  457. package/lib/functional/$is_url.d.ts +0 -1
  458. package/lib/functional/$is_url.js +0 -7
  459. package/lib/functional/$is_url.js.map +0 -1
  460. package/lib/functional/$is_uuid.d.ts +0 -1
  461. package/lib/functional/$is_uuid.js +0 -7
  462. package/lib/functional/$is_uuid.js.map +0 -1
  463. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  464. package/lib/programmers/internal/application_resolved.d.ts +0 -4
  465. package/lib/programmers/internal/application_resolved.js.map +0 -1
  466. package/lib/programmers/internal/check_array_tags.js +0 -39
  467. package/lib/programmers/internal/check_array_tags.js.map +0 -1
  468. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  469. package/lib/programmers/internal/check_string_tags.js +0 -89
  470. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  471. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  472. package/lib/programmers/internal/get_comment_tags.js +0 -25
  473. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  474. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  475. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  476. package/lib/schemas/metadata/IMetadataCommentTag.d.ts +0 -63
  477. package/lib/schemas/metadata/IMetadataCommentTag.js.map +0 -1
  478. package/src/factories/MetadataTagFactory.ts +0 -365
  479. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +0 -183
  480. package/src/functional/$is_custom.ts +0 -14
  481. package/src/functional/$is_date.ts +0 -3
  482. package/src/functional/$is_datetime.ts +0 -2
  483. package/src/functional/$is_email.ts +0 -4
  484. package/src/functional/$is_ipv4.ts +0 -4
  485. package/src/functional/$is_ipv6.ts +0 -4
  486. package/src/functional/$is_url.ts +0 -4
  487. package/src/functional/$is_uuid.ts +0 -4
  488. package/src/programmers/internal/check_array_tags.ts +0 -45
  489. package/src/programmers/internal/check_string_tags.ts +0 -67
  490. package/src/programmers/internal/get_comment_tags.ts +0 -23
  491. package/src/schemas/metadata/ICommentTag.ts +0 -4
  492. package/src/schemas/metadata/IMetadataCommentTag.ts +0 -112
  493. /package/lib/{programmers/internal/check_array_tags.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -8,16 +8,18 @@ import { StatementFactory } from "../factories/StatementFactory";
8
8
  import { TemplateFactory } from "../factories/TemplateFactory";
9
9
  import { TypeFactory } from "../factories/TypeFactory";
10
10
 
11
- import { ICommentTag } from "../schemas/metadata/ICommentTag";
12
- import { IMetadataCommentTag } from "../schemas/metadata/IMetadataCommentTag";
13
11
  import { Metadata } from "../schemas/metadata/Metadata";
14
12
  import { MetadataArray } from "../schemas/metadata/MetadataArray";
15
13
  import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
14
+ import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
16
15
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
17
16
  import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
18
17
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
19
18
 
20
19
  import { IProject } from "../transformers/IProject";
20
+ import { TransformerError } from "../transformers/TransformerError";
21
+
22
+ import { Escaper } from "../utils/Escaper";
21
23
 
22
24
  import { FunctionImporter } from "./helpers/FunctionImporeter";
23
25
  import { RandomJoiner } from "./helpers/RandomJoiner";
@@ -35,23 +37,23 @@ export namespace RandomProgrammer {
35
37
  return (type: ts.Type, name?: string) => {
36
38
  // INITIALIZE METADATA
37
39
  const collection: MetadataCollection = new MetadataCollection();
38
- const meta: Metadata = MetadataFactory.analyze(project.checker)(
39
- {
40
- escape: false,
41
- constant: true,
42
- absorb: true,
43
- validate: (meta) => {
44
- if (meta.natives.some((n) => n === "WeakSet"))
45
- throw new Error(
46
- `Error on ${modulo.getText()}(): WeakSet is not supported.`,
47
- );
48
- else if (meta.natives.some((n) => n === "WeakMap"))
49
- throw new Error(
50
- `Error on ${modulo.getText()}(): WeakMap is not supported.`,
51
- );
52
- },
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;
53
51
  },
54
- )(collection)(type);
52
+ })(collection)(type);
53
+ if (result.success === false)
54
+ throw TransformerError.from(`typia.${importer.method}`)(
55
+ result.errors,
56
+ );
55
57
 
56
58
  // GENERATE FUNCTION
57
59
  const functions = {
@@ -63,7 +65,7 @@ export namespace RandomProgrammer {
63
65
  const output: ts.Expression = decode(importer)({
64
66
  function: false,
65
67
  recursive: false,
66
- })(meta, [], []);
68
+ })(result.data);
67
69
 
68
70
  return ts.factory.createArrowFunction(
69
71
  undefined,
@@ -176,8 +178,6 @@ export namespace RandomProgrammer {
176
178
  function: true,
177
179
  })(ts.factory.createIdentifier("length"))(
178
180
  array.value,
179
- [],
180
- [],
181
181
  ),
182
182
  ),
183
183
  ),
@@ -214,7 +214,7 @@ export namespace RandomProgrammer {
214
214
  function: true,
215
215
  recursive: true,
216
216
  }),
217
- )(tuple.elements, [], []),
217
+ )(tuple.elements),
218
218
  ),
219
219
  ),
220
220
  );
@@ -225,11 +225,7 @@ export namespace RandomProgrammer {
225
225
  const decode =
226
226
  (importer: FunctionImporter) =>
227
227
  (explore: IExplore) =>
228
- (
229
- meta: Metadata,
230
- tags: IMetadataCommentTag[],
231
- comments: ICommentTag[],
232
- ): ts.Expression => {
228
+ (meta: Metadata): ts.Expression => {
233
229
  const expressions: ts.Expression[] = [];
234
230
  if (meta.any)
235
231
  expressions.push(
@@ -250,47 +246,33 @@ export namespace RandomProgrammer {
250
246
  // ATOMIC VARIABLES
251
247
  for (const template of meta.templates)
252
248
  expressions.push(decode_template(importer)(explore)(template));
253
- for (const a of meta.atomics)
254
- if (a.type === "boolean")
249
+ for (const atomic of meta.atomics)
250
+ if (atomic.type === "boolean")
255
251
  expressions.push(decode_boolean(importer));
256
- else if (a.type === "number")
257
- expressions.push(decode_number(importer)(tags, comments));
258
- else if (a.type === "string")
259
- expressions.push(decode_string(importer)(tags, comments));
260
- else if (a.type === "bigint")
261
- expressions.push(decode_bigint(importer)(tags, comments));
252
+ else if (atomic.type === "number")
253
+ expressions.push(...decode_number(importer)(atomic));
254
+ else if (atomic.type === "string")
255
+ expressions.push(...decode_string(importer)(atomic));
256
+ else if (atomic.type === "bigint")
257
+ expressions.push(...decode_bigint(importer)(atomic));
262
258
 
263
259
  // INSTANCE TYPES
264
260
  if (meta.escaped)
265
261
  expressions.push(
266
- decode(importer)(explore)(
267
- meta.escaped.returns,
268
- tags,
269
- comments,
270
- ),
262
+ decode(importer)(explore)(meta.escaped.returns),
271
263
  );
272
264
  for (const array of meta.arrays)
273
- expressions.push(
274
- decode_array(importer)(explore)(array, tags, comments),
275
- );
265
+ expressions.push(...decode_array(importer)(explore)(array));
276
266
  for (const tuple of meta.tuples)
277
- expressions.push(
278
- decode_tuple(importer)(explore)(tuple, tags, comments),
279
- );
267
+ expressions.push(decode_tuple(importer)(explore)(tuple));
280
268
  for (const o of meta.objects)
281
269
  expressions.push(decode_object(importer)(explore)(o));
282
270
  for (const native of meta.natives)
283
- expressions.push(
284
- decode_native(importer)(native, tags, comments),
285
- );
271
+ expressions.push(decode_native(importer)(native));
286
272
  for (const set of meta.sets)
287
- expressions.push(
288
- decode_set(importer)(explore)(set, tags, comments),
289
- );
273
+ expressions.push(decode_set(importer)(explore)(set));
290
274
  for (const map of meta.maps)
291
- expressions.push(
292
- decode_map(importer)(explore)(map, tags, comments),
293
- );
275
+ expressions.push(decode_map(importer)(explore)(map));
294
276
 
295
277
  // PICK UP A TYPE
296
278
  if (expressions.length === 1) return expressions[0]!;
@@ -340,188 +322,186 @@ export namespace RandomProgrammer {
340
322
  (explore: IExplore) =>
341
323
  (template: Metadata[]) =>
342
324
  TemplateFactory.generate(
343
- template.map((meta) => decode(importer)(explore)(meta, [], [])),
325
+ template.map((meta) => decode(importer)(explore)(meta)),
344
326
  );
345
327
 
346
328
  const decode_number =
347
329
  (importer: FunctionImporter) =>
348
- (
349
- tags: IMetadataCommentTag[],
350
- comments: ICommentTag[],
351
- ): ts.Expression => {
352
- const type = tags.find(
353
- (t) =>
354
- t.kind === "type" &&
355
- (t.value === "int" ||
356
- t.value === "int32" ||
357
- t.value === "int64"),
358
- )
359
- ? "int"
360
- : tags.find(
361
- (t) =>
362
- t.kind === "type" &&
363
- (t.value === "uint" ||
364
- t.value === "uint32" ||
365
- t.value === "uint64"),
366
- )
367
- ? "uint"
368
- : "double";
369
- return random_custom(COALESCE(importer))("number")(comments)(
370
- RandomRanger.number({
371
- type,
372
- transform: (value) =>
373
- ts.factory.createNumericLiteral(value),
374
- setter: (args) =>
375
- ts.factory.createCallExpression(
376
- type === "double" &&
377
- tags.every(
378
- (t) =>
379
- t.kind !== "multipleOf" &&
380
- t.kind !== "step",
381
- )
382
- ? COALESCE(importer)("number")
383
- : COALESCE(importer)("integer"),
384
- undefined,
385
- args.map((val) =>
386
- ts.factory.createNumericLiteral(val),
330
+ (atomic: MetadataAtomic): ts.Expression[] =>
331
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) => {
332
+ const type = tags.find(
333
+ (t) =>
334
+ t.kind === "type" &&
335
+ (t.value === "int32" || t.value === "int64"),
336
+ )
337
+ ? "int"
338
+ : tags.find(
339
+ (t) =>
340
+ t.kind === "type" &&
341
+ (t.value === "uint32" || t.value === "uint64"),
342
+ )
343
+ ? "uint"
344
+ : "double";
345
+ const multiply = tags.find((t) => t.kind === "multipleOf");
346
+ return random_custom(COALESCE(importer))("number")(tags)(
347
+ RandomRanger.number({
348
+ type,
349
+ transform: (value) =>
350
+ ts.factory.createNumericLiteral(value),
351
+ setter: (args) =>
352
+ ts.factory.createCallExpression(
353
+ type !== "double" || multiply !== undefined
354
+ ? COALESCE(importer)("integer")
355
+ : COALESCE(importer)("number"),
356
+ undefined,
357
+ args.map((val) =>
358
+ ts.factory.createNumericLiteral(val),
359
+ ),
387
360
  ),
388
- ),
389
- })({
390
- minimum: 0,
391
- maximum: 100,
392
- gap: 10,
393
- })(tags),
394
- );
395
- };
361
+ })({
362
+ minimum: 0,
363
+ maximum: 100,
364
+ gap: 10,
365
+ })(tags),
366
+ );
367
+ });
396
368
 
397
369
  const decode_bigint =
398
370
  (importer: FunctionImporter) =>
399
- (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
400
- random_custom(COALESCE(importer))("bigint")(comments)(
401
- RandomRanger.number({
402
- type: tags.find(
403
- (t) =>
404
- t.kind === "type" &&
405
- (t.value === "uint" || t.value === "uint64"),
406
- )
407
- ? "uint"
408
- : "int",
409
- transform: (value) => ExpressionFactory.bigint(value),
410
- setter: (args) =>
411
- ts.factory.createCallExpression(
412
- COALESCE(importer)("bigint"),
413
- undefined,
414
- args.map((value) =>
415
- ExpressionFactory.bigint(value),
371
+ (atomic: MetadataAtomic): ts.Expression[] =>
372
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
373
+ random_custom(COALESCE(importer))("bigint")(tags)(
374
+ RandomRanger.number({
375
+ type: tags.find(
376
+ (t) =>
377
+ t.kind === "type" &&
378
+ (t.value === "uint" || t.value === "uint64"),
379
+ )
380
+ ? "uint"
381
+ : "int",
382
+ transform: (value) => ExpressionFactory.bigint(value),
383
+ setter: (args) =>
384
+ ts.factory.createCallExpression(
385
+ COALESCE(importer)("bigint"),
386
+ undefined,
387
+ args.map((value) =>
388
+ ExpressionFactory.bigint(value),
389
+ ),
416
390
  ),
417
- ),
418
- })({
419
- minimum: 0,
420
- maximum: 100,
421
- gap: 10,
422
- })(tags),
391
+ })({
392
+ minimum: 0,
393
+ maximum: 100,
394
+ gap: 10,
395
+ })(tags),
396
+ ),
423
397
  );
424
398
 
425
399
  const decode_string =
426
400
  (importer: FunctionImporter) =>
427
- (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
428
- random_custom(COALESCE(importer))("string")(comments)(
429
- (() => {
430
- for (const t of tags)
431
- if (t.kind === "format")
432
- return ts.factory.createCallExpression(
433
- COALESCE(importer)(t.value),
434
- undefined,
435
- undefined,
436
- );
437
- else if (t.kind === "pattern")
438
- return ts.factory.createCallExpression(
439
- COALESCE(importer)("pattern"),
440
- undefined,
441
- [ts.factory.createIdentifier(`/${t.value}/`)],
442
- );
401
+ (atomic: MetadataAtomic): ts.Expression[] =>
402
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
403
+ random_custom(COALESCE(importer))("string")(tags)(
404
+ (() => {
405
+ for (const t of tags)
406
+ if (t.kind === "format")
407
+ return ts.factory.createCallExpression(
408
+ COALESCE(importer)(
409
+ t.value === "date-time"
410
+ ? "datetime"
411
+ : t.value,
412
+ ),
413
+ undefined,
414
+ undefined,
415
+ );
416
+ else if (t.kind === "pattern")
417
+ return ts.factory.createCallExpression(
418
+ COALESCE(importer)("pattern"),
419
+ undefined,
420
+ [
421
+ ts.factory.createIdentifier(
422
+ `/${t.value}/`,
423
+ ),
424
+ ],
425
+ );
443
426
 
444
- const tail = RandomRanger.length(COALESCE(importer))({
445
- minimum: 5,
446
- maximum: 25,
447
- gap: 5,
448
- })({
449
- fixed: "length",
450
- minimum: "minLength",
451
- maximum: "maxLength",
452
- })(tags);
453
- return ts.factory.createCallExpression(
454
- COALESCE(importer)("string"),
455
- undefined,
456
- tail ? [tail] : undefined,
457
- );
458
- })(),
427
+ const tail = RandomRanger.length(COALESCE(importer))({
428
+ minimum: 5,
429
+ maximum: 25,
430
+ gap: 5,
431
+ })({
432
+ minimum: "minLength",
433
+ maximum: "maxLength",
434
+ })(tags);
435
+ return ts.factory.createCallExpression(
436
+ COALESCE(importer)("string"),
437
+ undefined,
438
+ tail ? [tail] : undefined,
439
+ );
440
+ })(),
441
+ ),
459
442
  );
460
443
 
461
444
  const decode_array =
462
445
  (importer: FunctionImporter) =>
463
446
  (explore: IExplore) =>
464
- (
465
- array: MetadataArray,
466
- tags: IMetadataCommentTag[],
467
- comments: ICommentTag[],
468
- ) => {
469
- const length: ts.Expression | undefined = RandomRanger.length(
470
- COALESCE(importer),
471
- )({
472
- minimum: 0,
473
- maximum: 3,
474
- gap: 3,
475
- })({
476
- fixed: "items",
477
- minimum: "minItems",
478
- maximum: "maxItems",
479
- })(tags);
447
+ (array: MetadataArray): ts.Expression[] => {
448
+ const lengths: Array<ts.Expression | undefined> = (
449
+ array.tags.length ? array.tags : [[]]
450
+ ).map((tags) =>
451
+ RandomRanger.length(COALESCE(importer))({
452
+ minimum: 0,
453
+ maximum: 3,
454
+ gap: 3,
455
+ })({
456
+ minimum: "minItems",
457
+ maximum: "maxItems",
458
+ })(tags),
459
+ );
480
460
  if (array.type.recursive)
481
- return ts.factory.createCallExpression(
482
- ts.factory.createIdentifier(
483
- importer.useLocal(PREFIX.array(array.type.index!)),
461
+ return lengths.map((len) =>
462
+ ts.factory.createCallExpression(
463
+ ts.factory.createIdentifier(
464
+ importer.useLocal(PREFIX.array(array.type.index!)),
465
+ ),
466
+ undefined,
467
+ [
468
+ len ?? COALESCE(importer)("length"),
469
+ ts.factory.createTrue(),
470
+ explore.recursive
471
+ ? ts.factory.createAdd(
472
+ ts.factory.createNumericLiteral(1),
473
+ ts.factory.createIdentifier("_depth"),
474
+ )
475
+ : ts.factory.createNumericLiteral(0),
476
+ ],
484
477
  ),
485
- undefined,
486
- [
487
- length ?? COALESCE(importer)("length"),
488
- ts.factory.createTrue(),
489
- explore.recursive
490
- ? ts.factory.createAdd(
491
- ts.factory.createNumericLiteral(1),
492
- ts.factory.createIdentifier("_depth"),
493
- )
494
- : ts.factory.createNumericLiteral(0),
495
- ],
496
478
  );
497
- const expr: ts.Expression = RandomJoiner.array(COALESCE(importer))(
498
- decode(importer)(explore),
499
- )(explore)(length)(array.type.value, tags, comments);
500
- return explore.recursive
501
- ? ts.factory.createConditionalExpression(
502
- ts.factory.createLogicalAnd(
503
- ts.factory.createIdentifier("_recursive"),
504
- ts.factory.createLessThan(
505
- ts.factory.createNumericLiteral(5),
506
- ts.factory.createIdentifier("_depth"),
479
+ return lengths.map((len) => {
480
+ const expr: ts.Expression = RandomJoiner.array(
481
+ COALESCE(importer),
482
+ )(decode(importer)(explore))(explore)(len)(array.type.value);
483
+ return explore.recursive
484
+ ? ts.factory.createConditionalExpression(
485
+ ts.factory.createLogicalAnd(
486
+ ts.factory.createIdentifier("_recursive"),
487
+ ts.factory.createLessThan(
488
+ ts.factory.createNumericLiteral(5),
489
+ ts.factory.createIdentifier("_depth"),
490
+ ),
507
491
  ),
508
- ),
509
- undefined,
510
- ts.factory.createIdentifier("[]"),
511
- undefined,
512
- expr,
513
- )
514
- : expr;
492
+ undefined,
493
+ ts.factory.createIdentifier("[]"),
494
+ undefined,
495
+ expr,
496
+ )
497
+ : expr;
498
+ });
515
499
  };
516
500
 
517
501
  const decode_tuple =
518
502
  (importer: FunctionImporter) =>
519
503
  (explore: IExplore) =>
520
- (
521
- tuple: MetadataTuple,
522
- tags: IMetadataCommentTag[],
523
- comments: ICommentTag[],
524
- ): ts.Expression =>
504
+ (tuple: MetadataTuple): ts.Expression =>
525
505
  tuple.type.recursive
526
506
  ? ts.factory.createCallExpression(
527
507
  ts.factory.createIdentifier(
@@ -540,8 +520,6 @@ export namespace RandomProgrammer {
540
520
  )
541
521
  : RandomJoiner.tuple(decode(importer)(explore))(
542
522
  tuple.type.elements,
543
- tags,
544
- comments,
545
523
  );
546
524
 
547
525
  const decode_object =
@@ -578,11 +556,7 @@ export namespace RandomProgrammer {
578
556
  const decode_set =
579
557
  (importer: FunctionImporter) =>
580
558
  (explore: IExplore) =>
581
- (
582
- meta: Metadata,
583
- tags: IMetadataCommentTag[],
584
- comments: ICommentTag[],
585
- ) =>
559
+ (meta: Metadata) =>
586
560
  ts.factory.createNewExpression(
587
561
  ts.factory.createIdentifier("Set"),
588
562
  undefined,
@@ -598,20 +572,14 @@ export namespace RandomProgrammer {
598
572
  name: `Set<${meta.getName()}>`,
599
573
  }),
600
574
  }),
601
- tags,
602
- comments,
603
- ),
575
+ )[0]!,
604
576
  ],
605
577
  );
606
578
 
607
579
  const decode_map =
608
580
  (importer: FunctionImporter) =>
609
581
  (explore: IExplore) =>
610
- (
611
- m: Metadata.Entry,
612
- tags: IMetadataCommentTag[],
613
- comments: ICommentTag[],
614
- ) =>
582
+ (map: Metadata.Entry) =>
615
583
  ts.factory.createNewExpression(
616
584
  ts.factory.createIdentifier("Map"),
617
585
  undefined,
@@ -620,7 +588,7 @@ export namespace RandomProgrammer {
620
588
  MetadataArray.create({
621
589
  tags: [],
622
590
  type: MetadataArrayType.create({
623
- name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
591
+ name: `Map<${map.key.getName()}, ${map.value.getName()}>`,
624
592
  index: null,
625
593
  recursive: false,
626
594
  nullables: [],
@@ -630,11 +598,14 @@ export namespace RandomProgrammer {
630
598
  (() => {
631
599
  const type =
632
600
  MetadataTupleType.create({
633
- name: `[${m.key.getName()}, ${m.value.getName()}]`,
601
+ name: `[${map.key.getName()}, ${map.value.getName()}]`,
634
602
  index: null,
635
603
  recursive: false,
636
604
  nullables: [],
637
- elements: [m.key, m.value],
605
+ elements: [
606
+ map.key,
607
+ map.value,
608
+ ],
638
609
  });
639
610
  type.of_map = true;
640
611
  return MetadataTuple.create({
@@ -646,24 +617,28 @@ export namespace RandomProgrammer {
646
617
  }),
647
618
  }),
648
619
  }),
649
- tags,
650
- comments,
651
- ),
620
+ )[0]!,
652
621
  ],
653
622
  );
654
623
 
655
624
  const decode_native =
656
625
  (importer: FunctionImporter) =>
657
- (
658
- type: string,
659
- tags: IMetadataCommentTag[],
660
- comments: ICommentTag[],
661
- ): ts.Expression => {
626
+ (type: string): ts.Expression => {
662
627
  if (type === "Boolean") return decode_boolean(importer);
663
628
  else if (type === "Number")
664
- return decode_number(importer)(tags, comments);
629
+ return decode_number(importer)(
630
+ MetadataAtomic.create({
631
+ type: "number",
632
+ tags: [],
633
+ }),
634
+ )[0]!;
665
635
  else if (type === "String")
666
- return decode_string(importer)(tags, comments);
636
+ return decode_string(importer)(
637
+ MetadataAtomic.create({
638
+ type: "string",
639
+ tags: [],
640
+ }),
641
+ )[0]!;
667
642
  else if (type === "Date") return decode_native_date(importer);
668
643
  else if (
669
644
  type === "Uint8Array" ||
@@ -889,9 +864,15 @@ const PREFIX = {
889
864
 
890
865
  const COALESCE = (importer: FunctionImporter) => (name: string) =>
891
866
  ExpressionFactory.coalesce(
892
- ts.factory.createPropertyAccessChain(
893
- ts.factory.createIdentifier("generator"),
894
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
895
- ts.factory.createIdentifier(name),
896
- ),
867
+ Escaper.variable(name)
868
+ ? ts.factory.createPropertyAccessChain(
869
+ ts.factory.createIdentifier("generator"),
870
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
871
+ ts.factory.createIdentifier(name),
872
+ )
873
+ : ts.factory.createElementAccessChain(
874
+ ts.factory.createIdentifier("generator"),
875
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
876
+ ts.factory.createStringLiteral(name),
877
+ ),
897
878
  )(IdentifierFactory.access(importer.use("generator"))(name));