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
@@ -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,
@@ -34,29 +34,68 @@ export namespace ValidateProgrammer {
34
34
  trace: true,
35
35
  numeric: OptionPredicator.numeric(project.options),
36
36
  equals,
37
- atomist: (explore) => (tuple) => (input) =>
37
+ atomist: (explore) => (entry) => (input) =>
38
38
  [
39
- ...(tuple.expression ? [tuple.expression] : []),
40
- ...tuple.tags.map((tag) =>
41
- ts.factory.createLogicalOr(
42
- tag.expression,
43
- create_report_call(
44
- explore.from === "top"
45
- ? ts.factory.createTrue()
46
- : ts.factory.createIdentifier(
47
- "_exceptionable",
39
+ ...(entry.expression ? [entry.expression] : []),
40
+ ...(entry.conditions.length === 0
41
+ ? []
42
+ : entry.conditions.length === 1
43
+ ? entry.conditions[0]!.map((cond) =>
44
+ ts.factory.createLogicalOr(
45
+ cond.expression,
46
+ create_report_call(
47
+ explore.from === "top"
48
+ ? ts.factory.createTrue()
49
+ : ts.factory.createIdentifier(
50
+ "_exceptionable",
51
+ ),
52
+ )(
53
+ ts.factory.createIdentifier(
54
+ explore.postfix
55
+ ? `_path + ${explore.postfix}`
56
+ : "_path",
48
57
  ),
49
- )(
50
- ts.factory.createIdentifier(
51
- explore.postfix
52
- ? `_path + ${explore.postfix}`
53
- : "_path",
54
- ),
55
- tag.expected,
56
- input,
57
- ),
58
- ),
59
- ),
58
+ cond.expected,
59
+ input,
60
+ ),
61
+ ),
62
+ )
63
+ : [
64
+ ts.factory.createLogicalOr(
65
+ entry.conditions
66
+ .map((set) =>
67
+ set
68
+ .map((s) => s.expression)
69
+ .reduce((a, b) =>
70
+ ts.factory.createLogicalAnd(
71
+ a,
72
+ b,
73
+ ),
74
+ ),
75
+ )
76
+ .reduce((a, b) =>
77
+ ts.factory.createLogicalOr(
78
+ a,
79
+ b,
80
+ ),
81
+ ),
82
+ create_report_call(
83
+ explore.from === "top"
84
+ ? ts.factory.createTrue()
85
+ : ts.factory.createIdentifier(
86
+ "_exceptionable",
87
+ ),
88
+ )(
89
+ ts.factory.createIdentifier(
90
+ explore.postfix
91
+ ? `_path + ${explore.postfix}`
92
+ : "_path",
93
+ ),
94
+ entry.expected,
95
+ input,
96
+ ),
97
+ ),
98
+ ]),
60
99
  ].reduce((x, y) => ts.factory.createLogicalAnd(x, y)),
61
100
  combiner: combine(equals)(importer),
62
101
  joiner: joiner(equals)(importer),
@@ -1,5 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
3
4
  import { StatementFactory } from "../../factories/StatementFactory";
4
5
  import { TypeFactory } from "../../factories/TypeFactory";
5
6
 
@@ -34,30 +35,66 @@ export namespace CloneJoiner {
34
35
  const key = ts.factory.createIdentifier("key");
35
36
  const output = ts.factory.createIdentifier("output");
36
37
 
37
- const statements: ts.Statement[] = dynamic.map((entry) =>
38
- ts.factory.createIfStatement(
39
- ts.factory.createCallExpression(
40
- ts.factory.createIdentifier(
41
- `RegExp(/${metadata_to_pattern(true)(
42
- entry.key,
43
- )}/).test`,
38
+ const statements: ts.Statement[] = [];
39
+ if (regular.length !== 0)
40
+ statements.push(
41
+ ts.factory.createIfStatement(
42
+ ts.factory.createCallExpression(
43
+ IdentifierFactory.access(
44
+ ts.factory.createArrayLiteralExpression(
45
+ regular.map((r) =>
46
+ ts.factory.createStringLiteral(
47
+ r.key.getSoleLiteral()!,
48
+ ),
49
+ ),
50
+ ),
51
+ )("some"),
52
+ undefined,
53
+ [
54
+ ts.factory.createArrowFunction(
55
+ undefined,
56
+ undefined,
57
+ [IdentifierFactory.parameter("regular")],
58
+ undefined,
59
+ undefined,
60
+ ts.factory.createStrictEquality(
61
+ ts.factory.createIdentifier("regular"),
62
+ ts.factory.createIdentifier("key"),
63
+ ),
64
+ ),
65
+ ],
44
66
  ),
45
- undefined,
46
- [key],
67
+ ts.factory.createContinueStatement(),
47
68
  ),
48
- ts.factory.createBlock([
49
- ts.factory.createExpressionStatement(
50
- ts.factory.createBinaryExpression(
51
- ts.factory.createElementAccessExpression(
52
- output,
53
- key,
54
- ),
55
- ts.factory.createToken(ts.SyntaxKind.EqualsToken),
56
- entry.expression,
69
+ );
70
+ statements.push(
71
+ ...dynamic.map((entry) =>
72
+ ts.factory.createIfStatement(
73
+ ts.factory.createCallExpression(
74
+ ts.factory.createIdentifier(
75
+ `RegExp(/${metadata_to_pattern(true)(
76
+ entry.key,
77
+ )}/).test`,
57
78
  ),
79
+ undefined,
80
+ [key],
58
81
  ),
59
- ts.factory.createContinueStatement(),
60
- ]),
82
+ ts.factory.createBlock([
83
+ ts.factory.createExpressionStatement(
84
+ ts.factory.createBinaryExpression(
85
+ ts.factory.createElementAccessExpression(
86
+ output,
87
+ key,
88
+ ),
89
+ ts.factory.createToken(
90
+ ts.SyntaxKind.EqualsToken,
91
+ ),
92
+ entry.expression,
93
+ ),
94
+ ),
95
+ ts.factory.createContinueStatement(),
96
+ ]),
97
+ ),
61
98
  ),
62
99
  );
63
100
 
@@ -1,11 +1,12 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  export interface ICheckEntry {
4
+ expected: string;
4
5
  expression: ts.Expression | null;
5
- tags: ICheckEntry.ITag[];
6
+ conditions: ICheckEntry.ICondition[][];
6
7
  }
7
8
  export namespace ICheckEntry {
8
- export interface ITag {
9
+ export interface ICondition {
9
10
  expected: string;
10
11
  expression: ts.Expression;
11
12
  }
@@ -1,29 +1,125 @@
1
+ import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
1
2
  import { Metadata } from "../../schemas/metadata/Metadata";
2
3
  import { MetadataObject } from "../../schemas/metadata/MetadataObject";
3
4
 
4
- import { Atomic } from "../../typings/Atomic";
5
+ import { ProtobufAtomic } from "../../typings/ProtobufAtomic";
5
6
 
6
7
  export namespace ProtobufUtil {
7
- export const getAtomics = (meta: Metadata) => {
8
- const set: Set<Atomic.Literal> = new Set();
8
+ export const isStaticObject = (obj: MetadataObject): boolean =>
9
+ obj.properties.length >= 1 &&
10
+ obj.properties.every((p) => p.key.isSoleLiteral());
11
+
12
+ export const size = (meta: Metadata): number =>
13
+ getAtomics(meta).length +
14
+ meta.arrays.length +
15
+ meta.tuples.length +
16
+ meta.natives.length +
17
+ meta.objects.length +
18
+ meta.maps.length;
19
+
20
+ export const isUnion = (meta: Metadata): boolean => meta.arrays.length > 1;
9
21
 
10
- for (const a of meta.atomics) set.add(a.type);
11
- for (const constant of meta.constants) set.add(constant.type);
22
+ export const getAtomics = (meta: Metadata): ProtobufAtomic[] => {
23
+ const set: Set<ProtobufAtomic> = new Set();
12
24
  if (meta.templates.length) set.add("string");
25
+ for (const c of meta.constants)
26
+ if (c.type === "boolean") set.add("bool");
27
+ else if (c.type === "bigint") set.add("uint64");
28
+ else if (c.type === "number")
29
+ set.add(deduce_numeric_type(c.values));
30
+ else if (c.type === "string") set.add("string");
31
+ for (const atomic of meta.atomics)
32
+ if (atomic.type === "boolean") set.add("bool");
33
+ else if (atomic.type === "bigint")
34
+ decode_bigint(atomic.tags).forEach((t) => set.add(t));
35
+ else if (atomic.type === "number")
36
+ decode_number(atomic.tags).forEach((t) => set.add(t));
37
+ else if (atomic.type === "string") set.add("string");
13
38
 
14
- return [...set].sort(
15
- (x, y) => ATOMIC_ORDER.get(x)! - ATOMIC_ORDER.get(y)!,
16
- );
39
+ return [...set].sort(compare);
17
40
  };
18
41
 
19
- export const isStaticObject = (obj: MetadataObject): boolean =>
20
- obj.properties.length >= 1 &&
21
- obj.properties.every((p) => p.key.isSoleLiteral());
42
+ export const getNumbers = (meta: Metadata) => {
43
+ const set: Set<ProtobufAtomic.Numeric> = new Set();
44
+ for (const c of meta.constants)
45
+ if (c.type === "number") set.add(deduce_numeric_type(c.values));
46
+ for (const atomic of meta.atomics)
47
+ if (atomic.type === "number")
48
+ decode_number(atomic.tags).forEach((t) => set.add(t));
49
+ return [...set].sort(compare);
50
+ };
51
+
52
+ export const getBigints = (meta: Metadata) => {
53
+ const set: Set<ProtobufAtomic.BigNumeric> = new Set();
54
+ for (const c of meta.constants)
55
+ if (c.type === "bigint") set.add("uint64");
56
+ for (const atomic of meta.atomics)
57
+ if (atomic.type === "bigint")
58
+ decode_bigint(atomic.tags).forEach((t) => set.add(t));
59
+ return [...set].sort(compare);
60
+ };
61
+
62
+ const compare = (x: ProtobufAtomic, y: ProtobufAtomic): number =>
63
+ ATOMIC_ORDER.get(x)! - ATOMIC_ORDER.get(y)!;
22
64
  }
23
65
 
24
- const ATOMIC_ORDER = new Map<Atomic.Literal, number>([
25
- ["boolean", 0],
26
- ["bigint", 1],
27
- ["number", 2],
28
- ["string", 3],
29
- ]);
66
+ const ATOMIC_ORDER = new Map<ProtobufAtomic, number>(
67
+ (
68
+ [
69
+ "bool",
70
+ "int32",
71
+ "uint32",
72
+ "int64",
73
+ "uint64",
74
+ "float",
75
+ "double",
76
+ "string",
77
+ ] as const
78
+ ).map((str, i) => [str, i]),
79
+ );
80
+
81
+ const deduce_numeric_type = (values: number[]): ProtobufAtomic.Numeric =>
82
+ values.every((v) => Math.floor(v) === v)
83
+ ? values.every((v) => -2147483648 <= v && v <= 2147483647)
84
+ ? "int32"
85
+ : "int64"
86
+ : "double";
87
+
88
+ const decode_bigint = (
89
+ typeTags: IMetadataTypeTag[][],
90
+ ): ProtobufAtomic.BigNumeric[] => {
91
+ if (typeTags.length === 0) return ["int64"];
92
+
93
+ const types: Set<ProtobufAtomic.BigNumeric> = new Set();
94
+ for (const row of typeTags) {
95
+ const value: ProtobufAtomic.BigNumeric | undefined = row.find(
96
+ (tag) =>
97
+ tag.kind === "type" &&
98
+ (tag.value === "int64" || tag.value === "uint64"),
99
+ )?.value;
100
+ types.add(value ?? "int64");
101
+ }
102
+ return [...types];
103
+ };
104
+
105
+ const decode_number = (
106
+ typeTags: IMetadataTypeTag[][],
107
+ ): ProtobufAtomic.Numeric[] => {
108
+ if (typeTags.length === 0) return ["double"];
109
+
110
+ const types: Set<ProtobufAtomic.Numeric> = new Set();
111
+ for (const row of typeTags) {
112
+ const value: ProtobufAtomic.Numeric | undefined = row.find(
113
+ (tag) =>
114
+ tag.kind === "type" &&
115
+ (tag.value === "int32" ||
116
+ tag.value === "uint32" ||
117
+ tag.value === "int64" ||
118
+ tag.value === "uint64" ||
119
+ tag.value === "float" ||
120
+ tag.value === "double"),
121
+ )?.value;
122
+ types.add(value ?? "double");
123
+ }
124
+ return [...types];
125
+ };
@@ -3,33 +3,21 @@ import ts from "typescript";
3
3
  import { StatementFactory } from "../../factories/StatementFactory";
4
4
  import { TypeFactory } from "../../factories/TypeFactory";
5
5
 
6
- import { ICommentTag } from "../../schemas/metadata/ICommentTag";
7
- import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
8
6
  import { Metadata } from "../../schemas/metadata/Metadata";
9
7
  import { MetadataObject } from "../../schemas/metadata/MetadataObject";
10
8
  import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
11
9
 
12
10
  import { Escaper } from "../../utils/Escaper";
13
11
 
14
- import { get_comment_tags } from "../internal/get_comment_tags";
15
-
16
12
  export namespace RandomJoiner {
17
- export type Decoder = (
18
- meta: Metadata,
19
- tags: IMetadataCommentTag[],
20
- comments: ICommentTag[],
21
- ) => ts.Expression;
13
+ export type Decoder = (meta: Metadata) => ts.Expression;
22
14
 
23
15
  export const array =
24
16
  (coalesce: (method: string) => ts.Expression) =>
25
17
  (decoder: Decoder) =>
26
18
  (explore: IExplore) =>
27
19
  (length: ts.Expression | undefined) =>
28
- (
29
- item: Metadata,
30
- tags: IMetadataCommentTag[],
31
- comments: ICommentTag[],
32
- ): ts.Expression => {
20
+ (item: Metadata): ts.Expression => {
33
21
  const generator: ts.Expression = ts.factory.createCallExpression(
34
22
  coalesce("array"),
35
23
  undefined,
@@ -40,7 +28,7 @@ export namespace RandomJoiner {
40
28
  [],
41
29
  undefined,
42
30
  undefined,
43
- decoder(item, tags, comments),
31
+ decoder(item),
44
32
  ),
45
33
  ...(length ? [length] : []),
46
34
  ],
@@ -58,17 +46,11 @@ export namespace RandomJoiner {
58
46
  );
59
47
  };
60
48
 
61
- export const tuple =
62
- (decoder: Decoder) =>
63
- (
64
- items: Metadata[],
65
- tags: IMetadataCommentTag[],
66
- comments: ICommentTag[],
67
- ) =>
68
- ts.factory.createArrayLiteralExpression(
69
- items.map((i) => decoder(i.rest ?? i, tags, comments)),
70
- true,
71
- );
49
+ export const tuple = (decoder: Decoder) => (elements: Metadata[]) =>
50
+ ts.factory.createArrayLiteralExpression(
51
+ elements.map((elem) => decoder(elem.rest ?? elem)),
52
+ true,
53
+ );
72
54
 
73
55
  export const object =
74
56
  (coalesce: (method: string) => ts.Expression) =>
@@ -92,11 +74,7 @@ export namespace RandomJoiner {
92
74
  Escaper.variable(str)
93
75
  ? str
94
76
  : ts.factory.createStringLiteral(str),
95
- decoder(
96
- p.value,
97
- p.tags,
98
- get_comment_tags(false)(p.jsDocTags),
99
- ),
77
+ decoder(p.value),
100
78
  );
101
79
  }),
102
80
  true,
@@ -150,14 +128,10 @@ export namespace RandomJoiner {
150
128
  ts.factory.createBinaryExpression(
151
129
  ts.factory.createElementAccessExpression(
152
130
  ts.factory.createIdentifier("output"),
153
- decoder(p.key, [], []),
131
+ decoder(p.key),
154
132
  ),
155
133
  ts.factory.createToken(ts.SyntaxKind.EqualsToken),
156
- decoder(
157
- p.value,
158
- p.tags,
159
- get_comment_tags(false)(p.jsDocTags),
160
- ),
134
+ decoder(p.value),
161
135
  ),
162
136
  ),
163
137
  ts.factory.createCallExpression(
@@ -1,6 +1,6 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
3
+ import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
4
4
 
5
5
  export namespace RandomRanger {
6
6
  export interface IDefaults {
@@ -13,15 +13,12 @@ export namespace RandomRanger {
13
13
  (coalesce: (method: string) => ts.Expression) =>
14
14
  (defs: IDefaults) =>
15
15
  (acc: length.IAccessors) =>
16
- (tags: IMetadataCommentTag[]): ts.Expression | undefined => {
16
+ (tags: IMetadataTypeTag[]): ts.Expression | undefined => {
17
17
  const props = {
18
- fixed: getter(tags)(acc.fixed),
19
18
  minimum: getter(tags)(acc.minimum),
20
19
  maximum: getter(tags)(acc.maximum),
21
20
  };
22
- if (props.fixed !== undefined)
23
- return ts.factory.createNumericLiteral(props.fixed);
24
- else if (props.minimum === undefined && props.maximum === undefined)
21
+ if (props.minimum === undefined && props.maximum === undefined)
25
22
  return undefined;
26
23
 
27
24
  props.minimum ??= defs.minimum;
@@ -40,16 +37,15 @@ export namespace RandomRanger {
40
37
  };
41
38
  export namespace length {
42
39
  export interface IAccessors {
43
- minimum: IMetadataCommentTag["kind"];
44
- maximum: IMetadataCommentTag["kind"];
45
- fixed: IMetadataCommentTag["kind"];
40
+ minimum: string;
41
+ maximum: string;
46
42
  }
47
43
  }
48
44
 
49
45
  export const number =
50
46
  (config: number.IConfig) =>
51
47
  (defs: IDefaults) =>
52
- (tags: IMetadataCommentTag[]): ts.Expression => {
48
+ (tags: IMetadataTypeTag[]): ts.Expression => {
53
49
  const range = {
54
50
  minimum: {
55
51
  value:
@@ -63,30 +59,14 @@ export namespace RandomRanger {
63
59
  getter(tags)("exclusiveMaximum"),
64
60
  exclusive: getter(tags)("exclusiveMaximum") !== undefined,
65
61
  },
66
- step: getter(tags)("step"),
62
+ stepper: undefined,
67
63
  multiply: getter(tags)("multipleOf"),
68
64
  };
69
- if (Object.values(range).every((v) => v !== undefined))
70
- return config.setter([]);
71
65
 
72
66
  //----
73
67
  // MULTIPLIERS
74
68
  //----
75
- // STEP
76
- if (range.step !== undefined) {
77
- const { intercept, minimum, maximum } = stepper(defs.gap)(
78
- range,
79
- )(range.step);
80
- return ts.factory.createAdd(
81
- config.transform(intercept),
82
- ts.factory.createMultiply(
83
- config.transform(range.step),
84
- config.setter([minimum, maximum]),
85
- ),
86
- );
87
- }
88
- // MULTIPLE-OF
89
- else if (range.multiply !== undefined) {
69
+ if (range.multiply !== undefined) {
90
70
  const { minimum, maximum } = multiplier(defs.gap)(range)(
91
71
  range.multiply,
92
72
  );
@@ -151,30 +131,15 @@ export namespace RandomRanger {
151
131
  }
152
132
 
153
133
  const getter =
154
- (tags: IMetadataCommentTag[]) =>
155
- (kind: IMetadataCommentTag["kind"]): number | undefined =>
156
- tags.find((t) => t.kind === kind)?.value as number | undefined;
157
-
158
- const stepper = (gap: number) => (range: IRange) => (s: number) => {
159
- const intercept: number = range.minimum.value!;
160
- const minimum: number = range.minimum.exclusive ? 1 : 0;
161
- if (range.maximum.value === undefined)
162
- return {
163
- intercept,
164
- minimum,
165
- maximum: gap,
166
- };
167
-
168
- const y: number = Math.floor(range.maximum.value - intercept) / s;
169
- return {
170
- intercept,
171
- minimum,
172
- maximum:
173
- range.maximum.exclusive && intercept + y * s === range.maximum.value
174
- ? y - 1
175
- : y,
134
+ (tags: IMetadataTypeTag[]) =>
135
+ (kind: string): number | undefined => {
136
+ const value: bigint | number | undefined = tags.find(
137
+ (t) =>
138
+ t.kind === kind &&
139
+ (typeof t.value === "number" || typeof t.value === "bigint"),
140
+ )?.value;
141
+ return value !== undefined ? Number(value) : undefined;
176
142
  };
177
- };
178
143
 
179
144
  const multiplier = (gap: number) => (range: IRange) => (m: number) => {
180
145
  const minimum: number =