typia 7.0.0-dev.20241005 → 7.0.0-dev.20241007

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 (630) hide show
  1. package/lib/IRandomGenerator.d.ts +17 -21
  2. package/lib/factories/ExpressionFactory.js +2 -2
  3. package/lib/factories/ExpressionFactory.js.map +1 -1
  4. package/lib/factories/LiteralFactory.d.ts +1 -1
  5. package/lib/factories/LiteralFactory.js +20 -17
  6. package/lib/factories/LiteralFactory.js.map +1 -1
  7. package/lib/factories/MetadataCommentTagFactory.js +28 -6
  8. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  9. package/lib/index.mjs +184 -1437
  10. package/lib/index.mjs.map +1 -1
  11. package/lib/internal/$randomArray.d.ts +1 -1
  12. package/lib/internal/$randomArray.js +1 -0
  13. package/lib/internal/$randomArray.js.map +1 -1
  14. package/lib/internal/$randomBigint.d.ts +1 -1
  15. package/lib/internal/$randomBigint.js +1 -6
  16. package/lib/internal/$randomBigint.js.map +1 -1
  17. package/lib/internal/$randomFormatByte.d.ts +1 -0
  18. package/lib/internal/$randomFormatByte.js +7 -0
  19. package/lib/internal/$randomFormatByte.js.map +1 -0
  20. package/lib/internal/$randomFormatDate.js +1 -0
  21. package/lib/internal/$randomFormatDate.js.map +1 -1
  22. package/lib/internal/$randomFormatDatetime.js +1 -0
  23. package/lib/internal/$randomFormatDatetime.js.map +1 -1
  24. package/lib/internal/$randomFormatDuration.js +1 -0
  25. package/lib/internal/$randomFormatDuration.js.map +1 -1
  26. package/lib/internal/$randomFormatIpv4.js +1 -0
  27. package/lib/internal/$randomFormatIpv4.js.map +1 -1
  28. package/lib/internal/$randomFormatIpv6.js +1 -0
  29. package/lib/internal/$randomFormatIpv6.js.map +1 -1
  30. package/lib/internal/$randomFormatRelativeJsonPointer.js +5 -5
  31. package/lib/internal/$randomFormatRelativeJsonPointer.js.map +1 -1
  32. package/lib/internal/$randomFormatTime.js +2 -1
  33. package/lib/internal/$randomFormatTime.js.map +1 -1
  34. package/lib/internal/$randomFormatUuid.d.ts +1 -0
  35. package/lib/internal/{$randomUuid.js → $randomFormatUuid.js} +4 -4
  36. package/lib/internal/$randomFormatUuid.js.map +1 -0
  37. package/lib/internal/$randomInteger.d.ts +1 -1
  38. package/lib/internal/$randomInteger.js +7 -4
  39. package/lib/internal/$randomInteger.js.map +1 -1
  40. package/lib/internal/$randomNumber.d.ts +1 -1
  41. package/lib/internal/$randomNumber.js +14 -11
  42. package/lib/internal/$randomNumber.js.map +1 -1
  43. package/lib/internal/$randomPick.js +1 -0
  44. package/lib/internal/$randomPick.js.map +1 -1
  45. package/lib/internal/$randomString.d.ts +1 -1
  46. package/lib/internal/$randomString.js +4 -1
  47. package/lib/internal/$randomString.js.map +1 -1
  48. package/lib/llm.d.ts +2 -4
  49. package/lib/llm.js +1 -28
  50. package/lib/llm.js.map +1 -1
  51. package/lib/module.d.ts +4 -8
  52. package/lib/module.js +3 -7
  53. package/lib/module.js.map +1 -1
  54. package/lib/programmers/FeatureProgrammer.js +1 -1
  55. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  56. package/lib/programmers/RandomProgrammer.js +281 -276
  57. package/lib/programmers/RandomProgrammer.js.map +1 -1
  58. package/lib/programmers/helpers/FunctionProgrammer.d.ts +1 -8
  59. package/lib/programmers/helpers/FunctionProgrammer.js +2 -24
  60. package/lib/programmers/helpers/FunctionProgrammer.js.map +1 -1
  61. package/lib/programmers/helpers/RandomJoiner.d.ts +6 -11
  62. package/lib/programmers/helpers/RandomJoiner.js +68 -41
  63. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  64. package/lib/programmers/helpers/disable_function_programmer_declare.js +1 -4
  65. package/lib/programmers/helpers/disable_function_programmer_declare.js.map +1 -1
  66. package/lib/transformers/features/json/JsonApplicationTransformer.js +1 -1
  67. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  68. package/lib/transformers/features/llm/LlmApplicationTransformer.js +2 -2
  69. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  70. package/lib/transformers/features/llm/LlmSchemaTransformer.js +1 -1
  71. package/lib/transformers/features/llm/LlmSchemaTransformer.js.map +1 -1
  72. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +1 -1
  73. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  74. package/package.json +1 -1
  75. package/src/CamelCase.ts +75 -75
  76. package/src/IRandomGenerator.ts +11 -27
  77. package/src/PascalCase.ts +71 -71
  78. package/src/Primitive.ts +92 -92
  79. package/src/Resolved.ts +74 -74
  80. package/src/SnakeCase.ts +126 -126
  81. package/src/executable/TypiaGenerateWizard.ts +83 -83
  82. package/src/executable/TypiaPatchWizard.ts +42 -42
  83. package/src/executable/TypiaSetupWizard.ts +174 -174
  84. package/src/executable/setup/ArgumentParser.ts +42 -42
  85. package/src/executable/setup/CommandExecutor.ts +8 -8
  86. package/src/executable/setup/FileRetriever.ts +19 -19
  87. package/src/executable/setup/PackageManager.ts +87 -87
  88. package/src/executable/setup/PluginConfigurator.ts +69 -69
  89. package/src/executable/typia.ts +55 -55
  90. package/src/factories/CommentFactory.ts +79 -79
  91. package/src/factories/ExpressionFactory.ts +164 -164
  92. package/src/factories/IdentifierFactory.ts +89 -89
  93. package/src/factories/JsonMetadataFactory.ts +63 -63
  94. package/src/factories/LiteralFactory.ts +18 -15
  95. package/src/factories/MetadataCollection.ts +278 -278
  96. package/src/factories/MetadataCommentTagFactory.ts +650 -622
  97. package/src/factories/MetadataFactory.ts +400 -400
  98. package/src/factories/MetadataTypeTagFactory.ts +385 -385
  99. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  100. package/src/factories/NumericRangeFactory.ts +72 -72
  101. package/src/factories/ProtobufFactory.ts +275 -275
  102. package/src/factories/StatementFactory.ts +90 -90
  103. package/src/factories/TemplateFactory.ts +64 -64
  104. package/src/factories/TypeFactory.ts +140 -140
  105. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +16 -16
  106. package/src/factories/internal/metadata/emplace_metadata_alias.ts +32 -32
  107. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  108. package/src/factories/internal/metadata/emplace_metadata_object.ts +206 -206
  109. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +56 -56
  110. package/src/factories/internal/metadata/explore_metadata.ts +30 -30
  111. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  112. package/src/factories/internal/metadata/iterate_metadata_alias.ts +28 -28
  113. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  114. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  115. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  116. package/src/factories/internal/metadata/iterate_metadata_collection.ts +145 -145
  117. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +32 -32
  118. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  119. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  120. package/src/factories/internal/metadata/iterate_metadata_function.ts +88 -88
  121. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +216 -216
  122. package/src/factories/internal/metadata/iterate_metadata_map.ts +52 -52
  123. package/src/factories/internal/metadata/iterate_metadata_native.ts +236 -236
  124. package/src/factories/internal/metadata/iterate_metadata_object.ts +27 -27
  125. package/src/factories/internal/metadata/iterate_metadata_set.ts +39 -39
  126. package/src/factories/internal/metadata/iterate_metadata_sort.ts +83 -83
  127. package/src/factories/internal/metadata/iterate_metadata_template.ts +42 -42
  128. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  129. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  130. package/src/internal/$accessExpressionAsString.ts +46 -46
  131. package/src/internal/$assertGuard.ts +13 -13
  132. package/src/internal/$functionalTypeGuardErrorFactory.ts +4 -4
  133. package/src/internal/$httpFormDataReadArray.ts +4 -4
  134. package/src/internal/$httpFormDataReadBigint.ts +18 -18
  135. package/src/internal/$httpFormDataReadBlob.ts +10 -10
  136. package/src/internal/$httpFormDataReadBoolean.ts +16 -16
  137. package/src/internal/$httpFormDataReadFile.ts +10 -10
  138. package/src/internal/$httpFormDataReadNumber.ts +15 -15
  139. package/src/internal/$httpFormDataReadString.ts +10 -10
  140. package/src/internal/$httpHeaderReadBigint.ts +10 -10
  141. package/src/internal/$httpHeaderReadBoolean.ts +8 -8
  142. package/src/internal/$httpHeaderReadNumber.ts +7 -7
  143. package/src/internal/$httpParameterBigint.ts +10 -10
  144. package/src/internal/$httpParameterBoolean.ts +8 -8
  145. package/src/internal/$httpParameterNumber.ts +7 -7
  146. package/src/internal/$httpParameterString.ts +2 -2
  147. package/src/internal/$httpQueryParseURLSearchParams.ts +10 -10
  148. package/src/internal/$httpQueryReadArray.ts +4 -4
  149. package/src/internal/$httpQueryReadBigint.ts +12 -12
  150. package/src/internal/$httpQueryReadBoolean.ts +14 -14
  151. package/src/internal/$httpQueryReadNumber.ts +9 -9
  152. package/src/internal/$httpQueryReadString.ts +4 -4
  153. package/src/internal/$isBetween.ts +2 -2
  154. package/src/internal/$isBigintString.ts +8 -8
  155. package/src/internal/$jsonStringifyNumber.ts +12 -12
  156. package/src/internal/$jsonStringifyRest.ts +3 -3
  157. package/src/internal/$jsonStringifyString.ts +43 -43
  158. package/src/internal/$jsonStringifyTail.ts +2 -2
  159. package/src/internal/$llmApplicationFinalize.ts +18 -18
  160. package/src/internal/$miscCloneAny.ts +48 -48
  161. package/src/internal/$notationAny.ts +37 -37
  162. package/src/internal/$notationCamel.ts +13 -13
  163. package/src/internal/$notationPascal.ts +8 -8
  164. package/src/internal/$notationSnake.ts +43 -43
  165. package/src/internal/$randomArray.ts +21 -20
  166. package/src/internal/$randomBigint.ts +6 -15
  167. package/src/internal/$randomBoolean.ts +1 -1
  168. package/src/internal/{$randomByte.ts → $randomFormatByte.ts} +3 -3
  169. package/src/internal/$randomFormatDate.ts +18 -17
  170. package/src/internal/$randomFormatDatetime.ts +16 -15
  171. package/src/internal/$randomFormatDuration.ts +27 -26
  172. package/src/internal/$randomFormatEmail.ts +11 -11
  173. package/src/internal/$randomFormatHostname.ts +6 -6
  174. package/src/internal/$randomFormatIdnEmail.ts +3 -3
  175. package/src/internal/$randomFormatIdnHostname.ts +3 -3
  176. package/src/internal/$randomFormatIpv4.ts +11 -10
  177. package/src/internal/$randomFormatIpv6.ts +11 -10
  178. package/src/internal/$randomFormatIri.ts +3 -3
  179. package/src/internal/$randomFormatIriReference.ts +3 -3
  180. package/src/internal/$randomFormatJsonPointer.ts +7 -7
  181. package/src/internal/$randomFormatPassword.ts +8 -8
  182. package/src/internal/$randomFormatRegex.ts +4 -4
  183. package/src/internal/$randomFormatRelativeJsonPointer.ts +8 -8
  184. package/src/internal/$randomFormatTime.ts +14 -13
  185. package/src/internal/$randomFormatUri.ts +3 -3
  186. package/src/internal/$randomFormatUriReference.ts +3 -3
  187. package/src/internal/$randomFormatUriTemplate.ts +3 -3
  188. package/src/internal/$randomFormatUrl.ts +11 -11
  189. package/src/internal/{$randomUuid.ts → $randomFormatUuid.ts} +6 -6
  190. package/src/internal/$randomInteger.ts +47 -44
  191. package/src/internal/$randomNumber.ts +74 -71
  192. package/src/internal/$randomPattern.ts +10 -10
  193. package/src/internal/$randomPick.ts +9 -8
  194. package/src/internal/$randomString.ts +24 -24
  195. package/src/internal/$throwTypeGuardError.ts +5 -5
  196. package/src/internal/$validateReport.ts +13 -13
  197. package/src/internal/private/$__notationCapitalize.ts +2 -2
  198. package/src/internal/private/$__notationUnsnake.ts +24 -24
  199. package/src/json.ts +651 -651
  200. package/src/llm.ts +178 -186
  201. package/src/module.ts +933 -945
  202. package/src/programmers/AssertProgrammer.ts +456 -456
  203. package/src/programmers/CheckerProgrammer.ts +1610 -1610
  204. package/src/programmers/FeatureProgrammer.ts +616 -616
  205. package/src/programmers/ImportProgrammer.ts +109 -109
  206. package/src/programmers/IsProgrammer.ts +273 -273
  207. package/src/programmers/RandomProgrammer.ts +393 -381
  208. package/src/programmers/TypiaProgrammer.ts +171 -171
  209. package/src/programmers/ValidateProgrammer.ts +430 -430
  210. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +153 -153
  211. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +125 -125
  212. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +115 -115
  213. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  214. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  215. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  216. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +123 -123
  217. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +281 -281
  218. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +134 -134
  219. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  220. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  221. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  222. package/src/programmers/helpers/FunctionProgrammer.ts +67 -101
  223. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  224. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  225. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  226. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  227. package/src/programmers/helpers/RandomJoiner.ts +168 -162
  228. package/src/programmers/helpers/StringifyJoinder.ts +115 -115
  229. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  230. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  231. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  232. package/src/programmers/helpers/disable_function_programmer_declare.ts +1 -4
  233. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +96 -96
  234. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +96 -96
  235. package/src/programmers/http/HttpAssertQueryProgrammer.ts +102 -102
  236. package/src/programmers/http/HttpFormDataProgrammer.ts +308 -308
  237. package/src/programmers/http/HttpHeadersProgrammer.ts +404 -404
  238. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  239. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  240. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  241. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  242. package/src/programmers/http/HttpQueryProgrammer.ts +333 -333
  243. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +90 -90
  244. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +90 -90
  245. package/src/programmers/http/HttpValidateQueryProgrammer.ts +96 -96
  246. package/src/programmers/internal/application_array.ts +56 -56
  247. package/src/programmers/internal/application_bigint.ts +25 -25
  248. package/src/programmers/internal/application_boolean.ts +25 -25
  249. package/src/programmers/internal/application_description.ts +12 -12
  250. package/src/programmers/internal/application_escaped.ts +96 -96
  251. package/src/programmers/internal/application_number.ts +25 -25
  252. package/src/programmers/internal/application_plugin.ts +19 -19
  253. package/src/programmers/internal/application_string.ts +25 -25
  254. package/src/programmers/internal/application_templates.ts +64 -64
  255. package/src/programmers/internal/application_title.ts +20 -20
  256. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  257. package/src/programmers/internal/application_v30_alias.ts +59 -59
  258. package/src/programmers/internal/application_v30_native.ts +29 -29
  259. package/src/programmers/internal/application_v30_object.ts +165 -165
  260. package/src/programmers/internal/application_v30_schema.ts +220 -220
  261. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  262. package/src/programmers/internal/application_v31_alias.ts +47 -47
  263. package/src/programmers/internal/application_v31_constant.ts +29 -29
  264. package/src/programmers/internal/application_v31_native.ts +25 -25
  265. package/src/programmers/internal/application_v31_object.ts +147 -147
  266. package/src/programmers/internal/application_v31_schema.ts +215 -215
  267. package/src/programmers/internal/application_v31_tuple.ts +22 -22
  268. package/src/programmers/internal/check_array_length.ts +46 -46
  269. package/src/programmers/internal/check_bigint.ts +49 -49
  270. package/src/programmers/internal/check_dynamic_key.ts +201 -201
  271. package/src/programmers/internal/check_dynamic_properties.ts +208 -208
  272. package/src/programmers/internal/check_everything.ts +23 -23
  273. package/src/programmers/internal/check_native.ts +27 -27
  274. package/src/programmers/internal/check_number.ts +111 -111
  275. package/src/programmers/internal/check_object.ts +75 -75
  276. package/src/programmers/internal/check_string.ts +49 -49
  277. package/src/programmers/internal/check_template.ts +48 -48
  278. package/src/programmers/internal/check_union_array_like.ts +334 -334
  279. package/src/programmers/internal/decode_union_object.ts +116 -116
  280. package/src/programmers/internal/feature_object_entries.ts +61 -61
  281. package/src/programmers/internal/llm_schema_array.ts +22 -22
  282. package/src/programmers/internal/llm_schema_escaped.ts +84 -84
  283. package/src/programmers/internal/llm_schema_native.ts +17 -17
  284. package/src/programmers/internal/llm_schema_object.ts +132 -132
  285. package/src/programmers/internal/llm_schema_station.ts +190 -190
  286. package/src/programmers/internal/llm_schema_tuple.ts +31 -31
  287. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  288. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  289. package/src/programmers/internal/prune_object_properties.ts +63 -63
  290. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  291. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  292. package/src/programmers/internal/template_to_pattern.ts +23 -23
  293. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  294. package/src/programmers/json/JsonApplicationProgrammer.ts +92 -92
  295. package/src/programmers/json/JsonAssertParseProgrammer.ts +104 -104
  296. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +112 -112
  297. package/src/programmers/json/JsonIsParseProgrammer.ts +118 -118
  298. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  299. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  300. package/src/programmers/json/JsonValidateParseProgrammer.ts +95 -95
  301. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +119 -119
  302. package/src/programmers/llm/LlmApplicationProgrammer.ts +235 -235
  303. package/src/programmers/llm/LlmSchemaProgrammer.ts +51 -51
  304. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +92 -92
  305. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +113 -113
  306. package/src/programmers/misc/MiscCloneProgrammer.ts +1029 -1029
  307. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  308. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  309. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  310. package/src/programmers/misc/MiscPruneProgrammer.ts +725 -725
  311. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +109 -109
  312. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +109 -109
  313. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +98 -98
  314. package/src/programmers/notations/NotationGeneralProgrammer.ts +973 -973
  315. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  316. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +117 -117
  317. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +95 -95
  318. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +99 -99
  319. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +711 -711
  320. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +1019 -1019
  321. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  322. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  323. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +201 -201
  324. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +90 -90
  325. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +114 -114
  326. package/src/protobuf.ts +868 -868
  327. package/src/schemas/json/IJsonApplication.ts +22 -22
  328. package/src/schemas/metadata/IMetadata.ts +36 -36
  329. package/src/schemas/metadata/IMetadataConstantValue.ts +11 -11
  330. package/src/schemas/metadata/IMetadataFunction.ts +8 -8
  331. package/src/schemas/metadata/IMetadataParameter.ts +9 -9
  332. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  333. package/src/schemas/metadata/Metadata.ts +616 -616
  334. package/src/schemas/metadata/MetadataAtomic.ts +87 -87
  335. package/src/schemas/metadata/MetadataConstantValue.ts +62 -62
  336. package/src/schemas/metadata/MetadataFunction.ts +49 -49
  337. package/src/schemas/metadata/MetadataObject.ts +139 -139
  338. package/src/schemas/metadata/MetadataParameter.ts +50 -50
  339. package/src/tags/Constant.ts +15 -15
  340. package/src/tags/Default.ts +22 -22
  341. package/src/tags/Example.ts +17 -17
  342. package/src/tags/Examples.ts +16 -16
  343. package/src/tags/ExclusiveMaximum.ts +25 -25
  344. package/src/tags/ExclusiveMinimum.ts +25 -25
  345. package/src/tags/JsonSchemaPlugin.ts +8 -8
  346. package/src/tags/Maximum.ts +19 -19
  347. package/src/tags/Minimum.ts +19 -19
  348. package/src/tags/MultipleOf.ts +21 -21
  349. package/src/tags/Pattern.ts +31 -31
  350. package/src/tags/Type.ts +32 -32
  351. package/src/tags/index.ts +20 -20
  352. package/src/transform.ts +35 -35
  353. package/src/transformers/CallExpressionTransformer.ts +540 -540
  354. package/src/transformers/FileTransformer.ts +120 -120
  355. package/src/transformers/IProgrammerProps.ts +11 -11
  356. package/src/transformers/ITransformProps.ts +9 -9
  357. package/src/transformers/ITypiaContext.ts +18 -18
  358. package/src/transformers/NodeTransformer.ts +17 -17
  359. package/src/transformers/TransformerError.ts +59 -59
  360. package/src/transformers/features/AssertTransformer.ts +24 -24
  361. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  362. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  363. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  364. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  365. package/src/transformers/features/IsTransformer.ts +18 -18
  366. package/src/transformers/features/RandomTransformer.ts +41 -41
  367. package/src/transformers/features/ValidateTransformer.ts +18 -18
  368. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  369. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  370. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  371. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  372. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  373. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  374. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  375. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  376. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  377. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  378. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  379. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  380. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  381. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  382. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  383. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  384. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  385. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  386. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  387. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  388. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  389. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  390. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  391. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  392. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  393. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  394. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  395. package/src/transformers/features/json/JsonApplicationTransformer.ts +130 -130
  396. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  397. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  398. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  399. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  400. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  401. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  402. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  403. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  404. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  405. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  406. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  407. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  408. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  409. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  410. package/src/transformers/features/llm/LlmApplicationTransformer.ts +86 -86
  411. package/src/transformers/features/llm/LlmSchemaTransformer.ts +59 -59
  412. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  413. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  414. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  415. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  416. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  417. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  418. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  419. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  420. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  421. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  422. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  423. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  424. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  425. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  426. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  427. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  428. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  429. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  430. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  431. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  432. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  433. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  434. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  435. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  436. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  437. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  438. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  439. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  440. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  441. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  442. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  443. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  444. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  445. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  446. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  447. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  448. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  449. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  450. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  451. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  452. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  453. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  454. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  455. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  456. package/src/transformers/internal/GenericTransformer.ts +101 -101
  457. package/src/typings/Equal.ts +18 -18
  458. package/src/typings/IsTuple.ts +9 -9
  459. package/src/typings/NativeClass.ts +23 -23
  460. package/src/typings/ValueOf.ts +20 -20
  461. package/src/utils/Escaper.ts +50 -50
  462. package/src/utils/MapUtil.ts +14 -14
  463. package/src/utils/NameEncoder.ts +32 -32
  464. package/src/utils/NamingConvention.ts +94 -94
  465. package/src/utils/StringUtil.ts +16 -16
  466. package/lib/functional/$FormDataReader/$FormDataReader.d.ts +0 -7
  467. package/lib/functional/$FormDataReader/$FormDataReader.js +0 -86
  468. package/lib/functional/$FormDataReader/$FormDataReader.js.map +0 -1
  469. package/lib/functional/$FormDataReader/index.d.ts +0 -1
  470. package/lib/functional/$FormDataReader/index.js +0 -28
  471. package/lib/functional/$FormDataReader/index.js.map +0 -1
  472. package/lib/functional/$HeadersReader/$HeadersReader.d.ts +0 -4
  473. package/lib/functional/$HeadersReader/$HeadersReader.js +0 -36
  474. package/lib/functional/$HeadersReader/$HeadersReader.js.map +0 -1
  475. package/lib/functional/$HeadersReader/index.d.ts +0 -1
  476. package/lib/functional/$HeadersReader/index.js +0 -28
  477. package/lib/functional/$HeadersReader/index.js.map +0 -1
  478. package/lib/functional/$ParameterReader/$ParameterReader.d.ts +0 -4
  479. package/lib/functional/$ParameterReader/$ParameterReader.js +0 -36
  480. package/lib/functional/$ParameterReader/$ParameterReader.js.map +0 -1
  481. package/lib/functional/$ParameterReader/index.d.ts +0 -1
  482. package/lib/functional/$ParameterReader/index.js +0 -28
  483. package/lib/functional/$ParameterReader/index.js.map +0 -1
  484. package/lib/functional/$ProtobufReader.d.ts +0 -35
  485. package/lib/functional/$ProtobufReader.js +0 -166
  486. package/lib/functional/$ProtobufReader.js.map +0 -1
  487. package/lib/functional/$ProtobufSizer.d.ts +0 -36
  488. package/lib/functional/$ProtobufSizer.js +0 -118
  489. package/lib/functional/$ProtobufSizer.js.map +0 -1
  490. package/lib/functional/$ProtobufWriter.d.ts +0 -45
  491. package/lib/functional/$ProtobufWriter.js +0 -104
  492. package/lib/functional/$ProtobufWriter.js.map +0 -1
  493. package/lib/functional/$QueryReader/$QueryReader.d.ts +0 -6
  494. package/lib/functional/$QueryReader/$QueryReader.js +0 -55
  495. package/lib/functional/$QueryReader/$QueryReader.js.map +0 -1
  496. package/lib/functional/$QueryReader/index.d.ts +0 -1
  497. package/lib/functional/$QueryReader/index.js +0 -28
  498. package/lib/functional/$QueryReader/index.js.map +0 -1
  499. package/lib/functional/$any.d.ts +0 -1
  500. package/lib/functional/$any.js +0 -7
  501. package/lib/functional/$any.js.map +0 -1
  502. package/lib/functional/$clone.d.ts +0 -2
  503. package/lib/functional/$clone.js +0 -100
  504. package/lib/functional/$clone.js.map +0 -1
  505. package/lib/functional/$convention.d.ts +0 -1
  506. package/lib/functional/$convention.js +0 -60
  507. package/lib/functional/$convention.js.map +0 -1
  508. package/lib/functional/$dictionary.d.ts +0 -2
  509. package/lib/functional/$dictionary.js +0 -18
  510. package/lib/functional/$dictionary.js.map +0 -1
  511. package/lib/functional/$guard.d.ts +0 -1
  512. package/lib/functional/$guard.js +0 -21
  513. package/lib/functional/$guard.js.map +0 -1
  514. package/lib/functional/$is_between.d.ts +0 -1
  515. package/lib/functional/$is_between.js +0 -8
  516. package/lib/functional/$is_between.js.map +0 -1
  517. package/lib/functional/$join.d.ts +0 -1
  518. package/lib/functional/$join.js +0 -50
  519. package/lib/functional/$join.js.map +0 -1
  520. package/lib/functional/$number.d.ts +0 -1
  521. package/lib/functional/$number.js +0 -16
  522. package/lib/functional/$number.js.map +0 -1
  523. package/lib/functional/$report.d.ts +0 -2
  524. package/lib/functional/$report.js +0 -18
  525. package/lib/functional/$report.js.map +0 -1
  526. package/lib/functional/$rest.d.ts +0 -1
  527. package/lib/functional/$rest.js +0 -8
  528. package/lib/functional/$rest.js.map +0 -1
  529. package/lib/functional/$stoll.d.ts +0 -1
  530. package/lib/functional/$stoll.js +0 -14
  531. package/lib/functional/$stoll.js.map +0 -1
  532. package/lib/functional/$string.d.ts +0 -1
  533. package/lib/functional/$string.js +0 -43
  534. package/lib/functional/$string.js.map +0 -1
  535. package/lib/functional/$strlen.d.ts +0 -1
  536. package/lib/functional/$strlen.js +0 -13
  537. package/lib/functional/$strlen.js.map +0 -1
  538. package/lib/functional/$tail.d.ts +0 -1
  539. package/lib/functional/$tail.js +0 -11
  540. package/lib/functional/$tail.js.map +0 -1
  541. package/lib/functional/$throws.d.ts +0 -2
  542. package/lib/functional/$throws.js +0 -22
  543. package/lib/functional/$throws.js.map +0 -1
  544. package/lib/functional/IProtobufWriter.d.ts +0 -15
  545. package/lib/functional/IProtobufWriter.js +0 -3
  546. package/lib/functional/IProtobufWriter.js.map +0 -1
  547. package/lib/functional/Namespace/functional.d.ts +0 -4
  548. package/lib/functional/Namespace/functional.js +0 -9
  549. package/lib/functional/Namespace/functional.js.map +0 -1
  550. package/lib/functional/Namespace/http.d.ts +0 -8
  551. package/lib/functional/Namespace/http.js +0 -16
  552. package/lib/functional/Namespace/http.js.map +0 -1
  553. package/lib/functional/Namespace/index.d.ts +0 -30
  554. package/lib/functional/Namespace/index.js +0 -85
  555. package/lib/functional/Namespace/index.js.map +0 -1
  556. package/lib/functional/Namespace/json.d.ts +0 -9
  557. package/lib/functional/Namespace/json.js +0 -23
  558. package/lib/functional/Namespace/json.js.map +0 -1
  559. package/lib/functional/Namespace/llm.d.ts +0 -4
  560. package/lib/functional/Namespace/llm.js +0 -44
  561. package/lib/functional/Namespace/llm.js.map +0 -1
  562. package/lib/functional/Namespace/misc.d.ts +0 -11
  563. package/lib/functional/Namespace/misc.js +0 -22
  564. package/lib/functional/Namespace/misc.js.map +0 -1
  565. package/lib/functional/Namespace/notations.d.ts +0 -18
  566. package/lib/functional/Namespace/notations.js +0 -26
  567. package/lib/functional/Namespace/notations.js.map +0 -1
  568. package/lib/functional/Namespace/protobuf.d.ts +0 -17
  569. package/lib/functional/Namespace/protobuf.js +0 -25
  570. package/lib/functional/Namespace/protobuf.js.map +0 -1
  571. package/lib/functional/is.d.ts +0 -1
  572. package/lib/functional/is.js +0 -14
  573. package/lib/functional/is.js.map +0 -1
  574. package/lib/internal/$randomByte.d.ts +0 -1
  575. package/lib/internal/$randomByte.js +0 -7
  576. package/lib/internal/$randomByte.js.map +0 -1
  577. package/lib/internal/$randomUuid.d.ts +0 -1
  578. package/lib/internal/$randomUuid.js.map +0 -1
  579. package/lib/programmers/helpers/RandomRanger.d.ts +0 -33
  580. package/lib/programmers/helpers/RandomRanger.js +0 -158
  581. package/lib/programmers/helpers/RandomRanger.js.map +0 -1
  582. package/lib/programmers/internal/random_custom.d.ts +0 -1
  583. package/lib/programmers/internal/random_custom.js +0 -23
  584. package/lib/programmers/internal/random_custom.js.map +0 -1
  585. package/lib/utils/RandomGenerator/RandomGenerator.d.ts +0 -31
  586. package/lib/utils/RandomGenerator/RandomGenerator.js +0 -176
  587. package/lib/utils/RandomGenerator/RandomGenerator.js.map +0 -1
  588. package/lib/utils/RandomGenerator/index.d.ts +0 -1
  589. package/lib/utils/RandomGenerator/index.js +0 -28
  590. package/lib/utils/RandomGenerator/index.js.map +0 -1
  591. package/src/functional/$FormDataReader/$FormDataReader.ts +0 -83
  592. package/src/functional/$FormDataReader/index.ts +0 -1
  593. package/src/functional/$HeadersReader/$HeadersReader.ts +0 -26
  594. package/src/functional/$HeadersReader/index.ts +0 -1
  595. package/src/functional/$ParameterReader/$ParameterReader.ts +0 -29
  596. package/src/functional/$ParameterReader/index.ts +0 -1
  597. package/src/functional/$ProtobufReader.ts +0 -194
  598. package/src/functional/$ProtobufSizer.ts +0 -144
  599. package/src/functional/$ProtobufWriter.ts +0 -145
  600. package/src/functional/$QueryReader/$QueryReader.ts +0 -46
  601. package/src/functional/$QueryReader/index.ts +0 -1
  602. package/src/functional/$any.ts +0 -3
  603. package/src/functional/$clone.ts +0 -48
  604. package/src/functional/$convention.ts +0 -37
  605. package/src/functional/$dictionary.ts +0 -22
  606. package/src/functional/$guard.ts +0 -21
  607. package/src/functional/$is_between.ts +0 -2
  608. package/src/functional/$join.ts +0 -46
  609. package/src/functional/$number.ts +0 -12
  610. package/src/functional/$report.ts +0 -13
  611. package/src/functional/$rest.ts +0 -3
  612. package/src/functional/$stoll.ts +0 -8
  613. package/src/functional/$string.ts +0 -43
  614. package/src/functional/$strlen.ts +0 -7
  615. package/src/functional/$tail.ts +0 -5
  616. package/src/functional/$throws.ts +0 -10
  617. package/src/functional/IProtobufWriter.ts +0 -18
  618. package/src/functional/Namespace/functional.ts +0 -5
  619. package/src/functional/Namespace/http.ts +0 -9
  620. package/src/functional/Namespace/index.ts +0 -75
  621. package/src/functional/Namespace/json.ts +0 -15
  622. package/src/functional/Namespace/llm.ts +0 -20
  623. package/src/functional/Namespace/misc.ts +0 -14
  624. package/src/functional/Namespace/notations.ts +0 -23
  625. package/src/functional/Namespace/protobuf.ts +0 -20
  626. package/src/functional/is.ts +0 -10
  627. package/src/programmers/helpers/RandomRanger.ts +0 -225
  628. package/src/programmers/internal/random_custom.ts +0 -39
  629. package/src/utils/RandomGenerator/RandomGenerator.ts +0 -119
  630. package/src/utils/RandomGenerator/index.ts +0 -1
@@ -1,3 +1,4 @@
1
+ import { OpenApi } from "@samchon/openapi";
1
2
  import ts from "typescript";
2
3
 
3
4
  import { ExpressionFactory } from "../factories/ExpressionFactory";
@@ -20,14 +21,19 @@ import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
20
21
  import { ITypiaContext } from "../transformers/ITypiaContext";
21
22
  import { TransformerError } from "../transformers/TransformerError";
22
23
 
23
- import { Escaper } from "../utils/Escaper";
24
+ import { StringUtil } from "../utils/StringUtil";
24
25
 
25
- import { Format } from "../tags";
26
26
  import { FeatureProgrammer } from "./FeatureProgrammer";
27
27
  import { FunctionProgrammer } from "./helpers/FunctionProgrammer";
28
28
  import { RandomJoiner } from "./helpers/RandomJoiner";
29
- import { RandomRanger } from "./helpers/RandomRanger";
30
- import { random_custom } from "./internal/random_custom";
29
+ import { LiteralFactory } from "../factories/LiteralFactory";
30
+ import { application_array } from "./internal/application_array";
31
+ import { application_v31_schema } from "./internal/application_v31_schema";
32
+ import { MetadataCommentTagFactory } from "../factories/MetadataCommentTagFactory";
33
+ import { application_boolean } from "./internal/application_boolean";
34
+ import { application_string } from "./internal/application_string";
35
+ import { application_bigint } from "./internal/application_bigint";
36
+ import { application_number } from "./internal/application_number";
31
37
 
32
38
  export namespace RandomProgrammer {
33
39
  export interface IProps {
@@ -77,14 +83,17 @@ export namespace RandomProgrammer {
77
83
  // GENERATE FUNCTION
78
84
  const functions: Record<string, ts.VariableStatement> = Object.fromEntries([
79
85
  ...write_object_functions({
86
+ context: props.context,
80
87
  functor: props.functor,
81
88
  collection,
82
89
  }).map((v, i) => [Prefix.object(i), v]),
83
90
  ...write_array_functions({
91
+ context: props.context,
84
92
  functor: props.functor,
85
93
  collection,
86
94
  }).map((v, i) => [Prefix.array(i), v]),
87
95
  ...write_tuple_functions({
96
+ context: props.context,
88
97
  functor: props.functor,
89
98
  collection,
90
99
  }).map((v, i) => [Prefix.tuple(i), v]),
@@ -128,6 +137,7 @@ export namespace RandomProgrammer {
128
137
  ),
129
138
  ts.factory.createReturnStatement(
130
139
  decode({
140
+ context: props.context,
131
141
  functor: props.functor,
132
142
  explore: {
133
143
  function: false,
@@ -163,6 +173,7 @@ export namespace RandomProgrammer {
163
173
  };
164
174
 
165
175
  const write_object_functions = (props: {
176
+ context: ITypiaContext;
166
177
  functor: FunctionProgrammer;
167
178
  collection: MetadataCollection;
168
179
  }): ts.VariableStatement[] =>
@@ -187,9 +198,9 @@ export namespace RandomProgrammer {
187
198
  TypeFactory.keyword("any"),
188
199
  undefined,
189
200
  RandomJoiner.object({
190
- coalesce: coalesce(props.functor),
191
201
  decode: (metadata) =>
192
202
  decode({
203
+ context: props.context,
193
204
  functor: props.functor,
194
205
  explore: {
195
206
  recursive: obj.recursive,
@@ -204,6 +215,7 @@ export namespace RandomProgrammer {
204
215
  );
205
216
 
206
217
  const write_array_functions = (props: {
218
+ context: ITypiaContext;
207
219
  functor: FunctionProgrammer;
208
220
  collection: MetadataCollection;
209
221
  }): ts.VariableStatement[] =>
@@ -218,11 +230,7 @@ export namespace RandomProgrammer {
218
230
  undefined,
219
231
  [
220
232
  IdentifierFactory.parameter(
221
- "length",
222
- TypeFactory.keyword("number"),
223
- ),
224
- IdentifierFactory.parameter(
225
- "unique",
233
+ "_schema",
226
234
  TypeFactory.keyword("boolean"),
227
235
  ),
228
236
  IdentifierFactory.parameter(
@@ -239,9 +247,9 @@ export namespace RandomProgrammer {
239
247
  TypeFactory.keyword("any"),
240
248
  undefined,
241
249
  RandomJoiner.array({
242
- coalesce: coalesce(props.functor),
243
250
  decode: (metadata) =>
244
251
  decode({
252
+ context: props.context,
245
253
  functor: props.functor,
246
254
  explore: {
247
255
  recursive: true,
@@ -249,19 +257,21 @@ export namespace RandomProgrammer {
249
257
  },
250
258
  metadata,
251
259
  }),
252
- explore: {
253
- recursive: true,
254
- function: true,
255
- },
256
- length: ts.factory.createIdentifier("length"),
257
- unique: ts.factory.createIdentifier("unique"),
258
- metadata: array.value,
260
+ recursive: true,
261
+ expression: coalesce({
262
+ context: props.context,
263
+ method: "array",
264
+ internal: "randomArray",
265
+ }),
266
+ array,
267
+ schema: undefined
259
268
  }),
260
269
  ),
261
270
  }),
262
271
  );
263
272
 
264
273
  const write_tuple_functions = (props: {
274
+ context: ITypiaContext;
265
275
  functor: FunctionProgrammer;
266
276
  collection: MetadataCollection;
267
277
  }): ts.VariableStatement[] =>
@@ -291,6 +301,7 @@ export namespace RandomProgrammer {
291
301
  RandomJoiner.tuple({
292
302
  decode: (metadata) =>
293
303
  decode({
304
+ context: props.context,
294
305
  functor: props.functor,
295
306
  explore: {
296
307
  function: true,
@@ -308,6 +319,7 @@ export namespace RandomProgrammer {
308
319
  DECODERS
309
320
  ----------------------------------------------------------- */
310
321
  const decode = (props: {
322
+ context: ITypiaContext;
311
323
  functor: FunctionProgrammer;
312
324
  explore: IExplore;
313
325
  metadata: Metadata;
@@ -328,7 +340,15 @@ export namespace RandomProgrammer {
328
340
  // CONSTANT TYPES
329
341
  for (const constant of props.metadata.constants)
330
342
  for (const { value } of constant.values)
331
- expressions.push(decode_atomic(value));
343
+ expressions.push(
344
+ constant.type === "boolean"
345
+ ? value === true ? ts.factory.createTrue() : ts.factory.createFalse()
346
+ : constant.type === "bigint"
347
+ ? ExpressionFactory.bigint(<bigint>value)
348
+ : constant.type === "number"
349
+ ? ExpressionFactory.number(<number>value)
350
+ : ts.factory.createStringLiteral(<string>value),
351
+ );
332
352
 
333
353
  // ATOMIC VARIABLES
334
354
  for (const template of props.metadata.templates)
@@ -339,29 +359,12 @@ export namespace RandomProgrammer {
339
359
  }),
340
360
  );
341
361
  for (const atomic of props.metadata.atomics)
342
- if (atomic.type === "boolean")
343
- expressions.push(decode_boolean(props.functor));
344
- else if (atomic.type === "number")
345
- expressions.push(
346
- ...decode_number({
347
- functor: props.functor,
348
- atomic,
349
- }),
350
- );
351
- else if (atomic.type === "string")
352
- expressions.push(
353
- ...decode_string({
354
- functor: props.functor,
355
- atomic,
356
- }),
357
- );
358
- else if (atomic.type === "bigint")
359
- expressions.push(
360
- ...decode_bigint({
361
- functor: props.functor,
362
- atomic,
363
- }),
364
- );
362
+ expressions.push(
363
+ ...decode_atomic({
364
+ context: props.context,
365
+ atomic,
366
+ }),
367
+ );
365
368
 
366
369
  // INSTANCE TYPES
367
370
  if (props.metadata.escaped)
@@ -395,7 +398,9 @@ export namespace RandomProgrammer {
395
398
  for (const name of props.metadata.natives)
396
399
  expressions.push(
397
400
  decode_native({
401
+ context: props.context,
398
402
  functor: props.functor,
403
+ explore: props.explore,
399
404
  name,
400
405
  }),
401
406
  );
@@ -417,7 +422,7 @@ export namespace RandomProgrammer {
417
422
  // PICK UP A TYPE
418
423
  if (expressions.length === 1) return expressions[0]!;
419
424
  return ts.factory.createCallExpression(
420
- ts.factory.createCallExpression(props.functor.use("pick"), undefined, [
425
+ ts.factory.createCallExpression(props.context.importer.internal("randomPick"), undefined, [
421
426
  ts.factory.createArrayLiteralExpression(
422
427
  expressions.map((expr) =>
423
428
  ts.factory.createArrowFunction(
@@ -437,23 +442,88 @@ export namespace RandomProgrammer {
437
442
  );
438
443
  };
439
444
 
440
- const decode_boolean = (functor: FunctionProgrammer) =>
441
- ts.factory.createCallExpression(
442
- coalesce(functor)("boolean"),
443
- undefined,
445
+ const decode_atomic = (props: {
446
+ context: ITypiaContext;
447
+ atomic: MetadataAtomic;
448
+ }) => {
449
+ const schemaList: OpenApi.IJsonSchema[] = props.atomic.type === "boolean"
450
+ ? application_boolean<"3.1">(props.atomic)
451
+ : props.atomic.type === "string"
452
+ ? application_string<"3.1">(props.atomic)
453
+ : props.atomic.type === "bigint"
454
+ ? application_bigint<"3.1">(props.atomic)
455
+ : application_number<"3.1">(props.atomic);
456
+ return schemaList.map((schema) => {
457
+ const { method, internal } = (() => {
458
+ if (props.atomic.type === "string") {
459
+ const string: OpenApi.IJsonSchema.IString =
460
+ schema as OpenApi.IJsonSchema.IString;
461
+ if (string.format !== undefined) {
462
+ const format: string = string.format!;
463
+ if (format === "date-time")
464
+ return {
465
+ method: "datetime",
466
+ internal: "randomFormatDatetime",
467
+ };
468
+ return {
469
+ method: format
470
+ .split("-")
471
+ .map((s, i) => (i === 0 ? s : StringUtil.capitalize(s)))
472
+ .join(""),
473
+ internal: `randomFormat${format
474
+ .split("-")
475
+ .map(StringUtil.capitalize)
476
+ .join("")}`,
477
+ };
478
+ } else if (string.pattern !== undefined)
479
+ return {
480
+ method: "pattern",
481
+ internal: "randomPattern",
482
+ };
483
+ } else if (props.atomic.type === "number") {
484
+ const number:
485
+ | OpenApi.IJsonSchema.INumber
486
+ | OpenApi.IJsonSchema.IInteger = schema as
487
+ | OpenApi.IJsonSchema.INumber
488
+ | OpenApi.IJsonSchema.IInteger;
489
+ if (number.type === "integer")
490
+ return {
491
+ method: "integer",
492
+ internal: "randomInteger",
493
+ };
494
+ }
495
+ return {
496
+ method: props.atomic.type,
497
+ internal: `random${StringUtil.capitalize(props.atomic.type)}`,
498
+ };
499
+ })();
500
+ return ts.factory.createCallExpression(
501
+ ExpressionFactory.coalesce(
502
+ ts.factory.createPropertyAccessChain(
503
+ ts.factory.createIdentifier("_generator"),
504
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
505
+ ts.factory.createIdentifier(method),
506
+ ),
507
+ props.context.importer.internal(internal),
508
+ ),
444
509
  undefined,
445
- );
446
-
447
- const decode_atomic = (value: Atomic) =>
448
- typeof value === "boolean"
449
- ? ts.factory.createIdentifier(value.toString())
450
- : typeof value === "number"
451
- ? ExpressionFactory.number(value)
452
- : typeof value === "string"
453
- ? ts.factory.createStringLiteral(value)
454
- : ExpressionFactory.bigint(Number(value));
510
+ [
511
+ method === "pattern"
512
+ ? ts.factory.createNewExpression(
513
+ ts.factory.createIdentifier("RegExp"),
514
+ undefined,
515
+ [
516
+ ts.factory.createStringLiteral((schema as OpenApi.IJsonSchema.IString).pattern!)
517
+ ]
518
+ )
519
+ : LiteralFactory.write(schema)
520
+ ]
521
+ )
522
+ });
523
+ };
455
524
 
456
525
  const decode_template = (props: {
526
+ context: ITypiaContext;
457
527
  functor: FunctionProgrammer;
458
528
  explore: IExplore;
459
529
  template: MetadataTemplate;
@@ -467,218 +537,63 @@ export namespace RandomProgrammer {
467
537
  ),
468
538
  );
469
539
 
470
- const decode_number = (props: {
471
- functor: FunctionProgrammer;
472
- atomic: MetadataAtomic;
473
- }): ts.Expression[] =>
474
- (props.atomic.tags.length ? props.atomic.tags : [[]]).map((tags) => {
475
- const type = tags.find(
476
- (t) =>
477
- t.kind === "type" && (t.value === "int32" || t.value === "int64"),
478
- )
479
- ? "int"
480
- : tags.find(
481
- (t) =>
482
- t.kind === "type" &&
483
- (t.value === "uint32" || t.value === "uint64"),
484
- )
485
- ? "uint"
486
- : "double";
487
- const multiply = tags.find((t) => t.kind === "multipleOf");
488
- return random_custom({
489
- accessor: coalesce(props.functor),
490
- type: "number",
491
- tags,
492
- expression: RandomRanger.number({
493
- config: {
494
- type,
495
- transform: (value) => ExpressionFactory.number(value),
496
- setter: (args) =>
497
- ts.factory.createCallExpression(
498
- type !== "double" || multiply !== undefined
499
- ? coalesce(props.functor)("integer")
500
- : coalesce(props.functor)("number"),
501
- undefined,
502
- args.map((val) => ExpressionFactory.number(val)),
503
- ),
504
- },
505
- defaults: {
506
- minimum: 0,
507
- maximum: 100,
508
- gap: 10,
509
- },
510
- tags,
511
- }),
512
- });
513
- });
514
-
515
- const decode_bigint = (props: {
516
- functor: FunctionProgrammer;
517
- atomic: MetadataAtomic;
518
- }): ts.Expression[] =>
519
- (props.atomic.tags.length ? props.atomic.tags : [[]]).map((tags) =>
520
- random_custom({
521
- accessor: coalesce(props.functor),
522
- type: "bigint",
523
- tags,
524
- expression: RandomRanger.number({
525
- config: {
526
- type: tags.find(
527
- (t) =>
528
- t.kind === "type" &&
529
- (t.value === "uint" || t.value === "uint64"),
530
- )
531
- ? "uint"
532
- : "int",
533
- transform: (value) => ExpressionFactory.bigint(value),
534
- setter: (args) =>
535
- ts.factory.createCallExpression(
536
- coalesce(props.functor)("bigint"),
537
- undefined,
538
- args.map((value) => ExpressionFactory.bigint(value)),
539
- ),
540
- },
541
- defaults: {
542
- minimum: 0,
543
- maximum: 100,
544
- gap: 10,
545
- },
546
- tags,
547
- }),
548
- }),
549
- );
550
-
551
- const decode_string = (props: {
552
- functor: FunctionProgrammer;
553
- atomic: MetadataAtomic;
554
- }): ts.Expression[] =>
555
- (props.atomic.tags.length ? props.atomic.tags : [[]]).map((tags) =>
556
- random_custom({
557
- accessor: coalesce(props.functor),
558
- type: "string",
559
- tags,
560
- expression: (() => {
561
- for (const t of tags)
562
- if (t.kind === "format")
563
- return ts.factory.createCallExpression(
564
- coalesce(props.functor)(emendFormat(t.value)),
565
- undefined,
566
- undefined,
567
- );
568
- else if (t.kind === "pattern")
569
- return ts.factory.createCallExpression(
570
- coalesce(props.functor)("pattern"),
571
- undefined,
572
- [
573
- ts.factory.createIdentifier(
574
- `RegExp(${JSON.stringify(t.value)})`,
575
- ),
576
- ],
577
- );
578
-
579
- const tail = RandomRanger.length({
580
- coalesce: coalesce(props.functor),
581
- defaults: {
582
- minimum: 5,
583
- maximum: 25,
584
- gap: 5,
585
- },
586
- accessors: {
587
- minimum: "minLength",
588
- maximum: "maxLength",
589
- },
590
- tags,
591
- });
592
- return ts.factory.createCallExpression(
593
- coalesce(props.functor)("string"),
594
- undefined,
595
- tail ? [tail] : undefined,
596
- );
597
- })(),
598
- }),
599
- );
600
-
601
540
  const decode_array = (props: {
541
+ context: ITypiaContext;
602
542
  functor: FunctionProgrammer;
603
543
  explore: IExplore;
604
544
  array: MetadataArray;
605
545
  }): ts.Expression[] => {
606
- const fixed: Array<[ts.Expression | undefined, ts.Expression | undefined]> =
607
- (props.array.tags.length ? props.array.tags : [[]]).map((tags) => [
608
- RandomRanger.length({
609
- coalesce: coalesce(props.functor),
610
- defaults: {
611
- minimum: 0,
612
- maximum: 3,
613
- gap: 3,
614
- },
615
- accessors: {
616
- minimum: "minItems",
617
- maximum: "maxItems",
618
- },
619
- tags,
620
- }),
621
- (() => {
622
- const uniqueItems = tags.find((t) => t.kind === "uniqueItems");
623
- return uniqueItems === undefined
624
- ? undefined
625
- : uniqueItems.value === false
626
- ? ts.factory.createFalse()
627
- : ts.factory.createTrue();
628
- })(),
629
- ]);
546
+ const components: OpenApi.IComponents = {};
547
+ const schemaList: OpenApi.IJsonSchema.IArray[] = application_array<"3.1">({
548
+ generator: (value) => application_v31_schema({
549
+ blockNever: true,
550
+ components,
551
+ attribute: {},
552
+ metadata: value,
553
+ })!,
554
+ components,
555
+ array: props.array,
556
+ }) as OpenApi.IJsonSchema.IArray[];
630
557
  if (props.array.type.recursive)
631
- return fixed.map(([len, unique]) =>
558
+ return schemaList.map(schema =>
632
559
  ts.factory.createCallExpression(
633
560
  ts.factory.createIdentifier(
634
561
  props.functor.useLocal(Prefix.array(props.array.type.index!)),
635
562
  ),
636
563
  undefined,
637
564
  [
638
- len ?? coalesce(props.functor)("length"),
639
- unique ?? ts.factory.createFalse(),
640
- ts.factory.createTrue(),
641
- props.explore.recursive
642
- ? ts.factory.createAdd(
643
- ExpressionFactory.number(1),
644
- ts.factory.createIdentifier("_depth"),
645
- )
646
- : ExpressionFactory.number(0),
565
+ ts.factory.createObjectLiteralExpression(Object.entries(schema)
566
+ .filter(([key]) => key !== "items")
567
+ .map(([key, value]) =>
568
+ ts.factory.createPropertyAssignment(
569
+ key,
570
+ LiteralFactory.write(value),
571
+ ),
572
+ ), true),
647
573
  ],
648
574
  ),
649
575
  );
650
- return fixed.map(([len, unique]) => {
651
- const expr: ts.Expression = RandomJoiner.array({
652
- coalesce: coalesce(props.functor),
576
+ return schemaList.map(schema =>
577
+ RandomJoiner.array({
653
578
  decode: (metadata) =>
654
579
  decode({
655
580
  ...props,
656
581
  metadata,
657
582
  }),
658
- explore: props.explore,
659
- length: len,
660
- unique,
661
- metadata: props.array.type.value,
662
- });
663
- return props.explore.recursive
664
- ? ts.factory.createConditionalExpression(
665
- ts.factory.createLogicalAnd(
666
- ts.factory.createIdentifier("_recursive"),
667
- ts.factory.createLessThan(
668
- ExpressionFactory.number(5),
669
- ts.factory.createIdentifier("_depth"),
670
- ),
671
- ),
672
- undefined,
673
- ts.factory.createIdentifier("[]"),
674
- undefined,
675
- expr,
676
- )
677
- : expr;
678
- });
679
- };
583
+ expression: coalesce({
584
+ context: props.context,
585
+ method: "array",
586
+ internal: "randomArray",
587
+ }),
588
+ array: props.array.type,
589
+ recursive: props.explore.recursive,
590
+ schema,
591
+ })
592
+ );
593
+ }
680
594
 
681
595
  const decode_tuple = (props: {
596
+ context: ITypiaContext;
682
597
  functor: FunctionProgrammer;
683
598
  explore: IExplore;
684
599
  tuple: MetadataTuple;
@@ -741,6 +656,7 @@ export namespace RandomProgrammer {
741
656
  NATIVE CLASSES
742
657
  ----------------------------------------------------------- */
743
658
  const decode_set = (props: {
659
+ context: ITypiaContext;
744
660
  functor: FunctionProgrammer;
745
661
  explore: IExplore;
746
662
  metadata: Metadata;
@@ -766,6 +682,7 @@ export namespace RandomProgrammer {
766
682
  );
767
683
 
768
684
  const decode_map = (props: {
685
+ context: ITypiaContext;
769
686
  functor: FunctionProgrammer;
770
687
  explore: IExplore;
771
688
  entry: Metadata.Entry;
@@ -809,27 +726,25 @@ export namespace RandomProgrammer {
809
726
  );
810
727
 
811
728
  const decode_native = (props: {
729
+ context: ITypiaContext;
812
730
  functor: FunctionProgrammer;
731
+ explore: IExplore;
813
732
  name: string;
814
733
  }): ts.Expression => {
815
- if (props.name === "Boolean") return decode_boolean(props.functor);
816
- else if (props.name === "Number")
817
- return decode_number({
818
- functor: props.functor,
819
- atomic: MetadataAtomic.create({
820
- type: "number",
821
- tags: [],
822
- }),
823
- })[0]!;
824
- else if (props.name === "String")
825
- return decode_string({
826
- functor: props.functor,
734
+ if (
735
+ props.name === "Boolean" ||
736
+ props.name === "Number" ||
737
+ props.name === "BigInt" ||
738
+ props.name === "String"
739
+ )
740
+ return decode_atomic({
741
+ context: props.context,
827
742
  atomic: MetadataAtomic.create({
828
- type: "string",
743
+ type: props.name.toLowerCase() as "string",
829
744
  tags: [],
830
745
  }),
831
746
  })[0]!;
832
- else if (props.name === "Date") return decode_native_date(props.functor);
747
+ else if (props.name === "Date") return decode_native_date(props.context);
833
748
  else if (
834
749
  props.name === "Uint8Array" ||
835
750
  props.name === "Uint8ClampedArray" ||
@@ -852,11 +767,10 @@ export namespace RandomProgrammer {
852
767
  ...props,
853
768
  name: props.name,
854
769
  });
855
- else if (props.name === "DataView")
856
- return decode_native_data_view(props.functor);
857
- else if (props.name === "Blob") return decode_native_blob(props.functor);
858
- else if (props.name === "File") return decode_native_file(props.functor);
859
- else if (props.name === "RegExp") return decode_regexp();
770
+ else if (props.name === "DataView")return decode_native_data_view(props);
771
+ else if (props.name === "Blob") return decode_native_blob(props);
772
+ else if (props.name === "File") return decode_native_file(props);
773
+ else if (props.name === "RegExp") return decode_regexp(props.context);
860
774
  else
861
775
  return ts.factory.createNewExpression(
862
776
  ts.factory.createIdentifier(props.name),
@@ -865,13 +779,17 @@ export namespace RandomProgrammer {
865
779
  );
866
780
  };
867
781
 
868
- const decode_native_date = (functor: FunctionProgrammer) =>
782
+ const decode_native_date = (context: ITypiaContext) =>
869
783
  ts.factory.createNewExpression(
870
784
  ts.factory.createIdentifier("Date"),
871
785
  undefined,
872
786
  [
873
787
  ts.factory.createCallExpression(
874
- coalesce(functor)("datetime"),
788
+ coalesce({
789
+ context,
790
+ method: "datetime",
791
+ internal: "randomFormatDatetime",
792
+ }),
875
793
  undefined,
876
794
  [],
877
795
  ),
@@ -879,7 +797,9 @@ export namespace RandomProgrammer {
879
797
  );
880
798
 
881
799
  const decode_native_byte_array = (props: {
800
+ context: ITypiaContext;
882
801
  functor: FunctionProgrammer;
802
+ explore: IExplore;
883
803
  name:
884
804
  | "Uint8Array"
885
805
  | "Uint8ClampedArray"
@@ -894,60 +814,80 @@ export namespace RandomProgrammer {
894
814
  | "Float64Array";
895
815
  }): ts.Expression => {
896
816
  new BigInt64Array();
897
- const [minimum, maximum]: [number, number] = (() => {
817
+ const [type, minimum, maximum]: [string, number, number] = (() => {
898
818
  if (props.name === "Uint8Array" || props.name === "Uint8ClampedArray")
899
- return [0, 255];
900
- else if (props.name === "Uint16Array") return [0, 65535];
901
- else if (props.name === "Uint32Array") return [0, 4294967295];
819
+ return ["uint32", 0, 255];
820
+ else if (props.name === "Uint16Array") return ["uint32", 0, 65535];
821
+ else if (props.name === "Uint32Array") return ["uint32", 0, 4294967295];
902
822
  else if (props.name === "BigUint64Array")
903
- return [0, 18446744073709551615];
904
- else if (props.name === "Int8Array") return [-128, 127];
905
- else if (props.name === "Int16Array") return [-32768, 32767];
906
- else if (props.name === "Int32Array") return [-2147483648, 2147483647];
823
+ return ["uint64", 0, 18446744073709551615];
824
+ else if (props.name === "Int8Array") return ["int32", -128, 127];
825
+ else if (props.name === "Int16Array") return ["int32", -32768, 32767];
826
+ else if (props.name === "Int32Array") return ["int32", -2147483648, 2147483647];
907
827
  else if (props.name === "BigInt64Array")
908
- return [-9223372036854775808, 9223372036854775807];
828
+ return ["uint64", -9223372036854775808, 9223372036854775807];
909
829
  else if (props.name === "Float32Array")
910
- return [-1.175494351e38, 3.4028235e38];
911
- return [Number.MIN_VALUE, Number.MAX_VALUE];
830
+ return ["float", -1.175494351e38, 3.4028235e38];
831
+ return ["double", Number.MIN_VALUE, Number.MAX_VALUE];
912
832
  })();
913
- const literal =
914
- props.name === "BigInt64Array" || props.name === "BigUint64Array"
915
- ? ExpressionFactory.bigint
916
- : ExpressionFactory.number;
833
+ const atomic: "bigint" | "number" =
834
+ props.name === "BigInt64Array" ||
835
+ props.name === "BigUint64Array"
836
+ ? "bigint"
837
+ : "number"
838
+ const value: Metadata = Metadata.create({
839
+ ...Metadata.initialize(),
840
+ atomics: [
841
+ MetadataAtomic.create({
842
+ type: atomic,
843
+ tags: [
844
+ [
845
+ ...MetadataCommentTagFactory.get({
846
+ kind: "type",
847
+ type: atomic,
848
+ value: type,
849
+ }),
850
+ ...MetadataCommentTagFactory.get({
851
+ kind: "minimum",
852
+ type: "number",
853
+ value: minimum.toString(),
854
+ }),
855
+ ...MetadataCommentTagFactory.get({
856
+ kind: "maximum",
857
+ type: "number",
858
+ value: maximum.toString(),
859
+ }),
860
+ ]
861
+ ],
862
+ })
863
+ ],
864
+ });
917
865
  return ts.factory.createNewExpression(
918
866
  ts.factory.createIdentifier(props.name),
919
867
  [],
920
- [
921
- ts.factory.createCallExpression(
922
- coalesce(props.functor)("array"),
923
- undefined,
924
- [
925
- ts.factory.createArrowFunction(
926
- undefined,
927
- undefined,
928
- [],
929
- TypeFactory.keyword("any"),
930
- undefined,
931
- ts.factory.createCallExpression(
932
- coalesce(props.functor)(
933
- props.name === "Float32Array" || props.name === "Float64Array"
934
- ? "number"
935
- : props.name === "BigInt64Array" ||
936
- props.name === "BigUint64Array"
937
- ? "bigint"
938
- : "integer",
939
- ),
940
- undefined,
941
- [literal(minimum), literal(maximum)],
942
- ),
943
- ),
944
- ],
945
- ),
946
- ],
868
+ decode_array({
869
+ context: props.context,
870
+ functor: props.functor,
871
+ explore: props.explore,
872
+ array: MetadataArray.create({
873
+ tags: [],
874
+ type: MetadataArrayType.create({
875
+ name: `${props.name}<${atomic}>`,
876
+ value,
877
+ recursive: false,
878
+ index: null,
879
+ nullables: [],
880
+ }),
881
+ }),
882
+ }),
947
883
  );
948
884
  };
949
885
 
950
- const decode_native_blob = (functor: FunctionProgrammer) =>
886
+ const decode_native_blob = (props: {
887
+ context: ITypiaContext;
888
+ functor: FunctionProgrammer;
889
+ explore: IExplore;
890
+ }) =>
951
891
  ts.factory.createNewExpression(
952
892
  ts.factory.createIdentifier("Blob"),
953
893
  undefined,
@@ -955,7 +895,9 @@ export namespace RandomProgrammer {
955
895
  ts.factory.createArrayLiteralExpression(
956
896
  [
957
897
  decode_native_byte_array({
958
- functor,
898
+ context: props.context,
899
+ functor: props.functor,
900
+ explore: props.explore,
959
901
  name: "Uint8Array",
960
902
  }),
961
903
  ],
@@ -964,7 +906,11 @@ export namespace RandomProgrammer {
964
906
  ],
965
907
  );
966
908
 
967
- const decode_native_file = (functor: FunctionProgrammer) =>
909
+ const decode_native_file = (props: {
910
+ context: ITypiaContext;
911
+ functor: FunctionProgrammer;
912
+ explore: IExplore;
913
+ }) =>
968
914
  ts.factory.createNewExpression(
969
915
  ts.factory.createIdentifier("File"),
970
916
  undefined,
@@ -972,7 +918,9 @@ export namespace RandomProgrammer {
972
918
  ts.factory.createArrayLiteralExpression(
973
919
  [
974
920
  decode_native_byte_array({
975
- functor,
921
+ context: props.context,
922
+ functor: props.functor,
923
+ explore: props.explore,
976
924
  name: "Uint8Array",
977
925
  }),
978
926
  ],
@@ -980,19 +928,19 @@ export namespace RandomProgrammer {
980
928
  ),
981
929
  ts.factory.createTemplateExpression(ts.factory.createTemplateHead(""), [
982
930
  ts.factory.createTemplateSpan(
983
- ts.factory.createCallExpression(
984
- coalesce(functor)("string"),
985
- undefined,
986
- [ts.factory.createNumericLiteral(8)],
987
- ),
931
+ writeRangedString({
932
+ context: props.context,
933
+ minLength: 1,
934
+ maxLength: 8,
935
+ }),
988
936
  ts.factory.createTemplateMiddle("."),
989
937
  ),
990
938
  ts.factory.createTemplateSpan(
991
- ts.factory.createCallExpression(
992
- coalesce(functor)("string"),
993
- undefined,
994
- [ts.factory.createNumericLiteral(3)],
995
- ),
939
+ writeRangedString({
940
+ context: props.context,
941
+ minLength: 3,
942
+ maxLength: 3,
943
+ }),
996
944
  ts.factory.createTemplateTail(""),
997
945
  ),
998
946
  ]),
@@ -1000,13 +948,17 @@ export namespace RandomProgrammer {
1000
948
  );
1001
949
 
1002
950
  const decode_native_array_buffer = (props: {
951
+ context: ITypiaContext;
1003
952
  functor: FunctionProgrammer;
953
+ explore: IExplore;
1004
954
  name: "ArrayBuffer" | "SharedArrayBuffer";
1005
955
  }): ts.Expression =>
1006
956
  props.name === "ArrayBuffer"
1007
957
  ? IdentifierFactory.access(
1008
958
  decode_native_byte_array({
959
+ context: props.context,
1009
960
  functor: props.functor,
961
+ explore: props.explore,
1010
962
  name: "Uint8Array",
1011
963
  }),
1012
964
  "buffer",
@@ -1016,11 +968,19 @@ export namespace RandomProgrammer {
1016
968
  [
1017
969
  StatementFactory.constant({
1018
970
  name: "length",
1019
- value: ts.factory.createCallExpression(
1020
- coalesce(props.functor)("integer"),
1021
- undefined,
1022
- [],
1023
- ),
971
+ value: decode_atomic({
972
+ context: props.context,
973
+ atomic: MetadataAtomic.create({
974
+ type: "number",
975
+ tags: [
976
+ MetadataCommentTagFactory.get({
977
+ type: "number",
978
+ kind: "type",
979
+ value: "uint32",
980
+ }),
981
+ ],
982
+ }),
983
+ })[0]!,
1024
984
  }),
1025
985
  StatementFactory.constant({
1026
986
  name: "buffer",
@@ -1047,26 +1007,54 @@ export namespace RandomProgrammer {
1047
1007
  undefined,
1048
1008
  [
1049
1009
  ts.factory.createCallExpression(
1050
- coalesce(props.functor)("array"),
1051
- undefined,
1052
- [
1053
- ts.factory.createArrowFunction(
1054
- undefined,
1055
- undefined,
1056
- [],
1057
- TypeFactory.keyword("any"),
1058
- undefined,
1059
- ts.factory.createCallExpression(
1060
- coalesce(props.functor)("integer"),
1061
- undefined,
1062
- [
1063
- ExpressionFactory.number(0),
1064
- ExpressionFactory.number(255),
1065
- ],
1010
+ ts.factory.createPropertyAccessExpression(
1011
+ ts.factory.createCallExpression(
1012
+ ts.factory.createPropertyAccessExpression(
1013
+ ts.factory.createNewExpression(
1014
+ ts.factory.createIdentifier("Array"),
1015
+ undefined,
1016
+ [ts.factory.createIdentifier("length")]
1017
+ ),
1018
+ ts.factory.createIdentifier("fill")
1066
1019
  ),
1020
+ undefined,
1021
+ [ts.factory.createNumericLiteral("0")]
1067
1022
  ),
1068
- ts.factory.createIdentifier("length"),
1069
- ],
1023
+ ts.factory.createIdentifier("map")
1024
+ ),
1025
+ undefined,
1026
+ [ts.factory.createArrowFunction(
1027
+ undefined,
1028
+ undefined,
1029
+ [],
1030
+ undefined,
1031
+ undefined,
1032
+ decode_atomic({
1033
+ context: props.context,
1034
+ atomic: MetadataAtomic.create({
1035
+ type: "number",
1036
+ tags: [
1037
+ [
1038
+ ...MetadataCommentTagFactory.get({
1039
+ kind: "type",
1040
+ type: "number",
1041
+ value: "uint32",
1042
+ }),
1043
+ ...MetadataCommentTagFactory.get({
1044
+ kind: "minimum",
1045
+ type: "number",
1046
+ value: "0",
1047
+ }),
1048
+ ...MetadataCommentTagFactory.get({
1049
+ kind: "maximum",
1050
+ type: "number",
1051
+ value: "255",
1052
+ }),
1053
+ ]
1054
+ ],
1055
+ }),
1056
+ })[0]!
1057
+ )]
1070
1058
  ),
1071
1059
  ExpressionFactory.number(0),
1072
1060
  ],
@@ -1080,14 +1068,20 @@ export namespace RandomProgrammer {
1080
1068
  ),
1081
1069
  );
1082
1070
 
1083
- const decode_native_data_view = (functor: FunctionProgrammer) =>
1071
+ const decode_native_data_view = (props: {
1072
+ context: ITypiaContext;
1073
+ functor: FunctionProgrammer;
1074
+ explore: IExplore;
1075
+ }) =>
1084
1076
  ts.factory.createNewExpression(
1085
1077
  ts.factory.createIdentifier("DataView"),
1086
1078
  [],
1087
1079
  [
1088
1080
  IdentifierFactory.access(
1089
1081
  decode_native_byte_array({
1090
- functor,
1082
+ context: props.context,
1083
+ functor: props.functor,
1084
+ explore: props.explore,
1091
1085
  name: "Uint8Array",
1092
1086
  }),
1093
1087
  "buffer",
@@ -1095,15 +1089,61 @@ export namespace RandomProgrammer {
1095
1089
  ],
1096
1090
  );
1097
1091
 
1098
- const decode_regexp = () =>
1092
+ const decode_regexp = (context: ITypiaContext) =>
1099
1093
  ts.factory.createNewExpression(
1100
1094
  ts.factory.createIdentifier("RegExp"),
1101
1095
  [],
1102
- [ts.factory.createIdentifier("/(?:)/")],
1103
- );
1096
+ [
1097
+ ts.factory.createCallExpression(
1098
+ coalesce({
1099
+ context,
1100
+ method: "regex",
1101
+ internal: "randomFormatRegex",
1102
+ }),
1103
+ undefined,
1104
+ undefined,
1105
+ )
1106
+ ]);
1107
+
1108
+ const writeRangedString = (props: {
1109
+ context: ITypiaContext;
1110
+ minLength: number;
1111
+ maxLength: number;
1112
+ }): ts.CallExpression =>
1113
+ decode_atomic({
1114
+ context: props.context,
1115
+ atomic: MetadataAtomic.create({
1116
+ type: "string",
1117
+ tags: [[
1118
+ ...MetadataCommentTagFactory.get({
1119
+ kind: "minLength",
1120
+ type: "string",
1121
+ value: props.minLength.toString(),
1122
+ }),
1123
+ ...MetadataCommentTagFactory.get({
1124
+ kind: "maxLength",
1125
+ type: "string",
1126
+ value: props.maxLength.toString(),
1127
+ }),
1128
+ ]],
1129
+ }),
1130
+ })[0]!;
1104
1131
  }
1105
1132
 
1106
- type Atomic = boolean | number | string | bigint;
1133
+ const coalesce = (props: {
1134
+ context: ITypiaContext,
1135
+ method: string,
1136
+ internal: string,
1137
+ }): ts.Expression =>
1138
+ ExpressionFactory.coalesce(
1139
+ ts.factory.createPropertyAccessChain(
1140
+ ts.factory.createIdentifier("_generator"),
1141
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
1142
+ ts.factory.createIdentifier(props.method),
1143
+ ),
1144
+ props.context.importer.internal(props.internal),
1145
+ );
1146
+
1107
1147
  interface IExplore {
1108
1148
  function: boolean;
1109
1149
  recursive: boolean;
@@ -1114,31 +1154,3 @@ const Prefix = {
1114
1154
  array: (i: number) => `$ra${i}`,
1115
1155
  tuple: (i: number) => `$rt${i}`,
1116
1156
  };
1117
-
1118
- const coalesce = (functor: FunctionProgrammer) => (name: string) =>
1119
- ExpressionFactory.coalesce(
1120
- Escaper.variable(name)
1121
- ? ts.factory.createPropertyAccessChain(
1122
- ts.factory.createIdentifier("_generator"),
1123
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
1124
- ts.factory.createIdentifier(name),
1125
- )
1126
- : ts.factory.createElementAccessChain(
1127
- ts.factory.createIdentifier("_generator"),
1128
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
1129
- ts.factory.createStringLiteral(name),
1130
- ),
1131
- IdentifierFactory.access(functor.use("generator"), name),
1132
- );
1133
-
1134
- const emendFormat = (key: keyof Format.Validator) =>
1135
- key === "date-time"
1136
- ? "datetime"
1137
- : key
1138
- .split("-")
1139
- .map((str, i) =>
1140
- i === 0 || str.length === 0
1141
- ? str
1142
- : str[0]!.toUpperCase() + str.substring(1),
1143
- )
1144
- .join("");