typia 7.0.0-dev.20241005 → 7.0.0-dev.20241008

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