typia 5.3.0-dev.20231112 → 5.3.0-dev.20231119

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 (751) hide show
  1. package/lib/AssertionGuard.d.ts +1 -0
  2. package/lib/AssertionGuard.js +3 -0
  3. package/lib/AssertionGuard.js.map +1 -0
  4. package/lib/TypeGuardError.js.map +1 -1
  5. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  6. package/lib/executable/TypiaSetupWizard.js +1 -2
  7. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  8. package/lib/executable/setup/ArgumentParser.js.map +1 -1
  9. package/lib/executable/setup/CommandExecutor.js.map +1 -1
  10. package/lib/executable/setup/FileRetriever.js.map +1 -1
  11. package/lib/executable/setup/PackageManager.js.map +1 -1
  12. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  13. package/lib/executable/typia.js.map +1 -1
  14. package/lib/factories/CommentFactory.js +1 -3
  15. package/lib/factories/CommentFactory.js.map +1 -1
  16. package/lib/factories/ExpressionFactory.js +2 -6
  17. package/lib/factories/ExpressionFactory.js.map +1 -1
  18. package/lib/factories/IdentifierFactory.js +2 -6
  19. package/lib/factories/IdentifierFactory.js.map +1 -1
  20. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  21. package/lib/factories/LiteralFactory.js.map +1 -1
  22. package/lib/factories/MetadataCollection.js +2 -7
  23. package/lib/factories/MetadataCollection.js.map +1 -1
  24. package/lib/factories/MetadataCommentTagFactory.js +2 -6
  25. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  26. package/lib/factories/MetadataFactory.js +1 -4
  27. package/lib/factories/MetadataFactory.js.map +1 -1
  28. package/lib/factories/MetadataTypeTagFactory.js +3 -10
  29. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  30. package/lib/factories/NumericRangeFactory.js.map +1 -1
  31. package/lib/factories/ProtobufFactory.js +5 -11
  32. package/lib/factories/ProtobufFactory.js.map +1 -1
  33. package/lib/factories/StatementFactory.js.map +1 -1
  34. package/lib/factories/TemplateFactory.js +1 -3
  35. package/lib/factories/TemplateFactory.js.map +1 -1
  36. package/lib/factories/TypeFactory.js +1 -2
  37. package/lib/factories/TypeFactory.js.map +1 -1
  38. package/lib/factories/ValueFactory.js.map +1 -1
  39. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  40. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  41. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  42. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  43. package/lib/factories/internal/metadata/emplace_metadata_object.js +2 -5
  44. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  45. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
  46. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  48. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  50. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  51. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -1
  52. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -16
  53. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  54. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  56. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +9 -23
  57. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  58. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  59. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  60. package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -3
  61. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  62. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  63. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  64. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -10
  65. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  66. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  67. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  68. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  69. package/lib/functional/$HeadersReader.js.map +1 -1
  70. package/lib/functional/$ParameterReader.js.map +1 -1
  71. package/lib/functional/$ProtobufReader.js.map +1 -1
  72. package/lib/functional/$ProtobufSizer.js.map +1 -1
  73. package/lib/functional/$ProtobufWriter.js.map +1 -1
  74. package/lib/functional/$QueryReader.js.map +1 -1
  75. package/lib/functional/$any.js.map +1 -1
  76. package/lib/functional/$clone.js.map +1 -1
  77. package/lib/functional/$convention.js +1 -4
  78. package/lib/functional/$convention.js.map +1 -1
  79. package/lib/functional/$dictionary.js.map +1 -1
  80. package/lib/functional/$every.js.map +1 -1
  81. package/lib/functional/$from.js.map +1 -1
  82. package/lib/functional/$guard.js.map +1 -1
  83. package/lib/functional/$is_between.js.map +1 -1
  84. package/lib/functional/$join.js.map +1 -1
  85. package/lib/functional/$number.js.map +1 -1
  86. package/lib/functional/$report.js +1 -1
  87. package/lib/functional/$report.js.map +1 -1
  88. package/lib/functional/$rest.js.map +1 -1
  89. package/lib/functional/$stoll.js.map +1 -1
  90. package/lib/functional/$string.js.map +1 -1
  91. package/lib/functional/$strlen.js.map +1 -1
  92. package/lib/functional/$tail.js.map +1 -1
  93. package/lib/functional/$varint.js.map +1 -1
  94. package/lib/functional/$zigzag.js.map +1 -1
  95. package/lib/functional/Namespace.js +1 -2
  96. package/lib/functional/Namespace.js.map +1 -1
  97. package/lib/http.js.map +1 -1
  98. package/lib/json.js.map +1 -1
  99. package/lib/misc.js.map +1 -1
  100. package/lib/module.d.ts +208 -0
  101. package/lib/module.js +22 -1
  102. package/lib/module.js.map +1 -1
  103. package/lib/notations.js.map +1 -1
  104. package/lib/programmers/AssertProgrammer.d.ts +4 -1
  105. package/lib/programmers/AssertProgrammer.js +36 -39
  106. package/lib/programmers/AssertProgrammer.js.map +1 -1
  107. package/lib/programmers/CheckerProgrammer.js +15 -36
  108. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  109. package/lib/programmers/FeatureProgrammer.js +2 -6
  110. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  111. package/lib/programmers/IsProgrammer.js +5 -20
  112. package/lib/programmers/IsProgrammer.js.map +1 -1
  113. package/lib/programmers/RandomProgrammer.js +22 -40
  114. package/lib/programmers/RandomProgrammer.js.map +1 -1
  115. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  116. package/lib/programmers/ValidateProgrammer.js +6 -10
  117. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  118. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  119. package/lib/programmers/helpers/CloneJoiner.js +1 -3
  120. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  121. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  122. package/lib/programmers/helpers/HttpMetadataUtil.js.map +1 -1
  123. package/lib/programmers/helpers/NotationJoiner.js +1 -3
  124. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  125. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  126. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  127. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  128. package/lib/programmers/helpers/RandomJoiner.js +5 -4
  129. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  130. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  131. package/lib/programmers/helpers/StringifyJoinder.js +5 -6
  132. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  133. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  134. package/lib/programmers/helpers/UnionExplorer.js +3 -9
  135. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  136. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  137. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  138. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  139. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  140. package/lib/programmers/http/HttpHeadersProgrammer.js +8 -15
  141. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  142. package/lib/programmers/http/HttpIsHeadersProgrammer.js.map +1 -1
  143. package/lib/programmers/http/HttpIsQueryProgrammer.js.map +1 -1
  144. package/lib/programmers/http/HttpParameterProgrammer.js +4 -4
  145. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  146. package/lib/programmers/http/HttpQueryProgrammer.js +4 -10
  147. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  148. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  149. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  150. package/lib/programmers/internal/application_alias.js +1 -2
  151. package/lib/programmers/internal/application_alias.js.map +1 -1
  152. package/lib/programmers/internal/application_array.js +1 -3
  153. package/lib/programmers/internal/application_array.js.map +1 -1
  154. package/lib/programmers/internal/application_boolean.js.map +1 -1
  155. package/lib/programmers/internal/application_constant.js.map +1 -1
  156. package/lib/programmers/internal/application_default.js.map +1 -1
  157. package/lib/programmers/internal/application_default_string.js.map +1 -1
  158. package/lib/programmers/internal/application_escaped.js +1 -3
  159. package/lib/programmers/internal/application_escaped.js.map +1 -1
  160. package/lib/programmers/internal/application_native.js.map +1 -1
  161. package/lib/programmers/internal/application_number.js +1 -2
  162. package/lib/programmers/internal/application_number.js.map +1 -1
  163. package/lib/programmers/internal/application_object.js +3 -5
  164. package/lib/programmers/internal/application_object.js.map +1 -1
  165. package/lib/programmers/internal/application_schema.js +3 -1
  166. package/lib/programmers/internal/application_schema.js.map +1 -1
  167. package/lib/programmers/internal/application_string.js +1 -3
  168. package/lib/programmers/internal/application_string.js.map +1 -1
  169. package/lib/programmers/internal/application_templates.js.map +1 -1
  170. package/lib/programmers/internal/application_tuple.js +1 -2
  171. package/lib/programmers/internal/application_tuple.js.map +1 -1
  172. package/lib/programmers/internal/check_array_length.js.map +1 -1
  173. package/lib/programmers/internal/check_bigint.js.map +1 -1
  174. package/lib/programmers/internal/check_dynamic_key.js +3 -6
  175. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  176. package/lib/programmers/internal/check_dynamic_properties.js +3 -7
  177. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  178. package/lib/programmers/internal/check_everything.js +1 -3
  179. package/lib/programmers/internal/check_everything.js.map +1 -1
  180. package/lib/programmers/internal/check_native.js.map +1 -1
  181. package/lib/programmers/internal/check_number.js +3 -6
  182. package/lib/programmers/internal/check_number.js.map +1 -1
  183. package/lib/programmers/internal/check_object.js.map +1 -1
  184. package/lib/programmers/internal/check_string.js.map +1 -1
  185. package/lib/programmers/internal/check_template.js.map +1 -1
  186. package/lib/programmers/internal/check_union_array_like.js +2 -6
  187. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  188. package/lib/programmers/internal/decode_union_object.js +1 -3
  189. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  190. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  191. package/lib/programmers/internal/metadata_to_pattern.js +1 -3
  192. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  193. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  194. package/lib/programmers/internal/random_custom.js.map +1 -1
  195. package/lib/programmers/internal/stringify_dynamic_properties.js +1 -3
  196. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  197. package/lib/programmers/internal/stringify_native.js.map +1 -1
  198. package/lib/programmers/internal/stringify_regular_properties.js +1 -3
  199. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  200. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  201. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  202. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  203. package/lib/programmers/json/JsonAssertParseProgrammer.js +1 -3
  204. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  205. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +1 -3
  206. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  207. package/lib/programmers/json/JsonIsParseProgrammer.js +1 -3
  208. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  209. package/lib/programmers/json/JsonIsStringifyProgrammer.js.map +1 -1
  210. package/lib/programmers/json/JsonStringifyProgrammer.js +4 -10
  211. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  212. package/lib/programmers/json/JsonValidateParseProgrammer.js +1 -3
  213. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  214. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  215. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -3
  216. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  217. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +1 -3
  218. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  219. package/lib/programmers/misc/MiscCloneProgrammer.js +9 -22
  220. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  221. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -3
  222. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  223. package/lib/programmers/misc/MiscIsPruneProgrammer.js +1 -3
  224. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -1
  225. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  226. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -3
  227. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  228. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -3
  229. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  230. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +1 -3
  231. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  232. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +1 -3
  233. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  234. package/lib/programmers/notations/NotationGeneralProgrammer.js +9 -22
  235. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  236. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +1 -3
  237. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -1
  238. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +1 -3
  239. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  240. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  241. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +1 -3
  242. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  243. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +8 -17
  244. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  245. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +6 -10
  246. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  247. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  248. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js.map +1 -1
  249. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -3
  250. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  251. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  252. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  253. package/lib/protobuf.js.map +1 -1
  254. package/lib/reflect.js.map +1 -1
  255. package/lib/schemas/metadata/Metadata.js +7 -19
  256. package/lib/schemas/metadata/Metadata.js.map +1 -1
  257. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  258. package/lib/schemas/metadata/MetadataApplication.js.map +1 -1
  259. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  260. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
  261. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  262. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  263. package/lib/schemas/metadata/MetadataConstant.js.map +1 -1
  264. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
  265. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  266. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  267. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  268. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
  269. package/lib/transform.js.map +1 -1
  270. package/lib/transformers/CallExpressionTransformer.js +37 -33
  271. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  272. package/lib/transformers/FileTransformer.js.map +1 -1
  273. package/lib/transformers/ImportTransformer.js.map +1 -1
  274. package/lib/transformers/NodeTransformer.js.map +1 -1
  275. package/lib/transformers/TransformerError.js.map +1 -1
  276. package/lib/transformers/features/AssertTransformer.d.ts +4 -1
  277. package/lib/transformers/features/AssertTransformer.js +8 -4
  278. package/lib/transformers/features/AssertTransformer.js.map +1 -1
  279. package/lib/transformers/features/CreateAssertTransformer.d.ts +4 -1
  280. package/lib/transformers/features/CreateAssertTransformer.js +8 -4
  281. package/lib/transformers/features/CreateAssertTransformer.js.map +1 -1
  282. package/lib/transformers/features/CreateIsTransformer.js +1 -3
  283. package/lib/transformers/features/CreateIsTransformer.js.map +1 -1
  284. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  285. package/lib/transformers/features/CreateValidateTransformer.js.map +1 -1
  286. package/lib/transformers/features/IsTransformer.js +1 -3
  287. package/lib/transformers/features/IsTransformer.js.map +1 -1
  288. package/lib/transformers/features/RandomTransformer.js +1 -3
  289. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  290. package/lib/transformers/features/ValidateTransformer.js.map +1 -1
  291. package/lib/transformers/features/http/CreateHttpAssertHeadersTransformer.js +1 -3
  292. package/lib/transformers/features/http/CreateHttpAssertHeadersTransformer.js.map +1 -1
  293. package/lib/transformers/features/http/CreateHttpAssertQueryTransformer.js +1 -3
  294. package/lib/transformers/features/http/CreateHttpAssertQueryTransformer.js.map +1 -1
  295. package/lib/transformers/features/http/CreateHttpHeadersTransformer.js.map +1 -1
  296. package/lib/transformers/features/http/CreateHttpIsHeadersTransformer.js.map +1 -1
  297. package/lib/transformers/features/http/CreateHttpIsQueryTransformer.js.map +1 -1
  298. package/lib/transformers/features/http/CreateHttpParameterTransformer.js.map +1 -1
  299. package/lib/transformers/features/http/CreateHttpQueryTransformer.js.map +1 -1
  300. package/lib/transformers/features/http/CreateHttpValidateHeadersTransformer.js.map +1 -1
  301. package/lib/transformers/features/http/CreateHttpValidateQueryTransformer.js +1 -3
  302. package/lib/transformers/features/http/CreateHttpValidateQueryTransformer.js.map +1 -1
  303. package/lib/transformers/features/http/HttpAssertHeadersTransformer.js +1 -3
  304. package/lib/transformers/features/http/HttpAssertHeadersTransformer.js.map +1 -1
  305. package/lib/transformers/features/http/HttpAssertQueryTransformer.js +1 -3
  306. package/lib/transformers/features/http/HttpAssertQueryTransformer.js.map +1 -1
  307. package/lib/transformers/features/http/HttpHeadersTransformer.js.map +1 -1
  308. package/lib/transformers/features/http/HttpIsHeadersTransformer.js.map +1 -1
  309. package/lib/transformers/features/http/HttpIsQueryTransformer.js.map +1 -1
  310. package/lib/transformers/features/http/HttpParameterTransformer.js.map +1 -1
  311. package/lib/transformers/features/http/HttpQueryTransformer.js.map +1 -1
  312. package/lib/transformers/features/http/HttpValidateHeadersTransformer.js.map +1 -1
  313. package/lib/transformers/features/http/HttpValidateQueryTransformer.js +1 -3
  314. package/lib/transformers/features/http/HttpValidateQueryTransformer.js.map +1 -1
  315. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  316. package/lib/transformers/features/json/JsonAssertParseTransformer.js +1 -3
  317. package/lib/transformers/features/json/JsonAssertParseTransformer.js.map +1 -1
  318. package/lib/transformers/features/json/JsonAssertStringifyTransformer.js.map +1 -1
  319. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.js +1 -3
  320. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.js.map +1 -1
  321. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.js.map +1 -1
  322. package/lib/transformers/features/json/JsonCreateIsParseTransformer.js.map +1 -1
  323. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.js +1 -3
  324. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.js.map +1 -1
  325. package/lib/transformers/features/json/JsonCreateStringifyTransformer.js.map +1 -1
  326. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.js +1 -3
  327. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.js.map +1 -1
  328. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.js.map +1 -1
  329. package/lib/transformers/features/json/JsonIsParseTransformer.js.map +1 -1
  330. package/lib/transformers/features/json/JsonIsStringifyTransformer.js +1 -3
  331. package/lib/transformers/features/json/JsonIsStringifyTransformer.js.map +1 -1
  332. package/lib/transformers/features/json/JsonStringifyTransformer.js.map +1 -1
  333. package/lib/transformers/features/json/JsonValidateParseTransformer.js +1 -3
  334. package/lib/transformers/features/json/JsonValidateParseTransformer.js.map +1 -1
  335. package/lib/transformers/features/json/JsonValidateStringifyTransformer.js.map +1 -1
  336. package/lib/transformers/features/misc/MiscAssertCloneTransformer.js +1 -3
  337. package/lib/transformers/features/misc/MiscAssertCloneTransformer.js.map +1 -1
  338. package/lib/transformers/features/misc/MiscAssertPruneTransformer.js +1 -3
  339. package/lib/transformers/features/misc/MiscAssertPruneTransformer.js.map +1 -1
  340. package/lib/transformers/features/misc/MiscCloneTransformer.js.map +1 -1
  341. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.js +1 -3
  342. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.js.map +1 -1
  343. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.js +1 -3
  344. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.js.map +1 -1
  345. package/lib/transformers/features/misc/MiscCreateCloneTransformer.js.map +1 -1
  346. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.js.map +1 -1
  347. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  348. package/lib/transformers/features/misc/MiscCreatePruneTransformer.js.map +1 -1
  349. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.js +1 -3
  350. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.js.map +1 -1
  351. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.js +1 -3
  352. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.js.map +1 -1
  353. package/lib/transformers/features/misc/MiscIsCloneTransformer.js.map +1 -1
  354. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  355. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  356. package/lib/transformers/features/misc/MiscPruneTransformer.js.map +1 -1
  357. package/lib/transformers/features/misc/MiscValidateCloneTransformer.js +1 -3
  358. package/lib/transformers/features/misc/MiscValidateCloneTransformer.js.map +1 -1
  359. package/lib/transformers/features/misc/MiscValidatePruneTransformer.js +1 -3
  360. package/lib/transformers/features/misc/MiscValidatePruneTransformer.js.map +1 -1
  361. package/lib/transformers/features/notations/NotationAssertGeneralTransformer.js.map +1 -1
  362. package/lib/transformers/features/notations/NotationCreateAssertGeneralTransformer.js.map +1 -1
  363. package/lib/transformers/features/notations/NotationCreateGeneralTransformer.js.map +1 -1
  364. package/lib/transformers/features/notations/NotationCreateIsGeneralTransformer.js.map +1 -1
  365. package/lib/transformers/features/notations/NotationCreateValidateGeneralTransformer.js.map +1 -1
  366. package/lib/transformers/features/notations/NotationGeneralTransformer.js.map +1 -1
  367. package/lib/transformers/features/notations/NotationIsGeneralTransformer.js.map +1 -1
  368. package/lib/transformers/features/notations/NotationValidateGeneralTransformer.js.map +1 -1
  369. package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.js.map +1 -1
  370. package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.js.map +1 -1
  371. package/lib/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.js.map +1 -1
  372. package/lib/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.js.map +1 -1
  373. package/lib/transformers/features/protobuf/ProtobufCreateDecodeTransformer.js.map +1 -1
  374. package/lib/transformers/features/protobuf/ProtobufCreateEncodeTransformer.js.map +1 -1
  375. package/lib/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.js +1 -3
  376. package/lib/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.js.map +1 -1
  377. package/lib/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.js +1 -3
  378. package/lib/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.js.map +1 -1
  379. package/lib/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.js.map +1 -1
  380. package/lib/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.js.map +1 -1
  381. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.js +1 -3
  382. package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.js.map +1 -1
  383. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.js +1 -3
  384. package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.js.map +1 -1
  385. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.js +1 -3
  386. package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.js.map +1 -1
  387. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.js +1 -3
  388. package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.js.map +1 -1
  389. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  390. package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.js.map +1 -1
  391. package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.js.map +1 -1
  392. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  393. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  394. package/lib/typings/Writable.js.map +1 -1
  395. package/lib/utils/ArrayUtil.js +1 -3
  396. package/lib/utils/ArrayUtil.js.map +1 -1
  397. package/lib/utils/Escaper.js.map +1 -1
  398. package/lib/utils/MapUtil.js.map +1 -1
  399. package/lib/utils/NameEncoder.js.map +1 -1
  400. package/lib/utils/NamingConvention.js.map +1 -1
  401. package/lib/utils/PatternUtil.js +2 -6
  402. package/lib/utils/PatternUtil.js.map +1 -1
  403. package/lib/utils/RandomGenerator.js.map +1 -1
  404. package/lib/utils/Singleton.js.map +1 -1
  405. package/lib/utils/StringUtil.js.map +1 -1
  406. package/package.json +1 -1
  407. package/src/AssertionGuard.ts +1 -0
  408. package/src/CamelCase.ts +114 -116
  409. package/src/IRandomGenerator.ts +35 -35
  410. package/src/IValidation.ts +21 -21
  411. package/src/PascalCase.ts +114 -116
  412. package/src/Primitive.ts +135 -135
  413. package/src/Resolved.ts +116 -116
  414. package/src/SnakeCase.ts +156 -156
  415. package/src/TypeGuardError.ts +36 -36
  416. package/src/executable/TypiaGenerateWizard.ts +83 -85
  417. package/src/executable/TypiaSetupWizard.ts +140 -142
  418. package/src/executable/setup/ArgumentParser.ts +43 -45
  419. package/src/executable/setup/CommandExecutor.ts +8 -8
  420. package/src/executable/setup/FileRetriever.ts +22 -22
  421. package/src/executable/setup/PackageManager.ts +71 -71
  422. package/src/executable/setup/PluginConfigurator.ts +69 -70
  423. package/src/executable/typia.ts +52 -52
  424. package/src/factories/CommentFactory.ts +79 -84
  425. package/src/factories/ExpressionFactory.ts +150 -166
  426. package/src/factories/IdentifierFactory.ts +70 -74
  427. package/src/factories/JsonMetadataFactory.ts +53 -53
  428. package/src/factories/LiteralFactory.ts +47 -49
  429. package/src/factories/MetadataCollection.ts +269 -282
  430. package/src/factories/MetadataCommentTagFactory.ts +601 -629
  431. package/src/factories/MetadataFactory.ts +267 -271
  432. package/src/factories/MetadataTypeTagFactory.ts +313 -325
  433. package/src/factories/NumericRangeFactory.ts +72 -72
  434. package/src/factories/ProtobufFactory.ts +259 -275
  435. package/src/factories/StatementFactory.ts +72 -72
  436. package/src/factories/TemplateFactory.ts +56 -58
  437. package/src/factories/TypeFactory.ts +118 -119
  438. package/src/factories/ValueFactory.ts +12 -12
  439. package/src/factories/internal/metadata/MetadataHelper.ts +15 -15
  440. package/src/factories/internal/metadata/emend_metadata_atomics.ts +37 -41
  441. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  442. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +38 -41
  443. package/src/factories/internal/metadata/emplace_metadata_object.ts +175 -178
  444. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -60
  445. package/src/factories/internal/metadata/explore_metadata.ts +28 -32
  446. package/src/factories/internal/metadata/iterate_metadata.ts +94 -101
  447. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -35
  448. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  449. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  450. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  451. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -141
  452. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  453. package/src/factories/internal/metadata/iterate_metadata_constant.ts +48 -60
  454. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +233 -260
  455. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -57
  456. package/src/factories/internal/metadata/iterate_metadata_native.ts +208 -210
  457. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -44
  458. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  459. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -42
  460. package/src/factories/internal/metadata/iterate_metadata_sort.ts +61 -69
  461. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -47
  462. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  463. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  464. package/src/functional/$HeadersReader.ts +28 -28
  465. package/src/functional/$ParameterReader.ts +31 -31
  466. package/src/functional/$ProtobufReader.ts +195 -201
  467. package/src/functional/$ProtobufSizer.ts +147 -147
  468. package/src/functional/$ProtobufWriter.ts +150 -151
  469. package/src/functional/$QueryReader.ts +56 -56
  470. package/src/functional/$any.ts +4 -4
  471. package/src/functional/$clone.ts +4 -4
  472. package/src/functional/$convention.ts +37 -40
  473. package/src/functional/$dictionary.ts +22 -25
  474. package/src/functional/$every.ts +11 -11
  475. package/src/functional/$from.ts +5 -5
  476. package/src/functional/$guard.ts +35 -35
  477. package/src/functional/$is_between.ts +2 -2
  478. package/src/functional/$join.ts +46 -46
  479. package/src/functional/$number.ts +12 -13
  480. package/src/functional/$report.ts +13 -15
  481. package/src/functional/$rest.ts +3 -3
  482. package/src/functional/$stoll.ts +8 -8
  483. package/src/functional/$string.ts +50 -50
  484. package/src/functional/$strlen.ts +7 -7
  485. package/src/functional/$tail.ts +5 -5
  486. package/src/functional/$varint.ts +130 -130
  487. package/src/functional/$zigzag.ts +39 -39
  488. package/src/functional/IProtobufWriter.ts +18 -18
  489. package/src/functional/Namespace.ts +174 -175
  490. package/src/http.ts +1149 -1149
  491. package/src/json.ts +648 -648
  492. package/src/misc.ts +651 -651
  493. package/src/module.ts +896 -644
  494. package/src/notations.ts +855 -855
  495. package/src/programmers/AssertProgrammer.ts +293 -322
  496. package/src/programmers/CheckerProgrammer.ts +1025 -1138
  497. package/src/programmers/FeatureProgrammer.ts +460 -486
  498. package/src/programmers/IsProgrammer.ts +232 -258
  499. package/src/programmers/RandomProgrammer.ts +825 -880
  500. package/src/programmers/TypiaProgrammer.ts +167 -169
  501. package/src/programmers/ValidateProgrammer.ts +307 -350
  502. package/src/programmers/helpers/AtomicPredicator.ts +25 -31
  503. package/src/programmers/helpers/CloneJoiner.ts +130 -144
  504. package/src/programmers/helpers/FunctionImporeter.ts +87 -91
  505. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  506. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  507. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  508. package/src/programmers/helpers/NotationJoiner.ts +132 -146
  509. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  510. package/src/programmers/helpers/ProtobufUtil.ts +125 -126
  511. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  512. package/src/programmers/helpers/PruneJoiner.ts +141 -143
  513. package/src/programmers/helpers/RandomJoiner.ts +140 -149
  514. package/src/programmers/helpers/RandomRanger.ts +164 -175
  515. package/src/programmers/helpers/StringifyJoinder.ts +105 -113
  516. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  517. package/src/programmers/helpers/UnionExplorer.ts +269 -305
  518. package/src/programmers/helpers/UnionPredicator.ts +77 -81
  519. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  520. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +77 -77
  521. package/src/programmers/http/HttpAssertQueryProgrammer.ts +75 -77
  522. package/src/programmers/http/HttpHeadersProgrammer.ts +314 -342
  523. package/src/programmers/http/HttpIsHeadersProgrammer.ts +84 -87
  524. package/src/programmers/http/HttpIsQueryProgrammer.ts +82 -87
  525. package/src/programmers/http/HttpParameterProgrammer.ts +97 -107
  526. package/src/programmers/http/HttpQueryProgrammer.ts +252 -276
  527. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +77 -77
  528. package/src/programmers/http/HttpValidateQueryProgrammer.ts +75 -77
  529. package/src/programmers/internal/application_alias.ts +65 -65
  530. package/src/programmers/internal/application_array.ts +59 -61
  531. package/src/programmers/internal/application_boolean.ts +30 -30
  532. package/src/programmers/internal/application_constant.ts +26 -26
  533. package/src/programmers/internal/application_default.ts +17 -17
  534. package/src/programmers/internal/application_default_string.ts +33 -37
  535. package/src/programmers/internal/application_escaped.ts +53 -55
  536. package/src/programmers/internal/application_native.ts +38 -39
  537. package/src/programmers/internal/application_number.ts +94 -97
  538. package/src/programmers/internal/application_object.ts +153 -162
  539. package/src/programmers/internal/application_schema.ts +180 -180
  540. package/src/programmers/internal/application_string.ts +58 -61
  541. package/src/programmers/internal/application_templates.ts +25 -25
  542. package/src/programmers/internal/application_tuple.ts +55 -58
  543. package/src/programmers/internal/check_array_length.ts +45 -47
  544. package/src/programmers/internal/check_bigint.ts +49 -51
  545. package/src/programmers/internal/check_dynamic_key.ts +175 -178
  546. package/src/programmers/internal/check_dynamic_properties.ts +198 -202
  547. package/src/programmers/internal/check_everything.ts +23 -28
  548. package/src/programmers/internal/check_native.ts +21 -21
  549. package/src/programmers/internal/check_number.ts +106 -111
  550. package/src/programmers/internal/check_object.ts +60 -62
  551. package/src/programmers/internal/check_string.ts +48 -50
  552. package/src/programmers/internal/check_template.ts +61 -61
  553. package/src/programmers/internal/check_union_array_like.ts +307 -324
  554. package/src/programmers/internal/decode_union_object.ts +78 -84
  555. package/src/programmers/internal/feature_object_entries.ts +58 -58
  556. package/src/programmers/internal/metadata_to_pattern.ts +33 -36
  557. package/src/programmers/internal/prune_object_properties.ts +60 -60
  558. package/src/programmers/internal/random_custom.ts +37 -37
  559. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -171
  560. package/src/programmers/internal/stringify_native.ts +7 -7
  561. package/src/programmers/internal/stringify_regular_properties.ts +81 -83
  562. package/src/programmers/internal/template_to_pattern.ts +15 -15
  563. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  564. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  565. package/src/programmers/json/JsonAssertParseProgrammer.ts +67 -72
  566. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +61 -66
  567. package/src/programmers/json/JsonIsParseProgrammer.ts +73 -78
  568. package/src/programmers/json/JsonIsStringifyProgrammer.ts +75 -76
  569. package/src/programmers/json/JsonStringifyProgrammer.ts +893 -959
  570. package/src/programmers/json/JsonValidateParseProgrammer.ts +64 -69
  571. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +83 -84
  572. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +63 -71
  573. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +60 -68
  574. package/src/programmers/misc/MiscCloneProgrammer.ts +713 -787
  575. package/src/programmers/misc/MiscIsCloneProgrammer.ts +70 -78
  576. package/src/programmers/misc/MiscIsPruneProgrammer.ts +66 -73
  577. package/src/programmers/misc/MiscLiteralsProgrammer.ts +72 -72
  578. package/src/programmers/misc/MiscPruneProgrammer.ts +523 -549
  579. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +80 -85
  580. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +73 -78
  581. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +64 -72
  582. package/src/programmers/notations/NotationGeneralProgrammer.ts +647 -717
  583. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +71 -79
  584. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +81 -88
  585. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  586. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +61 -66
  587. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +596 -654
  588. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +819 -872
  589. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +82 -85
  590. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +75 -76
  591. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +160 -165
  592. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  593. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +83 -86
  594. package/src/protobuf.ts +887 -887
  595. package/src/reflect.ts +24 -24
  596. package/src/schemas/json/IJsonApplication.ts +8 -8
  597. package/src/schemas/json/IJsonComponents.ts +36 -36
  598. package/src/schemas/json/IJsonSchema.ts +113 -113
  599. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  600. package/src/schemas/metadata/IMetadata.ts +34 -34
  601. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  602. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  603. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  604. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  605. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  606. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  607. package/src/schemas/metadata/IMetadataConstant.ts +23 -25
  608. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  609. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  610. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  611. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  612. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  613. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  614. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  615. package/src/schemas/metadata/IMetadataTypeTag.ts +15 -15
  616. package/src/schemas/metadata/Metadata.ts +596 -613
  617. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  618. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  619. package/src/schemas/metadata/MetadataArray.ts +49 -49
  620. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  621. package/src/schemas/metadata/MetadataAtomic.ts +84 -86
  622. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  623. package/src/schemas/metadata/MetadataConstant.ts +46 -46
  624. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  625. package/src/schemas/metadata/MetadataObject.ts +135 -139
  626. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  627. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  628. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  629. package/src/tags/Default.ts +15 -15
  630. package/src/tags/ExclusiveMaximum.ts +13 -13
  631. package/src/tags/ExclusiveMinimum.ts +13 -13
  632. package/src/tags/Format.ts +30 -30
  633. package/src/tags/MaxItems.ts +9 -9
  634. package/src/tags/MaxLength.ts +9 -9
  635. package/src/tags/Maximum.ts +13 -13
  636. package/src/tags/MinItems.ts +9 -9
  637. package/src/tags/MinLength.ts +9 -9
  638. package/src/tags/Minimum.ts +13 -13
  639. package/src/tags/MultipleOf.ts +15 -15
  640. package/src/tags/Pattern.ts +9 -9
  641. package/src/tags/TagBase.ts +68 -68
  642. package/src/tags/Type.ts +27 -27
  643. package/src/transform.ts +35 -35
  644. package/src/transformers/CallExpressionTransformer.ts +359 -383
  645. package/src/transformers/FileTransformer.ts +57 -57
  646. package/src/transformers/IProject.ts +15 -15
  647. package/src/transformers/ITransformOptions.ts +62 -62
  648. package/src/transformers/ImportTransformer.ts +66 -66
  649. package/src/transformers/NodeTransformer.ts +13 -13
  650. package/src/transformers/TransformerError.ts +55 -55
  651. package/src/transformers/features/AssertTransformer.ts +16 -11
  652. package/src/transformers/features/CreateAssertTransformer.ts +16 -13
  653. package/src/transformers/features/CreateIsTransformer.ts +10 -11
  654. package/src/transformers/features/CreateRandomTransformer.ts +40 -43
  655. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  656. package/src/transformers/features/IsTransformer.ts +10 -11
  657. package/src/transformers/features/RandomTransformer.ts +44 -46
  658. package/src/transformers/features/ValidateTransformer.ts +11 -11
  659. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +11 -12
  660. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +9 -12
  661. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +9 -9
  662. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +9 -9
  663. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +9 -9
  664. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +9 -9
  665. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +9 -9
  666. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +12 -12
  667. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +11 -12
  668. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +9 -10
  669. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +9 -10
  670. package/src/transformers/features/http/HttpHeadersTransformer.ts +9 -9
  671. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +9 -9
  672. package/src/transformers/features/http/HttpIsQueryTransformer.ts +9 -9
  673. package/src/transformers/features/http/HttpParameterTransformer.ts +9 -9
  674. package/src/transformers/features/http/HttpQueryTransformer.ts +9 -9
  675. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +10 -10
  676. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +9 -10
  677. package/src/transformers/features/json/JsonApplicationTransformer.ts +121 -121
  678. package/src/transformers/features/json/JsonAssertParseTransformer.ts +9 -10
  679. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  680. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +9 -12
  681. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  682. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  683. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +9 -12
  684. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  685. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +11 -12
  686. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  687. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  688. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +9 -10
  689. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  690. package/src/transformers/features/json/JsonValidateParseTransformer.ts +9 -10
  691. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  692. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -10
  693. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -10
  694. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  695. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -12
  696. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -12
  697. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  698. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  699. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  700. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  701. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -12
  702. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -12
  703. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  704. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  705. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  706. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  707. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -10
  708. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -10
  709. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  710. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  711. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  712. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  713. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -17
  714. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  715. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  716. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -17
  717. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  718. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  719. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  720. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  721. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  722. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  723. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -12
  724. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -12
  725. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  726. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  727. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -10
  728. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -10
  729. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -10
  730. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -10
  731. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  732. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -12
  733. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -12
  734. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +73 -78
  735. package/src/transformers/internal/GenericTransformer.ts +96 -104
  736. package/src/typings/Atomic.ts +13 -18
  737. package/src/typings/ClassProperties.ts +5 -5
  738. package/src/typings/Customizable.ts +5 -5
  739. package/src/typings/ProtobufAtomic.ts +19 -19
  740. package/src/typings/SpecialFields.ts +3 -3
  741. package/src/typings/ValidationPipe.ts +9 -9
  742. package/src/typings/Writable.ts +11 -11
  743. package/src/utils/ArrayUtil.ts +43 -45
  744. package/src/utils/Escaper.ts +46 -46
  745. package/src/utils/MapUtil.ts +12 -12
  746. package/src/utils/NameEncoder.ts +32 -32
  747. package/src/utils/NamingConvention.ts +87 -91
  748. package/src/utils/PatternUtil.ts +29 -33
  749. package/src/utils/RandomGenerator.ts +83 -83
  750. package/src/utils/Singleton.ts +16 -17
  751. package/src/utils/StringUtil.ts +4 -4
@@ -1,880 +1,825 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../factories/ExpressionFactory";
4
- import { IdentifierFactory } from "../factories/IdentifierFactory";
5
- import { MetadataCollection } from "../factories/MetadataCollection";
6
- import { MetadataFactory } from "../factories/MetadataFactory";
7
- import { StatementFactory } from "../factories/StatementFactory";
8
- import { TemplateFactory } from "../factories/TemplateFactory";
9
- import { TypeFactory } from "../factories/TypeFactory";
10
-
11
- import { Metadata } from "../schemas/metadata/Metadata";
12
- import { MetadataArray } from "../schemas/metadata/MetadataArray";
13
- import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
14
- import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
15
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
16
- import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
17
- import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
18
-
19
- import { IProject } from "../transformers/IProject";
20
- import { TransformerError } from "../transformers/TransformerError";
21
-
22
- import { Escaper } from "../utils/Escaper";
23
-
24
- import { FunctionImporter } from "./helpers/FunctionImporeter";
25
- import { RandomJoiner } from "./helpers/RandomJoiner";
26
- import { RandomRanger } from "./helpers/RandomRanger";
27
- import { random_custom } from "./internal/random_custom";
28
-
29
- export namespace RandomProgrammer {
30
- export const write =
31
- (project: IProject) =>
32
- (modulo: ts.LeftHandSideExpression) =>
33
- (init?: ts.Expression) => {
34
- const importer: FunctionImporter = new FunctionImporter(
35
- modulo.getText(),
36
- );
37
- return (type: ts.Type, name?: string) => {
38
- // INITIALIZE METADATA
39
- const collection: MetadataCollection = new MetadataCollection();
40
- const result = MetadataFactory.analyze(
41
- project.checker,
42
- project.context,
43
- )({
44
- escape: false,
45
- constant: true,
46
- absorb: true,
47
- validate: (meta) => {
48
- const output: string[] = [];
49
- if (meta.natives.some((n) => n === "WeakSet"))
50
- output.push(`WeakSet is not supported.`);
51
- else if (meta.natives.some((n) => n === "WeakMap"))
52
- output.push(`WeakMap is not supported.`);
53
- return output;
54
- },
55
- })(collection)(type);
56
- if (result.success === false)
57
- throw TransformerError.from(`typia.${importer.method}`)(
58
- result.errors,
59
- );
60
-
61
- // GENERATE FUNCTION
62
- const functions = {
63
- objects: write_object_functions(importer)(collection),
64
- arrays: write_array_functions(importer)(collection),
65
- tuples: write_tuple_functions(importer)(collection),
66
- };
67
-
68
- const output: ts.Expression = decode(importer)({
69
- function: false,
70
- recursive: false,
71
- })(result.data);
72
-
73
- return ts.factory.createArrowFunction(
74
- undefined,
75
- undefined,
76
- [
77
- IdentifierFactory.parameter(
78
- "generator",
79
- ts.factory.createTypeReferenceNode(
80
- "Partial<typia.IRandomGenerator>",
81
- ),
82
- init ??
83
- ts.factory.createToken(
84
- ts.SyntaxKind.QuestionToken,
85
- ),
86
- ),
87
- ],
88
- ts.factory.createTypeReferenceNode(
89
- `typia.Resolved<${
90
- name ??
91
- TypeFactory.getFullName(project.checker)(type)
92
- }>`,
93
- ),
94
- undefined,
95
- ts.factory.createBlock(
96
- [
97
- ...importer.declare(modulo),
98
- ...functions.objects,
99
- ...functions.arrays,
100
- ...functions.tuples,
101
- ts.factory.createReturnStatement(output),
102
- ],
103
- true,
104
- ),
105
- );
106
- };
107
- };
108
-
109
- const write_object_functions =
110
- (importer: FunctionImporter) =>
111
- (collection: MetadataCollection): ts.VariableStatement[] =>
112
- collection.objects().map((obj, i) =>
113
- StatementFactory.constant(
114
- PREFIX.object(i),
115
- ts.factory.createArrowFunction(
116
- undefined,
117
- undefined,
118
- [
119
- IdentifierFactory.parameter(
120
- "_recursive",
121
- TypeFactory.keyword("boolean"),
122
- ts.factory.createIdentifier(
123
- String(obj.recursive),
124
- ),
125
- ),
126
- IdentifierFactory.parameter(
127
- "_depth",
128
- TypeFactory.keyword("number"),
129
- ExpressionFactory.number(0),
130
- ),
131
- ],
132
- TypeFactory.keyword("any"),
133
- undefined,
134
- RandomJoiner.object(COALESCE(importer))(
135
- decode(importer)({
136
- recursive: obj.recursive,
137
- function: true,
138
- }),
139
- )(obj),
140
- ),
141
- ),
142
- );
143
-
144
- const write_array_functions =
145
- (importer: FunctionImporter) =>
146
- (collection: MetadataCollection): ts.VariableStatement[] =>
147
- collection
148
- .arrays()
149
- .filter((a) => a.recursive)
150
- .map((array, i) =>
151
- StatementFactory.constant(
152
- PREFIX.array(i),
153
- ts.factory.createArrowFunction(
154
- undefined,
155
- undefined,
156
- [
157
- IdentifierFactory.parameter(
158
- "length",
159
- TypeFactory.keyword("number"),
160
- ),
161
- IdentifierFactory.parameter(
162
- "_recursive",
163
- TypeFactory.keyword("boolean"),
164
- ts.factory.createTrue(),
165
- ),
166
- IdentifierFactory.parameter(
167
- "_depth",
168
- TypeFactory.keyword("number"),
169
- ExpressionFactory.number(0),
170
- ),
171
- ],
172
- TypeFactory.keyword("any"),
173
- undefined,
174
- RandomJoiner.array(COALESCE(importer))(
175
- decode(importer)({
176
- recursive: true,
177
- function: true,
178
- }),
179
- )({
180
- recursive: true,
181
- function: true,
182
- })(ts.factory.createIdentifier("length"))(
183
- array.value,
184
- ),
185
- ),
186
- ),
187
- );
188
-
189
- const write_tuple_functions =
190
- (importer: FunctionImporter) =>
191
- (collection: MetadataCollection): ts.VariableStatement[] =>
192
- collection
193
- .tuples()
194
- .filter((a) => a.recursive)
195
- .map((tuple, i) =>
196
- StatementFactory.constant(
197
- PREFIX.tuple(i),
198
- ts.factory.createArrowFunction(
199
- undefined,
200
- undefined,
201
- [
202
- IdentifierFactory.parameter(
203
- "_recursive",
204
- TypeFactory.keyword("boolean"),
205
- ts.factory.createTrue(),
206
- ),
207
- IdentifierFactory.parameter(
208
- "_depth",
209
- TypeFactory.keyword("number"),
210
- ExpressionFactory.number(0),
211
- ),
212
- ],
213
- TypeFactory.keyword("any"),
214
- undefined,
215
- RandomJoiner.tuple(
216
- decode(importer)({
217
- function: true,
218
- recursive: true,
219
- }),
220
- )(tuple.elements),
221
- ),
222
- ),
223
- );
224
-
225
- /* -----------------------------------------------------------
226
- DECODERS
227
- ----------------------------------------------------------- */
228
- const decode =
229
- (importer: FunctionImporter) =>
230
- (explore: IExplore) =>
231
- (meta: Metadata): ts.Expression => {
232
- const expressions: ts.Expression[] = [];
233
- if (meta.any)
234
- expressions.push(
235
- ts.factory.createStringLiteral("any type used..."),
236
- );
237
-
238
- // NULL COALESCING
239
- if (meta.isRequired() === false || meta.functional === true)
240
- expressions.push(ts.factory.createIdentifier("undefined"));
241
- if (meta.nullable === true)
242
- expressions.push(ts.factory.createNull());
243
-
244
- // CONSTANT TYPES
245
- for (const constant of meta.constants)
246
- for (const value of constant.values)
247
- expressions.push(decode_atomic(value));
248
-
249
- // ATOMIC VARIABLES
250
- for (const template of meta.templates)
251
- expressions.push(decode_template(importer)(explore)(template));
252
- for (const atomic of meta.atomics)
253
- if (atomic.type === "boolean")
254
- expressions.push(decode_boolean(importer));
255
- else if (atomic.type === "number")
256
- expressions.push(...decode_number(importer)(atomic));
257
- else if (atomic.type === "string")
258
- expressions.push(...decode_string(importer)(atomic));
259
- else if (atomic.type === "bigint")
260
- expressions.push(...decode_bigint(importer)(atomic));
261
-
262
- // INSTANCE TYPES
263
- if (meta.escaped)
264
- expressions.push(
265
- decode(importer)(explore)(meta.escaped.returns),
266
- );
267
- for (const array of meta.arrays)
268
- expressions.push(...decode_array(importer)(explore)(array));
269
- for (const tuple of meta.tuples)
270
- expressions.push(decode_tuple(importer)(explore)(tuple));
271
- for (const o of meta.objects)
272
- expressions.push(decode_object(importer)(explore)(o));
273
- for (const native of meta.natives)
274
- expressions.push(decode_native(importer)(native));
275
- for (const set of meta.sets)
276
- expressions.push(decode_set(importer)(explore)(set));
277
- for (const map of meta.maps)
278
- expressions.push(decode_map(importer)(explore)(map));
279
-
280
- // PICK UP A TYPE
281
- if (expressions.length === 1) return expressions[0]!;
282
- return ts.factory.createCallExpression(
283
- ts.factory.createCallExpression(
284
- importer.use("pick"),
285
- undefined,
286
- [
287
- ts.factory.createArrayLiteralExpression(
288
- expressions.map((expr) =>
289
- ts.factory.createArrowFunction(
290
- undefined,
291
- undefined,
292
- [],
293
- undefined,
294
- undefined,
295
- expr,
296
- ),
297
- ),
298
- true,
299
- ),
300
- ],
301
- ),
302
- undefined,
303
- undefined,
304
- );
305
- };
306
-
307
- const decode_boolean = (importer: FunctionImporter) =>
308
- ts.factory.createCallExpression(
309
- COALESCE(importer)("boolean"),
310
- undefined,
311
- undefined,
312
- );
313
-
314
- const decode_atomic = (value: Atomic) =>
315
- typeof value === "boolean"
316
- ? ts.factory.createIdentifier(value.toString())
317
- : typeof value === "number"
318
- ? ExpressionFactory.number(value)
319
- : typeof value === "string"
320
- ? ts.factory.createStringLiteral(value)
321
- : ExpressionFactory.bigint(Number(value));
322
-
323
- const decode_template =
324
- (importer: FunctionImporter) =>
325
- (explore: IExplore) =>
326
- (template: Metadata[]) =>
327
- TemplateFactory.generate(
328
- template.map((meta) => decode(importer)(explore)(meta)),
329
- );
330
-
331
- const decode_number =
332
- (importer: FunctionImporter) =>
333
- (atomic: MetadataAtomic): ts.Expression[] =>
334
- (atomic.tags.length ? atomic.tags : [[]]).map((tags) => {
335
- const type = tags.find(
336
- (t) =>
337
- t.kind === "type" &&
338
- (t.value === "int32" || t.value === "int64"),
339
- )
340
- ? "int"
341
- : tags.find(
342
- (t) =>
343
- t.kind === "type" &&
344
- (t.value === "uint32" || t.value === "uint64"),
345
- )
346
- ? "uint"
347
- : "double";
348
- const multiply = tags.find((t) => t.kind === "multipleOf");
349
- return random_custom(COALESCE(importer))("number")(tags)(
350
- RandomRanger.number({
351
- type,
352
- transform: (value) => ExpressionFactory.number(value),
353
- setter: (args) =>
354
- ts.factory.createCallExpression(
355
- type !== "double" || multiply !== undefined
356
- ? COALESCE(importer)("integer")
357
- : COALESCE(importer)("number"),
358
- undefined,
359
- args.map((val) =>
360
- ExpressionFactory.number(val),
361
- ),
362
- ),
363
- })({
364
- minimum: 0,
365
- maximum: 100,
366
- gap: 10,
367
- })(tags),
368
- );
369
- });
370
-
371
- const decode_bigint =
372
- (importer: FunctionImporter) =>
373
- (atomic: MetadataAtomic): ts.Expression[] =>
374
- (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
375
- random_custom(COALESCE(importer))("bigint")(tags)(
376
- RandomRanger.number({
377
- type: tags.find(
378
- (t) =>
379
- t.kind === "type" &&
380
- (t.value === "uint" || t.value === "uint64"),
381
- )
382
- ? "uint"
383
- : "int",
384
- transform: (value) => ExpressionFactory.bigint(value),
385
- setter: (args) =>
386
- ts.factory.createCallExpression(
387
- COALESCE(importer)("bigint"),
388
- undefined,
389
- args.map((value) =>
390
- ExpressionFactory.bigint(value),
391
- ),
392
- ),
393
- })({
394
- minimum: 0,
395
- maximum: 100,
396
- gap: 10,
397
- })(tags),
398
- ),
399
- );
400
-
401
- const decode_string =
402
- (importer: FunctionImporter) =>
403
- (atomic: MetadataAtomic): ts.Expression[] =>
404
- (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
405
- random_custom(COALESCE(importer))("string")(tags)(
406
- (() => {
407
- for (const t of tags)
408
- if (t.kind === "format")
409
- return ts.factory.createCallExpression(
410
- COALESCE(importer)(
411
- t.value === "date-time"
412
- ? "datetime"
413
- : t.value,
414
- ),
415
- undefined,
416
- undefined,
417
- );
418
- else if (t.kind === "pattern")
419
- return ts.factory.createCallExpression(
420
- COALESCE(importer)("pattern"),
421
- undefined,
422
- [
423
- ts.factory.createIdentifier(
424
- `/${t.value}/`,
425
- ),
426
- ],
427
- );
428
-
429
- const tail = RandomRanger.length(COALESCE(importer))({
430
- minimum: 5,
431
- maximum: 25,
432
- gap: 5,
433
- })({
434
- minimum: "minLength",
435
- maximum: "maxLength",
436
- })(tags);
437
- return ts.factory.createCallExpression(
438
- COALESCE(importer)("string"),
439
- undefined,
440
- tail ? [tail] : undefined,
441
- );
442
- })(),
443
- ),
444
- );
445
-
446
- const decode_array =
447
- (importer: FunctionImporter) =>
448
- (explore: IExplore) =>
449
- (array: MetadataArray): ts.Expression[] => {
450
- const lengths: Array<ts.Expression | undefined> = (
451
- array.tags.length ? array.tags : [[]]
452
- ).map((tags) =>
453
- RandomRanger.length(COALESCE(importer))({
454
- minimum: 0,
455
- maximum: 3,
456
- gap: 3,
457
- })({
458
- minimum: "minItems",
459
- maximum: "maxItems",
460
- })(tags),
461
- );
462
- if (array.type.recursive)
463
- return lengths.map((len) =>
464
- ts.factory.createCallExpression(
465
- ts.factory.createIdentifier(
466
- importer.useLocal(PREFIX.array(array.type.index!)),
467
- ),
468
- undefined,
469
- [
470
- len ?? COALESCE(importer)("length"),
471
- ts.factory.createTrue(),
472
- explore.recursive
473
- ? ts.factory.createAdd(
474
- ExpressionFactory.number(1),
475
- ts.factory.createIdentifier("_depth"),
476
- )
477
- : ExpressionFactory.number(0),
478
- ],
479
- ),
480
- );
481
- return lengths.map((len) => {
482
- const expr: ts.Expression = RandomJoiner.array(
483
- COALESCE(importer),
484
- )(decode(importer)(explore))(explore)(len)(array.type.value);
485
- return explore.recursive
486
- ? ts.factory.createConditionalExpression(
487
- ts.factory.createLogicalAnd(
488
- ts.factory.createIdentifier("_recursive"),
489
- ts.factory.createLessThan(
490
- ExpressionFactory.number(5),
491
- ts.factory.createIdentifier("_depth"),
492
- ),
493
- ),
494
- undefined,
495
- ts.factory.createIdentifier("[]"),
496
- undefined,
497
- expr,
498
- )
499
- : expr;
500
- });
501
- };
502
-
503
- const decode_tuple =
504
- (importer: FunctionImporter) =>
505
- (explore: IExplore) =>
506
- (tuple: MetadataTuple): ts.Expression =>
507
- tuple.type.recursive
508
- ? ts.factory.createCallExpression(
509
- ts.factory.createIdentifier(
510
- importer.useLocal(PREFIX.tuple(tuple.type.index!)),
511
- ),
512
- undefined,
513
- [
514
- ts.factory.createTrue(),
515
- explore.recursive
516
- ? ts.factory.createAdd(
517
- ExpressionFactory.number(1),
518
- ts.factory.createIdentifier("_depth"),
519
- )
520
- : ExpressionFactory.number(0),
521
- ],
522
- )
523
- : RandomJoiner.tuple(decode(importer)(explore))(
524
- tuple.type.elements,
525
- );
526
-
527
- const decode_object =
528
- (importer: FunctionImporter) =>
529
- (explore: IExplore) =>
530
- (object: MetadataObject) =>
531
- ts.factory.createCallExpression(
532
- ts.factory.createIdentifier(
533
- importer.useLocal(PREFIX.object(object.index)),
534
- ),
535
- undefined,
536
- explore.function
537
- ? [
538
- explore.recursive
539
- ? ts.factory.createTrue()
540
- : ts.factory.createIdentifier("_recursive"),
541
- ts.factory.createConditionalExpression(
542
- ts.factory.createIdentifier("_recursive"),
543
- undefined,
544
- ts.factory.createAdd(
545
- ExpressionFactory.number(1),
546
- ts.factory.createIdentifier("_depth"),
547
- ),
548
- undefined,
549
- ts.factory.createIdentifier("_depth"),
550
- ),
551
- ]
552
- : undefined,
553
- );
554
-
555
- /* -----------------------------------------------------------
556
- NATIVE CLASSES
557
- ----------------------------------------------------------- */
558
- const decode_set =
559
- (importer: FunctionImporter) =>
560
- (explore: IExplore) =>
561
- (meta: Metadata) =>
562
- ts.factory.createNewExpression(
563
- ts.factory.createIdentifier("Set"),
564
- undefined,
565
- [
566
- decode_array(importer)(explore)(
567
- MetadataArray.create({
568
- tags: [],
569
- type: MetadataArrayType.create({
570
- value: meta,
571
- recursive: false,
572
- index: null,
573
- nullables: [],
574
- name: `Set<${meta.getName()}>`,
575
- }),
576
- }),
577
- )[0]!,
578
- ],
579
- );
580
-
581
- const decode_map =
582
- (importer: FunctionImporter) =>
583
- (explore: IExplore) =>
584
- (map: Metadata.Entry) =>
585
- ts.factory.createNewExpression(
586
- ts.factory.createIdentifier("Map"),
587
- undefined,
588
- [
589
- decode_array(importer)(explore)(
590
- MetadataArray.create({
591
- tags: [],
592
- type: MetadataArrayType.create({
593
- name: `Map<${map.key.getName()}, ${map.value.getName()}>`,
594
- index: null,
595
- recursive: false,
596
- nullables: [],
597
- value: Metadata.create({
598
- ...Metadata.initialize(),
599
- tuples: [
600
- (() => {
601
- const type =
602
- MetadataTupleType.create({
603
- name: `[${map.key.getName()}, ${map.value.getName()}]`,
604
- index: null,
605
- recursive: false,
606
- nullables: [],
607
- elements: [
608
- map.key,
609
- map.value,
610
- ],
611
- });
612
- type.of_map = true;
613
- return MetadataTuple.create({
614
- type,
615
- tags: [],
616
- });
617
- })(),
618
- ],
619
- }),
620
- }),
621
- }),
622
- )[0]!,
623
- ],
624
- );
625
-
626
- const decode_native =
627
- (importer: FunctionImporter) =>
628
- (type: string): ts.Expression => {
629
- if (type === "Boolean") return decode_boolean(importer);
630
- else if (type === "Number")
631
- return decode_number(importer)(
632
- MetadataAtomic.create({
633
- type: "number",
634
- tags: [],
635
- }),
636
- )[0]!;
637
- else if (type === "String")
638
- return decode_string(importer)(
639
- MetadataAtomic.create({
640
- type: "string",
641
- tags: [],
642
- }),
643
- )[0]!;
644
- else if (type === "Date") return decode_native_date(importer);
645
- else if (
646
- type === "Uint8Array" ||
647
- type === "Uint8ClampedArray" ||
648
- type === "Uint16Array" ||
649
- type === "Uint32Array" ||
650
- type === "BigUint64Array" ||
651
- type === "Int8Array" ||
652
- type === "Int16Array" ||
653
- type === "Int32Array" ||
654
- type === "BigInt64Array" ||
655
- type === "Float32Array" ||
656
- type === "Float64Array"
657
- )
658
- return decode_native_byte_array(importer)(type);
659
- else if (type === "ArrayBuffer" || type === "SharedArrayBuffer")
660
- return decode_native_array_buffer(importer)(type);
661
- else if (type === "DataView")
662
- return decode_native_data_view(importer);
663
- else
664
- return ts.factory.createNewExpression(
665
- ts.factory.createIdentifier(type),
666
- undefined,
667
- [],
668
- );
669
- };
670
-
671
- const decode_native_date = (importer: FunctionImporter) =>
672
- ts.factory.createNewExpression(
673
- ts.factory.createIdentifier("Date"),
674
- undefined,
675
- [
676
- ts.factory.createCallExpression(
677
- COALESCE(importer)("datetime"),
678
- undefined,
679
- [],
680
- ),
681
- ],
682
- );
683
-
684
- const decode_native_byte_array =
685
- (importer: FunctionImporter) =>
686
- (
687
- type:
688
- | "Uint8Array"
689
- | "Uint8ClampedArray"
690
- | "Uint16Array"
691
- | "Uint32Array"
692
- | "BigUint64Array"
693
- | "Int8Array"
694
- | "Int16Array"
695
- | "Int32Array"
696
- | "BigInt64Array"
697
- | "Float32Array"
698
- | "Float64Array",
699
- ): ts.Expression => {
700
- new BigInt64Array();
701
- const [minimum, maximum]: [number, number] = (() => {
702
- if (type === "Uint8Array" || type === "Uint8ClampedArray")
703
- return [0, 255];
704
- else if (type === "Uint16Array") return [0, 65535];
705
- else if (type === "Uint32Array") return [0, 4294967295];
706
- else if (type === "BigUint64Array")
707
- return [0, 18446744073709551615];
708
- else if (type === "Int8Array") return [-128, 127];
709
- else if (type === "Int16Array") return [-32768, 32767];
710
- else if (type === "Int32Array")
711
- return [-2147483648, 2147483647];
712
- else if (type === "BigInt64Array")
713
- return [-9223372036854775808, 9223372036854775807];
714
- else if (type === "Float32Array")
715
- return [-1.175494351e38, 3.4028235e38];
716
- return [Number.MIN_VALUE, Number.MAX_VALUE];
717
- })();
718
- const literal =
719
- type === "BigInt64Array" || type === "BigUint64Array"
720
- ? ExpressionFactory.bigint
721
- : ExpressionFactory.number;
722
- return ts.factory.createNewExpression(
723
- ts.factory.createIdentifier(type),
724
- [],
725
- [
726
- ts.factory.createCallExpression(
727
- COALESCE(importer)("array"),
728
- undefined,
729
- [
730
- ts.factory.createArrowFunction(
731
- undefined,
732
- undefined,
733
- [],
734
- TypeFactory.keyword("any"),
735
- undefined,
736
- ts.factory.createCallExpression(
737
- COALESCE(importer)(
738
- type === "Float32Array" ||
739
- type === "Float64Array"
740
- ? "number"
741
- : type === "BigInt64Array" ||
742
- type === "BigUint64Array"
743
- ? "bigint"
744
- : "integer",
745
- ),
746
- undefined,
747
- [literal(minimum), literal(maximum)],
748
- ),
749
- ),
750
- ],
751
- ),
752
- ],
753
- );
754
- };
755
-
756
- const decode_native_array_buffer =
757
- (importer: FunctionImporter) =>
758
- (type: "ArrayBuffer" | "SharedArrayBuffer"): ts.Expression =>
759
- type === "ArrayBuffer"
760
- ? IdentifierFactory.access(
761
- decode_native_byte_array(importer)("Uint8Array"),
762
- )("buffer")
763
- : ExpressionFactory.selfCall(
764
- ts.factory.createBlock(
765
- [
766
- StatementFactory.constant(
767
- "length",
768
- ts.factory.createCallExpression(
769
- COALESCE(importer)("integer"),
770
- undefined,
771
- [],
772
- ),
773
- ),
774
- StatementFactory.constant(
775
- "buffer",
776
- ts.factory.createNewExpression(
777
- ts.factory.createIdentifier(
778
- "SharedArrayBuffer",
779
- ),
780
- [],
781
- [ts.factory.createIdentifier("length")],
782
- ),
783
- ),
784
- StatementFactory.constant(
785
- "bytes",
786
- ts.factory.createNewExpression(
787
- ts.factory.createIdentifier("Uint8Array"),
788
- [],
789
- [ts.factory.createIdentifier("buffer")],
790
- ),
791
- ),
792
- ts.factory.createExpressionStatement(
793
- ts.factory.createCallExpression(
794
- IdentifierFactory.access(
795
- ts.factory.createIdentifier("bytes"),
796
- )("set"),
797
- undefined,
798
- [
799
- ts.factory.createCallExpression(
800
- COALESCE(importer)("array"),
801
- undefined,
802
- [
803
- ts.factory.createArrowFunction(
804
- undefined,
805
- undefined,
806
- [],
807
- TypeFactory.keyword(
808
- "any",
809
- ),
810
- undefined,
811
- ts.factory.createCallExpression(
812
- COALESCE(importer)(
813
- "integer",
814
- ),
815
- undefined,
816
- [
817
- ExpressionFactory.number(
818
- 0,
819
- ),
820
- ExpressionFactory.number(
821
- 255,
822
- ),
823
- ],
824
- ),
825
- ),
826
- ts.factory.createIdentifier(
827
- "length",
828
- ),
829
- ],
830
- ),
831
- ExpressionFactory.number(0),
832
- ],
833
- ),
834
- ),
835
- ts.factory.createReturnStatement(
836
- ts.factory.createIdentifier("buffer"),
837
- ),
838
- ],
839
- true,
840
- ),
841
- );
842
-
843
- const decode_native_data_view = (importer: FunctionImporter) =>
844
- ts.factory.createNewExpression(
845
- ts.factory.createIdentifier("DataView"),
846
- [],
847
- [
848
- IdentifierFactory.access(
849
- decode_native_byte_array(importer)("Uint8Array"),
850
- )("buffer"),
851
- ],
852
- );
853
- }
854
-
855
- type Atomic = boolean | number | string | bigint;
856
- interface IExplore {
857
- function: boolean;
858
- recursive: boolean;
859
- }
860
-
861
- const PREFIX = {
862
- object: (i: number) => `$ro${i}`,
863
- array: (i: number) => `$ra${i}`,
864
- tuple: (i: number) => `$rt${i}`,
865
- };
866
-
867
- const COALESCE = (importer: FunctionImporter) => (name: string) =>
868
- ExpressionFactory.coalesce(
869
- Escaper.variable(name)
870
- ? ts.factory.createPropertyAccessChain(
871
- ts.factory.createIdentifier("generator"),
872
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
873
- ts.factory.createIdentifier(name),
874
- )
875
- : ts.factory.createElementAccessChain(
876
- ts.factory.createIdentifier("generator"),
877
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
878
- ts.factory.createStringLiteral(name),
879
- ),
880
- )(IdentifierFactory.access(importer.use("generator"))(name));
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../factories/ExpressionFactory";
4
+ import { IdentifierFactory } from "../factories/IdentifierFactory";
5
+ import { MetadataCollection } from "../factories/MetadataCollection";
6
+ import { MetadataFactory } from "../factories/MetadataFactory";
7
+ import { StatementFactory } from "../factories/StatementFactory";
8
+ import { TemplateFactory } from "../factories/TemplateFactory";
9
+ import { TypeFactory } from "../factories/TypeFactory";
10
+
11
+ import { Metadata } from "../schemas/metadata/Metadata";
12
+ import { MetadataArray } from "../schemas/metadata/MetadataArray";
13
+ import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
14
+ import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
15
+ import { MetadataObject } from "../schemas/metadata/MetadataObject";
16
+ import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
17
+ import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
18
+
19
+ import { IProject } from "../transformers/IProject";
20
+ import { TransformerError } from "../transformers/TransformerError";
21
+
22
+ import { Escaper } from "../utils/Escaper";
23
+
24
+ import { FunctionImporter } from "./helpers/FunctionImporeter";
25
+ import { RandomJoiner } from "./helpers/RandomJoiner";
26
+ import { RandomRanger } from "./helpers/RandomRanger";
27
+ import { random_custom } from "./internal/random_custom";
28
+
29
+ export namespace RandomProgrammer {
30
+ export const write =
31
+ (project: IProject) =>
32
+ (modulo: ts.LeftHandSideExpression) =>
33
+ (init?: ts.Expression) => {
34
+ const importer: FunctionImporter = new FunctionImporter(modulo.getText());
35
+ return (type: ts.Type, name?: string) => {
36
+ // INITIALIZE METADATA
37
+ const collection: MetadataCollection = new MetadataCollection();
38
+ const result = MetadataFactory.analyze(
39
+ project.checker,
40
+ project.context,
41
+ )({
42
+ escape: false,
43
+ constant: true,
44
+ absorb: true,
45
+ validate: (meta) => {
46
+ const output: string[] = [];
47
+ if (meta.natives.some((n) => n === "WeakSet"))
48
+ output.push(`WeakSet is not supported.`);
49
+ else if (meta.natives.some((n) => n === "WeakMap"))
50
+ output.push(`WeakMap is not supported.`);
51
+ return output;
52
+ },
53
+ })(collection)(type);
54
+ if (result.success === false)
55
+ throw TransformerError.from(`typia.${importer.method}`)(
56
+ result.errors,
57
+ );
58
+
59
+ // GENERATE FUNCTION
60
+ const functions = {
61
+ objects: write_object_functions(importer)(collection),
62
+ arrays: write_array_functions(importer)(collection),
63
+ tuples: write_tuple_functions(importer)(collection),
64
+ };
65
+
66
+ const output: ts.Expression = decode(importer)({
67
+ function: false,
68
+ recursive: false,
69
+ })(result.data);
70
+
71
+ return ts.factory.createArrowFunction(
72
+ undefined,
73
+ undefined,
74
+ [
75
+ IdentifierFactory.parameter(
76
+ "generator",
77
+ ts.factory.createTypeReferenceNode(
78
+ "Partial<typia.IRandomGenerator>",
79
+ ),
80
+ init ?? ts.factory.createToken(ts.SyntaxKind.QuestionToken),
81
+ ),
82
+ ],
83
+ ts.factory.createTypeReferenceNode(
84
+ `typia.Resolved<${
85
+ name ?? TypeFactory.getFullName(project.checker)(type)
86
+ }>`,
87
+ ),
88
+ undefined,
89
+ ts.factory.createBlock(
90
+ [
91
+ ...importer.declare(modulo),
92
+ ...functions.objects,
93
+ ...functions.arrays,
94
+ ...functions.tuples,
95
+ ts.factory.createReturnStatement(output),
96
+ ],
97
+ true,
98
+ ),
99
+ );
100
+ };
101
+ };
102
+
103
+ const write_object_functions =
104
+ (importer: FunctionImporter) =>
105
+ (collection: MetadataCollection): ts.VariableStatement[] =>
106
+ collection.objects().map((obj, i) =>
107
+ StatementFactory.constant(
108
+ PREFIX.object(i),
109
+ ts.factory.createArrowFunction(
110
+ undefined,
111
+ undefined,
112
+ [
113
+ IdentifierFactory.parameter(
114
+ "_recursive",
115
+ TypeFactory.keyword("boolean"),
116
+ ts.factory.createIdentifier(String(obj.recursive)),
117
+ ),
118
+ IdentifierFactory.parameter(
119
+ "_depth",
120
+ TypeFactory.keyword("number"),
121
+ ExpressionFactory.number(0),
122
+ ),
123
+ ],
124
+ TypeFactory.keyword("any"),
125
+ undefined,
126
+ RandomJoiner.object(COALESCE(importer))(
127
+ decode(importer)({
128
+ recursive: obj.recursive,
129
+ function: true,
130
+ }),
131
+ )(obj),
132
+ ),
133
+ ),
134
+ );
135
+
136
+ const write_array_functions =
137
+ (importer: FunctionImporter) =>
138
+ (collection: MetadataCollection): ts.VariableStatement[] =>
139
+ collection
140
+ .arrays()
141
+ .filter((a) => a.recursive)
142
+ .map((array, i) =>
143
+ StatementFactory.constant(
144
+ PREFIX.array(i),
145
+ ts.factory.createArrowFunction(
146
+ undefined,
147
+ undefined,
148
+ [
149
+ IdentifierFactory.parameter(
150
+ "length",
151
+ TypeFactory.keyword("number"),
152
+ ),
153
+ IdentifierFactory.parameter(
154
+ "_recursive",
155
+ TypeFactory.keyword("boolean"),
156
+ ts.factory.createTrue(),
157
+ ),
158
+ IdentifierFactory.parameter(
159
+ "_depth",
160
+ TypeFactory.keyword("number"),
161
+ ExpressionFactory.number(0),
162
+ ),
163
+ ],
164
+ TypeFactory.keyword("any"),
165
+ undefined,
166
+ RandomJoiner.array(COALESCE(importer))(
167
+ decode(importer)({
168
+ recursive: true,
169
+ function: true,
170
+ }),
171
+ )({
172
+ recursive: true,
173
+ function: true,
174
+ })(ts.factory.createIdentifier("length"))(array.value),
175
+ ),
176
+ ),
177
+ );
178
+
179
+ const write_tuple_functions =
180
+ (importer: FunctionImporter) =>
181
+ (collection: MetadataCollection): ts.VariableStatement[] =>
182
+ collection
183
+ .tuples()
184
+ .filter((a) => a.recursive)
185
+ .map((tuple, i) =>
186
+ StatementFactory.constant(
187
+ PREFIX.tuple(i),
188
+ ts.factory.createArrowFunction(
189
+ undefined,
190
+ undefined,
191
+ [
192
+ IdentifierFactory.parameter(
193
+ "_recursive",
194
+ TypeFactory.keyword("boolean"),
195
+ ts.factory.createTrue(),
196
+ ),
197
+ IdentifierFactory.parameter(
198
+ "_depth",
199
+ TypeFactory.keyword("number"),
200
+ ExpressionFactory.number(0),
201
+ ),
202
+ ],
203
+ TypeFactory.keyword("any"),
204
+ undefined,
205
+ RandomJoiner.tuple(
206
+ decode(importer)({
207
+ function: true,
208
+ recursive: true,
209
+ }),
210
+ )(tuple.elements),
211
+ ),
212
+ ),
213
+ );
214
+
215
+ /* -----------------------------------------------------------
216
+ DECODERS
217
+ ----------------------------------------------------------- */
218
+ const decode =
219
+ (importer: FunctionImporter) =>
220
+ (explore: IExplore) =>
221
+ (meta: Metadata): ts.Expression => {
222
+ const expressions: ts.Expression[] = [];
223
+ if (meta.any)
224
+ expressions.push(ts.factory.createStringLiteral("any type used..."));
225
+
226
+ // NULL COALESCING
227
+ if (meta.isRequired() === false || meta.functional === true)
228
+ expressions.push(ts.factory.createIdentifier("undefined"));
229
+ if (meta.nullable === true) expressions.push(ts.factory.createNull());
230
+
231
+ // CONSTANT TYPES
232
+ for (const constant of meta.constants)
233
+ for (const value of constant.values)
234
+ expressions.push(decode_atomic(value));
235
+
236
+ // ATOMIC VARIABLES
237
+ for (const template of meta.templates)
238
+ expressions.push(decode_template(importer)(explore)(template));
239
+ for (const atomic of meta.atomics)
240
+ if (atomic.type === "boolean")
241
+ expressions.push(decode_boolean(importer));
242
+ else if (atomic.type === "number")
243
+ expressions.push(...decode_number(importer)(atomic));
244
+ else if (atomic.type === "string")
245
+ expressions.push(...decode_string(importer)(atomic));
246
+ else if (atomic.type === "bigint")
247
+ expressions.push(...decode_bigint(importer)(atomic));
248
+
249
+ // INSTANCE TYPES
250
+ if (meta.escaped)
251
+ expressions.push(decode(importer)(explore)(meta.escaped.returns));
252
+ for (const array of meta.arrays)
253
+ expressions.push(...decode_array(importer)(explore)(array));
254
+ for (const tuple of meta.tuples)
255
+ expressions.push(decode_tuple(importer)(explore)(tuple));
256
+ for (const o of meta.objects)
257
+ expressions.push(decode_object(importer)(explore)(o));
258
+ for (const native of meta.natives)
259
+ expressions.push(decode_native(importer)(native));
260
+ for (const set of meta.sets)
261
+ expressions.push(decode_set(importer)(explore)(set));
262
+ for (const map of meta.maps)
263
+ expressions.push(decode_map(importer)(explore)(map));
264
+
265
+ // PICK UP A TYPE
266
+ if (expressions.length === 1) return expressions[0]!;
267
+ return ts.factory.createCallExpression(
268
+ ts.factory.createCallExpression(importer.use("pick"), undefined, [
269
+ ts.factory.createArrayLiteralExpression(
270
+ expressions.map((expr) =>
271
+ ts.factory.createArrowFunction(
272
+ undefined,
273
+ undefined,
274
+ [],
275
+ undefined,
276
+ undefined,
277
+ expr,
278
+ ),
279
+ ),
280
+ true,
281
+ ),
282
+ ]),
283
+ undefined,
284
+ undefined,
285
+ );
286
+ };
287
+
288
+ const decode_boolean = (importer: FunctionImporter) =>
289
+ ts.factory.createCallExpression(
290
+ COALESCE(importer)("boolean"),
291
+ undefined,
292
+ undefined,
293
+ );
294
+
295
+ const decode_atomic = (value: Atomic) =>
296
+ typeof value === "boolean"
297
+ ? ts.factory.createIdentifier(value.toString())
298
+ : typeof value === "number"
299
+ ? ExpressionFactory.number(value)
300
+ : typeof value === "string"
301
+ ? ts.factory.createStringLiteral(value)
302
+ : ExpressionFactory.bigint(Number(value));
303
+
304
+ const decode_template =
305
+ (importer: FunctionImporter) =>
306
+ (explore: IExplore) =>
307
+ (template: Metadata[]) =>
308
+ TemplateFactory.generate(
309
+ template.map((meta) => decode(importer)(explore)(meta)),
310
+ );
311
+
312
+ const decode_number =
313
+ (importer: FunctionImporter) =>
314
+ (atomic: MetadataAtomic): ts.Expression[] =>
315
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) => {
316
+ const type = tags.find(
317
+ (t) =>
318
+ t.kind === "type" && (t.value === "int32" || t.value === "int64"),
319
+ )
320
+ ? "int"
321
+ : tags.find(
322
+ (t) =>
323
+ t.kind === "type" &&
324
+ (t.value === "uint32" || t.value === "uint64"),
325
+ )
326
+ ? "uint"
327
+ : "double";
328
+ const multiply = tags.find((t) => t.kind === "multipleOf");
329
+ return random_custom(COALESCE(importer))("number")(tags)(
330
+ RandomRanger.number({
331
+ type,
332
+ transform: (value) => ExpressionFactory.number(value),
333
+ setter: (args) =>
334
+ ts.factory.createCallExpression(
335
+ type !== "double" || multiply !== undefined
336
+ ? COALESCE(importer)("integer")
337
+ : COALESCE(importer)("number"),
338
+ undefined,
339
+ args.map((val) => ExpressionFactory.number(val)),
340
+ ),
341
+ })({
342
+ minimum: 0,
343
+ maximum: 100,
344
+ gap: 10,
345
+ })(tags),
346
+ );
347
+ });
348
+
349
+ const decode_bigint =
350
+ (importer: FunctionImporter) =>
351
+ (atomic: MetadataAtomic): ts.Expression[] =>
352
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
353
+ random_custom(COALESCE(importer))("bigint")(tags)(
354
+ RandomRanger.number({
355
+ type: tags.find(
356
+ (t) =>
357
+ t.kind === "type" &&
358
+ (t.value === "uint" || t.value === "uint64"),
359
+ )
360
+ ? "uint"
361
+ : "int",
362
+ transform: (value) => ExpressionFactory.bigint(value),
363
+ setter: (args) =>
364
+ ts.factory.createCallExpression(
365
+ COALESCE(importer)("bigint"),
366
+ undefined,
367
+ args.map((value) => ExpressionFactory.bigint(value)),
368
+ ),
369
+ })({
370
+ minimum: 0,
371
+ maximum: 100,
372
+ gap: 10,
373
+ })(tags),
374
+ ),
375
+ );
376
+
377
+ const decode_string =
378
+ (importer: FunctionImporter) =>
379
+ (atomic: MetadataAtomic): ts.Expression[] =>
380
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
381
+ random_custom(COALESCE(importer))("string")(tags)(
382
+ (() => {
383
+ for (const t of tags)
384
+ if (t.kind === "format")
385
+ return ts.factory.createCallExpression(
386
+ COALESCE(importer)(
387
+ t.value === "date-time" ? "datetime" : t.value,
388
+ ),
389
+ undefined,
390
+ undefined,
391
+ );
392
+ else if (t.kind === "pattern")
393
+ return ts.factory.createCallExpression(
394
+ COALESCE(importer)("pattern"),
395
+ undefined,
396
+ [ts.factory.createIdentifier(`/${t.value}/`)],
397
+ );
398
+
399
+ const tail = RandomRanger.length(COALESCE(importer))({
400
+ minimum: 5,
401
+ maximum: 25,
402
+ gap: 5,
403
+ })({
404
+ minimum: "minLength",
405
+ maximum: "maxLength",
406
+ })(tags);
407
+ return ts.factory.createCallExpression(
408
+ COALESCE(importer)("string"),
409
+ undefined,
410
+ tail ? [tail] : undefined,
411
+ );
412
+ })(),
413
+ ),
414
+ );
415
+
416
+ const decode_array =
417
+ (importer: FunctionImporter) =>
418
+ (explore: IExplore) =>
419
+ (array: MetadataArray): ts.Expression[] => {
420
+ const lengths: Array<ts.Expression | undefined> = (
421
+ array.tags.length ? array.tags : [[]]
422
+ ).map((tags) =>
423
+ RandomRanger.length(COALESCE(importer))({
424
+ minimum: 0,
425
+ maximum: 3,
426
+ gap: 3,
427
+ })({
428
+ minimum: "minItems",
429
+ maximum: "maxItems",
430
+ })(tags),
431
+ );
432
+ if (array.type.recursive)
433
+ return lengths.map((len) =>
434
+ ts.factory.createCallExpression(
435
+ ts.factory.createIdentifier(
436
+ importer.useLocal(PREFIX.array(array.type.index!)),
437
+ ),
438
+ undefined,
439
+ [
440
+ len ?? COALESCE(importer)("length"),
441
+ ts.factory.createTrue(),
442
+ explore.recursive
443
+ ? ts.factory.createAdd(
444
+ ExpressionFactory.number(1),
445
+ ts.factory.createIdentifier("_depth"),
446
+ )
447
+ : ExpressionFactory.number(0),
448
+ ],
449
+ ),
450
+ );
451
+ return lengths.map((len) => {
452
+ const expr: ts.Expression = RandomJoiner.array(COALESCE(importer))(
453
+ decode(importer)(explore),
454
+ )(explore)(len)(array.type.value);
455
+ return explore.recursive
456
+ ? ts.factory.createConditionalExpression(
457
+ ts.factory.createLogicalAnd(
458
+ ts.factory.createIdentifier("_recursive"),
459
+ ts.factory.createLessThan(
460
+ ExpressionFactory.number(5),
461
+ ts.factory.createIdentifier("_depth"),
462
+ ),
463
+ ),
464
+ undefined,
465
+ ts.factory.createIdentifier("[]"),
466
+ undefined,
467
+ expr,
468
+ )
469
+ : expr;
470
+ });
471
+ };
472
+
473
+ const decode_tuple =
474
+ (importer: FunctionImporter) =>
475
+ (explore: IExplore) =>
476
+ (tuple: MetadataTuple): ts.Expression =>
477
+ tuple.type.recursive
478
+ ? ts.factory.createCallExpression(
479
+ ts.factory.createIdentifier(
480
+ importer.useLocal(PREFIX.tuple(tuple.type.index!)),
481
+ ),
482
+ undefined,
483
+ [
484
+ ts.factory.createTrue(),
485
+ explore.recursive
486
+ ? ts.factory.createAdd(
487
+ ExpressionFactory.number(1),
488
+ ts.factory.createIdentifier("_depth"),
489
+ )
490
+ : ExpressionFactory.number(0),
491
+ ],
492
+ )
493
+ : RandomJoiner.tuple(decode(importer)(explore))(tuple.type.elements);
494
+
495
+ const decode_object =
496
+ (importer: FunctionImporter) =>
497
+ (explore: IExplore) =>
498
+ (object: MetadataObject) =>
499
+ ts.factory.createCallExpression(
500
+ ts.factory.createIdentifier(
501
+ importer.useLocal(PREFIX.object(object.index)),
502
+ ),
503
+ undefined,
504
+ explore.function
505
+ ? [
506
+ explore.recursive
507
+ ? ts.factory.createTrue()
508
+ : ts.factory.createIdentifier("_recursive"),
509
+ ts.factory.createConditionalExpression(
510
+ ts.factory.createIdentifier("_recursive"),
511
+ undefined,
512
+ ts.factory.createAdd(
513
+ ExpressionFactory.number(1),
514
+ ts.factory.createIdentifier("_depth"),
515
+ ),
516
+ undefined,
517
+ ts.factory.createIdentifier("_depth"),
518
+ ),
519
+ ]
520
+ : undefined,
521
+ );
522
+
523
+ /* -----------------------------------------------------------
524
+ NATIVE CLASSES
525
+ ----------------------------------------------------------- */
526
+ const decode_set =
527
+ (importer: FunctionImporter) => (explore: IExplore) => (meta: Metadata) =>
528
+ ts.factory.createNewExpression(
529
+ ts.factory.createIdentifier("Set"),
530
+ undefined,
531
+ [
532
+ decode_array(importer)(explore)(
533
+ MetadataArray.create({
534
+ tags: [],
535
+ type: MetadataArrayType.create({
536
+ value: meta,
537
+ recursive: false,
538
+ index: null,
539
+ nullables: [],
540
+ name: `Set<${meta.getName()}>`,
541
+ }),
542
+ }),
543
+ )[0]!,
544
+ ],
545
+ );
546
+
547
+ const decode_map =
548
+ (importer: FunctionImporter) =>
549
+ (explore: IExplore) =>
550
+ (map: Metadata.Entry) =>
551
+ ts.factory.createNewExpression(
552
+ ts.factory.createIdentifier("Map"),
553
+ undefined,
554
+ [
555
+ decode_array(importer)(explore)(
556
+ MetadataArray.create({
557
+ tags: [],
558
+ type: MetadataArrayType.create({
559
+ name: `Map<${map.key.getName()}, ${map.value.getName()}>`,
560
+ index: null,
561
+ recursive: false,
562
+ nullables: [],
563
+ value: Metadata.create({
564
+ ...Metadata.initialize(),
565
+ tuples: [
566
+ (() => {
567
+ const type = MetadataTupleType.create({
568
+ name: `[${map.key.getName()}, ${map.value.getName()}]`,
569
+ index: null,
570
+ recursive: false,
571
+ nullables: [],
572
+ elements: [map.key, map.value],
573
+ });
574
+ type.of_map = true;
575
+ return MetadataTuple.create({
576
+ type,
577
+ tags: [],
578
+ });
579
+ })(),
580
+ ],
581
+ }),
582
+ }),
583
+ }),
584
+ )[0]!,
585
+ ],
586
+ );
587
+
588
+ const decode_native =
589
+ (importer: FunctionImporter) =>
590
+ (type: string): ts.Expression => {
591
+ if (type === "Boolean") return decode_boolean(importer);
592
+ else if (type === "Number")
593
+ return decode_number(importer)(
594
+ MetadataAtomic.create({
595
+ type: "number",
596
+ tags: [],
597
+ }),
598
+ )[0]!;
599
+ else if (type === "String")
600
+ return decode_string(importer)(
601
+ MetadataAtomic.create({
602
+ type: "string",
603
+ tags: [],
604
+ }),
605
+ )[0]!;
606
+ else if (type === "Date") return decode_native_date(importer);
607
+ else if (
608
+ type === "Uint8Array" ||
609
+ type === "Uint8ClampedArray" ||
610
+ type === "Uint16Array" ||
611
+ type === "Uint32Array" ||
612
+ type === "BigUint64Array" ||
613
+ type === "Int8Array" ||
614
+ type === "Int16Array" ||
615
+ type === "Int32Array" ||
616
+ type === "BigInt64Array" ||
617
+ type === "Float32Array" ||
618
+ type === "Float64Array"
619
+ )
620
+ return decode_native_byte_array(importer)(type);
621
+ else if (type === "ArrayBuffer" || type === "SharedArrayBuffer")
622
+ return decode_native_array_buffer(importer)(type);
623
+ else if (type === "DataView") return decode_native_data_view(importer);
624
+ else
625
+ return ts.factory.createNewExpression(
626
+ ts.factory.createIdentifier(type),
627
+ undefined,
628
+ [],
629
+ );
630
+ };
631
+
632
+ const decode_native_date = (importer: FunctionImporter) =>
633
+ ts.factory.createNewExpression(
634
+ ts.factory.createIdentifier("Date"),
635
+ undefined,
636
+ [
637
+ ts.factory.createCallExpression(
638
+ COALESCE(importer)("datetime"),
639
+ undefined,
640
+ [],
641
+ ),
642
+ ],
643
+ );
644
+
645
+ const decode_native_byte_array =
646
+ (importer: FunctionImporter) =>
647
+ (
648
+ type:
649
+ | "Uint8Array"
650
+ | "Uint8ClampedArray"
651
+ | "Uint16Array"
652
+ | "Uint32Array"
653
+ | "BigUint64Array"
654
+ | "Int8Array"
655
+ | "Int16Array"
656
+ | "Int32Array"
657
+ | "BigInt64Array"
658
+ | "Float32Array"
659
+ | "Float64Array",
660
+ ): ts.Expression => {
661
+ new BigInt64Array();
662
+ const [minimum, maximum]: [number, number] = (() => {
663
+ if (type === "Uint8Array" || type === "Uint8ClampedArray")
664
+ return [0, 255];
665
+ else if (type === "Uint16Array") return [0, 65535];
666
+ else if (type === "Uint32Array") return [0, 4294967295];
667
+ else if (type === "BigUint64Array") return [0, 18446744073709551615];
668
+ else if (type === "Int8Array") return [-128, 127];
669
+ else if (type === "Int16Array") return [-32768, 32767];
670
+ else if (type === "Int32Array") return [-2147483648, 2147483647];
671
+ else if (type === "BigInt64Array")
672
+ return [-9223372036854775808, 9223372036854775807];
673
+ else if (type === "Float32Array")
674
+ return [-1.175494351e38, 3.4028235e38];
675
+ return [Number.MIN_VALUE, Number.MAX_VALUE];
676
+ })();
677
+ const literal =
678
+ type === "BigInt64Array" || type === "BigUint64Array"
679
+ ? ExpressionFactory.bigint
680
+ : ExpressionFactory.number;
681
+ return ts.factory.createNewExpression(
682
+ ts.factory.createIdentifier(type),
683
+ [],
684
+ [
685
+ ts.factory.createCallExpression(
686
+ COALESCE(importer)("array"),
687
+ undefined,
688
+ [
689
+ ts.factory.createArrowFunction(
690
+ undefined,
691
+ undefined,
692
+ [],
693
+ TypeFactory.keyword("any"),
694
+ undefined,
695
+ ts.factory.createCallExpression(
696
+ COALESCE(importer)(
697
+ type === "Float32Array" || type === "Float64Array"
698
+ ? "number"
699
+ : type === "BigInt64Array" || type === "BigUint64Array"
700
+ ? "bigint"
701
+ : "integer",
702
+ ),
703
+ undefined,
704
+ [literal(minimum), literal(maximum)],
705
+ ),
706
+ ),
707
+ ],
708
+ ),
709
+ ],
710
+ );
711
+ };
712
+
713
+ const decode_native_array_buffer =
714
+ (importer: FunctionImporter) =>
715
+ (type: "ArrayBuffer" | "SharedArrayBuffer"): ts.Expression =>
716
+ type === "ArrayBuffer"
717
+ ? IdentifierFactory.access(
718
+ decode_native_byte_array(importer)("Uint8Array"),
719
+ )("buffer")
720
+ : ExpressionFactory.selfCall(
721
+ ts.factory.createBlock(
722
+ [
723
+ StatementFactory.constant(
724
+ "length",
725
+ ts.factory.createCallExpression(
726
+ COALESCE(importer)("integer"),
727
+ undefined,
728
+ [],
729
+ ),
730
+ ),
731
+ StatementFactory.constant(
732
+ "buffer",
733
+ ts.factory.createNewExpression(
734
+ ts.factory.createIdentifier("SharedArrayBuffer"),
735
+ [],
736
+ [ts.factory.createIdentifier("length")],
737
+ ),
738
+ ),
739
+ StatementFactory.constant(
740
+ "bytes",
741
+ ts.factory.createNewExpression(
742
+ ts.factory.createIdentifier("Uint8Array"),
743
+ [],
744
+ [ts.factory.createIdentifier("buffer")],
745
+ ),
746
+ ),
747
+ ts.factory.createExpressionStatement(
748
+ ts.factory.createCallExpression(
749
+ IdentifierFactory.access(
750
+ ts.factory.createIdentifier("bytes"),
751
+ )("set"),
752
+ undefined,
753
+ [
754
+ ts.factory.createCallExpression(
755
+ COALESCE(importer)("array"),
756
+ undefined,
757
+ [
758
+ ts.factory.createArrowFunction(
759
+ undefined,
760
+ undefined,
761
+ [],
762
+ TypeFactory.keyword("any"),
763
+ undefined,
764
+ ts.factory.createCallExpression(
765
+ COALESCE(importer)("integer"),
766
+ undefined,
767
+ [
768
+ ExpressionFactory.number(0),
769
+ ExpressionFactory.number(255),
770
+ ],
771
+ ),
772
+ ),
773
+ ts.factory.createIdentifier("length"),
774
+ ],
775
+ ),
776
+ ExpressionFactory.number(0),
777
+ ],
778
+ ),
779
+ ),
780
+ ts.factory.createReturnStatement(
781
+ ts.factory.createIdentifier("buffer"),
782
+ ),
783
+ ],
784
+ true,
785
+ ),
786
+ );
787
+
788
+ const decode_native_data_view = (importer: FunctionImporter) =>
789
+ ts.factory.createNewExpression(
790
+ ts.factory.createIdentifier("DataView"),
791
+ [],
792
+ [
793
+ IdentifierFactory.access(
794
+ decode_native_byte_array(importer)("Uint8Array"),
795
+ )("buffer"),
796
+ ],
797
+ );
798
+ }
799
+
800
+ type Atomic = boolean | number | string | bigint;
801
+ interface IExplore {
802
+ function: boolean;
803
+ recursive: boolean;
804
+ }
805
+
806
+ const PREFIX = {
807
+ object: (i: number) => `$ro${i}`,
808
+ array: (i: number) => `$ra${i}`,
809
+ tuple: (i: number) => `$rt${i}`,
810
+ };
811
+
812
+ const COALESCE = (importer: FunctionImporter) => (name: string) =>
813
+ ExpressionFactory.coalesce(
814
+ Escaper.variable(name)
815
+ ? ts.factory.createPropertyAccessChain(
816
+ ts.factory.createIdentifier("generator"),
817
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
818
+ ts.factory.createIdentifier(name),
819
+ )
820
+ : ts.factory.createElementAccessChain(
821
+ ts.factory.createIdentifier("generator"),
822
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
823
+ ts.factory.createStringLiteral(name),
824
+ ),
825
+ )(IdentifierFactory.access(importer.use("generator"))(name));