typia 7.0.2 → 7.1.0-dev.20241209

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 (476) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +123 -123
  3. package/lib/executable/typia.js +0 -0
  4. package/lib/factories/LiteralFactory.js +4 -0
  5. package/lib/factories/LiteralFactory.js.map +1 -1
  6. package/lib/factories/internal/metadata/iterate_metadata_function.js +1 -0
  7. package/lib/factories/internal/metadata/iterate_metadata_function.js.map +1 -1
  8. package/lib/index.mjs +18 -1
  9. package/lib/index.mjs.map +1 -1
  10. package/lib/llm.d.ts +121 -2
  11. package/lib/llm.js +7 -0
  12. package/lib/llm.js.map +1 -1
  13. package/lib/module.d.ts +2 -0
  14. package/lib/module.js +2 -0
  15. package/lib/module.js.map +1 -1
  16. package/lib/programmers/llm/LlmApplicationOfValidateProgrammer.d.ts +15 -0
  17. package/lib/programmers/llm/LlmApplicationOfValidateProgrammer.js +37 -0
  18. package/lib/programmers/llm/LlmApplicationOfValidateProgrammer.js.map +1 -0
  19. package/lib/schemas/llm/ILlmApplicationOfValidate.d.ts +52 -0
  20. package/lib/schemas/llm/ILlmApplicationOfValidate.js +7 -0
  21. package/lib/schemas/llm/ILlmApplicationOfValidate.js.map +1 -0
  22. package/lib/schemas/llm/ILlmFunctionOfValidate.d.ts +36 -0
  23. package/lib/schemas/llm/ILlmFunctionOfValidate.js +7 -0
  24. package/lib/schemas/llm/ILlmFunctionOfValidate.js.map +1 -0
  25. package/lib/schemas/metadata/MetadataParameter.d.ts +2 -0
  26. package/lib/schemas/metadata/MetadataParameter.js +1 -0
  27. package/lib/schemas/metadata/MetadataParameter.js.map +1 -1
  28. package/lib/transformers/CallExpressionTransformer.js +2 -0
  29. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  30. package/lib/transformers/features/llm/LlmApplicationOfValidateTransformer.d.ts +5 -0
  31. package/lib/transformers/features/llm/LlmApplicationOfValidateTransformer.js +94 -0
  32. package/lib/transformers/features/llm/LlmApplicationOfValidateTransformer.js.map +1 -0
  33. package/lib/transformers/features/llm/LlmApplicationTransformer.js +3 -3
  34. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/IRandomGenerator.ts +49 -49
  37. package/src/IReadableURLSearchParams.ts +9 -9
  38. package/src/IValidation.ts +20 -20
  39. package/src/executable/TypiaGenerateWizard.ts +83 -83
  40. package/src/executable/TypiaPatchWizard.ts +45 -45
  41. package/src/executable/TypiaSetupWizard.ts +179 -179
  42. package/src/executable/setup/ArgumentParser.ts +42 -42
  43. package/src/executable/setup/FileRetriever.ts +19 -19
  44. package/src/executable/setup/PackageManager.ts +87 -87
  45. package/src/factories/ExpressionFactory.ts +216 -216
  46. package/src/factories/IdentifierFactory.ts +89 -89
  47. package/src/factories/JsonMetadataFactory.ts +76 -76
  48. package/src/factories/LiteralFactory.ts +52 -50
  49. package/src/factories/MetadataCollection.ts +278 -278
  50. package/src/factories/MetadataCommentTagFactory.ts +650 -650
  51. package/src/factories/MetadataFactory.ts +404 -404
  52. package/src/factories/MetadataTypeTagFactory.ts +411 -411
  53. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  54. package/src/factories/NumericRangeFactory.ts +72 -72
  55. package/src/factories/ProtobufFactory.ts +875 -875
  56. package/src/factories/StatementFactory.ts +90 -90
  57. package/src/factories/TemplateFactory.ts +64 -64
  58. package/src/factories/TypeFactory.ts +140 -140
  59. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +17 -17
  60. package/src/factories/internal/metadata/MetadataHelper.ts +21 -21
  61. package/src/factories/internal/metadata/emplace_metadata_alias.ts +33 -33
  62. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  63. package/src/factories/internal/metadata/emplace_metadata_object.ts +208 -208
  64. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  65. package/src/factories/internal/metadata/explore_metadata.ts +31 -31
  66. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  67. package/src/factories/internal/metadata/iterate_metadata_alias.ts +33 -33
  68. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  69. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  70. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  71. package/src/factories/internal/metadata/iterate_metadata_collection.ts +146 -146
  72. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +32 -32
  73. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  74. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  75. package/src/factories/internal/metadata/iterate_metadata_function.ts +91 -90
  76. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +213 -213
  77. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  78. package/src/factories/internal/metadata/iterate_metadata_native.ts +255 -255
  79. package/src/factories/internal/metadata/iterate_metadata_object.ts +35 -35
  80. package/src/factories/internal/metadata/iterate_metadata_set.ts +57 -57
  81. package/src/factories/internal/metadata/iterate_metadata_sort.ts +87 -87
  82. package/src/factories/internal/metadata/iterate_metadata_template.ts +41 -41
  83. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  84. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  85. package/src/functional.ts +750 -750
  86. package/src/http.ts +1047 -1047
  87. package/src/internal/_IProtobufWriter.ts +18 -18
  88. package/src/internal/_ProtobufReader.ts +194 -194
  89. package/src/internal/_ProtobufSizer.ts +145 -145
  90. package/src/internal/_ProtobufWriter.ts +145 -145
  91. package/src/internal/_accessExpressionAsString.ts +46 -46
  92. package/src/internal/_assertGuard.ts +13 -13
  93. package/src/internal/_functionalTypeGuardErrorFactory.ts +4 -4
  94. package/src/internal/_httpFormDataReadArray.ts +4 -4
  95. package/src/internal/_httpFormDataReadBigint.ts +18 -18
  96. package/src/internal/_httpFormDataReadBlob.ts +10 -10
  97. package/src/internal/_httpFormDataReadBoolean.ts +16 -16
  98. package/src/internal/_httpFormDataReadFile.ts +10 -10
  99. package/src/internal/_httpFormDataReadNumber.ts +15 -15
  100. package/src/internal/_httpFormDataReadString.ts +10 -10
  101. package/src/internal/_httpHeaderReadBigint.ts +10 -10
  102. package/src/internal/_httpHeaderReadBoolean.ts +8 -8
  103. package/src/internal/_httpHeaderReadNumber.ts +7 -7
  104. package/src/internal/_httpParameterReadBigint.ts +10 -10
  105. package/src/internal/_httpParameterReadBoolean.ts +8 -8
  106. package/src/internal/_httpParameterReadNumber.ts +7 -7
  107. package/src/internal/_httpParameterReadString.ts +2 -2
  108. package/src/internal/_httpQueryParseURLSearchParams.ts +12 -12
  109. package/src/internal/_httpQueryReadArray.ts +4 -4
  110. package/src/internal/_httpQueryReadBigint.ts +12 -12
  111. package/src/internal/_httpQueryReadBoolean.ts +14 -14
  112. package/src/internal/_httpQueryReadNumber.ts +9 -9
  113. package/src/internal/_httpQueryReadString.ts +4 -4
  114. package/src/internal/_isBetween.ts +2 -2
  115. package/src/internal/_isBigintString.ts +8 -8
  116. package/src/internal/_isFormatByte.ts +7 -7
  117. package/src/internal/_isFormatDate.ts +3 -3
  118. package/src/internal/_isFormatDateTime.ts +4 -4
  119. package/src/internal/_isFormatDuration.ts +4 -4
  120. package/src/internal/_isFormatEmail.ts +4 -4
  121. package/src/internal/_isFormatHostname.ts +4 -4
  122. package/src/internal/_isFormatIdnEmail.ts +4 -4
  123. package/src/internal/_isFormatIdnHostname.ts +4 -4
  124. package/src/internal/_isFormatIpv4.ts +4 -4
  125. package/src/internal/_isFormatIpv6.ts +4 -4
  126. package/src/internal/_isFormatIri.ts +3 -3
  127. package/src/internal/_isFormatIriReference.ts +4 -4
  128. package/src/internal/_isFormatJsonPointer.ts +3 -3
  129. package/src/internal/_isFormatPassword.ts +1 -1
  130. package/src/internal/_isFormatRegex.ts +8 -8
  131. package/src/internal/_isFormatRelativeJsonPointer.ts +4 -4
  132. package/src/internal/_isFormatTime.ts +4 -4
  133. package/src/internal/_isFormatUri.ts +6 -6
  134. package/src/internal/_isFormatUriReference.ts +5 -5
  135. package/src/internal/_isFormatUriTemplate.ts +4 -4
  136. package/src/internal/_isFormatUrl.ts +4 -4
  137. package/src/internal/_isFormatUuid.ts +3 -3
  138. package/src/internal/_isTypeFloat.ts +5 -5
  139. package/src/internal/_isTypeInt32.ts +5 -5
  140. package/src/internal/_isTypeInt64.ts +5 -5
  141. package/src/internal/_isTypeUint32.ts +5 -5
  142. package/src/internal/_isTypeUint64.ts +5 -5
  143. package/src/internal/_isUniqueItems.ts +159 -159
  144. package/src/internal/_jsonStringifyNumber.ts +12 -12
  145. package/src/internal/_jsonStringifyRest.ts +3 -3
  146. package/src/internal/_jsonStringifyString.ts +42 -42
  147. package/src/internal/_jsonStringifyTail.ts +2 -2
  148. package/src/internal/_llmApplicationFinalize.ts +20 -20
  149. package/src/internal/_miscCloneAny.ts +46 -46
  150. package/src/internal/_notationAny.ts +37 -37
  151. package/src/internal/_notationCamel.ts +13 -13
  152. package/src/internal/_notationPascal.ts +8 -8
  153. package/src/internal/_notationSnake.ts +43 -43
  154. package/src/internal/_randomArray.ts +21 -21
  155. package/src/internal/_randomBigint.ts +6 -6
  156. package/src/internal/_randomBoolean.ts +1 -1
  157. package/src/internal/_randomFormatByte.ts +3 -3
  158. package/src/internal/_randomFormatDate.ts +18 -18
  159. package/src/internal/_randomFormatDatetime.ts +16 -16
  160. package/src/internal/_randomFormatDuration.ts +27 -27
  161. package/src/internal/_randomFormatEmail.ts +11 -11
  162. package/src/internal/_randomFormatHostname.ts +6 -6
  163. package/src/internal/_randomFormatIdnEmail.ts +3 -3
  164. package/src/internal/_randomFormatIdnHostname.ts +3 -3
  165. package/src/internal/_randomFormatIpv4.ts +11 -11
  166. package/src/internal/_randomFormatIpv6.ts +11 -11
  167. package/src/internal/_randomFormatIri.ts +3 -3
  168. package/src/internal/_randomFormatIriReference.ts +3 -3
  169. package/src/internal/_randomFormatJsonPointer.ts +7 -7
  170. package/src/internal/_randomFormatPassword.ts +8 -8
  171. package/src/internal/_randomFormatRegex.ts +4 -4
  172. package/src/internal/_randomFormatRelativeJsonPointer.ts +8 -8
  173. package/src/internal/_randomFormatTime.ts +14 -14
  174. package/src/internal/_randomFormatUri.ts +3 -3
  175. package/src/internal/_randomFormatUriReference.ts +3 -3
  176. package/src/internal/_randomFormatUriTemplate.ts +3 -3
  177. package/src/internal/_randomFormatUrl.ts +11 -11
  178. package/src/internal/_randomFormatUuid.ts +6 -6
  179. package/src/internal/_randomInteger.ts +47 -47
  180. package/src/internal/_randomNumber.ts +74 -74
  181. package/src/internal/_randomPattern.ts +10 -10
  182. package/src/internal/_randomPick.ts +9 -9
  183. package/src/internal/_randomString.ts +24 -24
  184. package/src/internal/_throwTypeGuardError.ts +5 -5
  185. package/src/internal/_validateReport.ts +13 -13
  186. package/src/internal/private/__notationCapitalize.ts +2 -2
  187. package/src/internal/private/__notationUnsnake.ts +24 -24
  188. package/src/json.ts +752 -752
  189. package/src/llm.ts +481 -342
  190. package/src/misc.ts +658 -658
  191. package/src/module.ts +937 -935
  192. package/src/notations.ts +827 -827
  193. package/src/programmers/AssertProgrammer.ts +454 -454
  194. package/src/programmers/CheckerProgrammer.ts +1617 -1617
  195. package/src/programmers/FeatureProgrammer.ts +622 -622
  196. package/src/programmers/ImportProgrammer.ts +185 -185
  197. package/src/programmers/IsProgrammer.ts +273 -273
  198. package/src/programmers/RandomProgrammer.ts +1190 -1190
  199. package/src/programmers/TypiaProgrammer.ts +174 -174
  200. package/src/programmers/ValidateProgrammer.ts +434 -434
  201. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +153 -153
  202. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +125 -125
  203. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +115 -115
  204. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  205. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  206. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  207. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +119 -119
  208. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +274 -274
  209. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +135 -135
  210. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  211. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  212. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  213. package/src/programmers/helpers/FunctionProgrammer.ts +67 -67
  214. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  215. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  216. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  217. package/src/programmers/helpers/ProtobufUtil.ts +228 -228
  218. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  219. package/src/programmers/helpers/RandomJoiner.ts +168 -168
  220. package/src/programmers/helpers/StringifyJoinder.ts +115 -115
  221. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  222. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  223. package/src/programmers/helpers/UnionPredicator.ts +79 -79
  224. package/src/programmers/helpers/disable_function_programmer_declare.ts +32 -32
  225. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +99 -99
  226. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +99 -99
  227. package/src/programmers/http/HttpAssertQueryProgrammer.ts +105 -105
  228. package/src/programmers/http/HttpFormDataProgrammer.ts +308 -308
  229. package/src/programmers/http/HttpHeadersProgrammer.ts +400 -400
  230. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  231. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  232. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  233. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  234. package/src/programmers/http/HttpQueryProgrammer.ts +336 -336
  235. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +92 -92
  236. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +92 -92
  237. package/src/programmers/http/HttpValidateQueryProgrammer.ts +98 -98
  238. package/src/programmers/internal/check_array_length.ts +47 -47
  239. package/src/programmers/internal/check_bigint.ts +50 -50
  240. package/src/programmers/internal/check_dynamic_key.ts +201 -201
  241. package/src/programmers/internal/check_dynamic_properties.ts +208 -208
  242. package/src/programmers/internal/check_everything.ts +23 -23
  243. package/src/programmers/internal/check_native.ts +27 -27
  244. package/src/programmers/internal/check_number.ts +112 -112
  245. package/src/programmers/internal/check_object.ts +75 -75
  246. package/src/programmers/internal/check_string.ts +50 -50
  247. package/src/programmers/internal/check_template.ts +48 -48
  248. package/src/programmers/internal/check_union_array_like.ts +335 -335
  249. package/src/programmers/internal/decode_union_object.ts +116 -116
  250. package/src/programmers/internal/feature_object_entries.ts +61 -61
  251. package/src/programmers/internal/json_schema_alias.ts +47 -47
  252. package/src/programmers/internal/json_schema_array.ts +45 -45
  253. package/src/programmers/internal/json_schema_bigint.ts +15 -15
  254. package/src/programmers/internal/json_schema_boolean.ts +15 -15
  255. package/src/programmers/internal/json_schema_constant.ts +26 -26
  256. package/src/programmers/internal/json_schema_description.ts +12 -12
  257. package/src/programmers/internal/json_schema_discriminator.ts +35 -35
  258. package/src/programmers/internal/json_schema_escaped.ts +82 -82
  259. package/src/programmers/internal/json_schema_native.ts +33 -33
  260. package/src/programmers/internal/json_schema_number.ts +15 -15
  261. package/src/programmers/internal/json_schema_object.ts +158 -158
  262. package/src/programmers/internal/json_schema_plugin.ts +18 -18
  263. package/src/programmers/internal/json_schema_station.ts +182 -182
  264. package/src/programmers/internal/json_schema_string.ts +15 -15
  265. package/src/programmers/internal/json_schema_template.ts +55 -55
  266. package/src/programmers/internal/json_schema_title.ts +20 -20
  267. package/src/programmers/internal/json_schema_tuple.ts +35 -35
  268. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  269. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  270. package/src/programmers/internal/prune_object_properties.ts +71 -71
  271. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  272. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  273. package/src/programmers/internal/template_to_pattern.ts +23 -23
  274. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  275. package/src/programmers/json/JsonApplicationProgrammer.ts +276 -276
  276. package/src/programmers/json/JsonAssertParseProgrammer.ts +113 -113
  277. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +115 -115
  278. package/src/programmers/json/JsonIsParseProgrammer.ts +114 -114
  279. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  280. package/src/programmers/json/JsonSchemasProgrammer.ts +91 -91
  281. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  282. package/src/programmers/json/JsonValidateParseProgrammer.ts +105 -105
  283. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +124 -124
  284. package/src/programmers/llm/LlmApplicationOfValidateProgrammer.ts +81 -0
  285. package/src/programmers/llm/LlmApplicationProgrammer.ts +276 -276
  286. package/src/programmers/llm/LlmModelPredicator.ts +127 -127
  287. package/src/programmers/llm/LlmParametersProgrammer.ts +90 -90
  288. package/src/programmers/llm/LlmSchemaProgrammer.ts +143 -143
  289. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +95 -95
  290. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +116 -116
  291. package/src/programmers/misc/MiscCloneProgrammer.ts +1032 -1032
  292. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  293. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  294. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  295. package/src/programmers/misc/MiscPruneProgrammer.ts +728 -728
  296. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +111 -111
  297. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +113 -113
  298. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +101 -101
  299. package/src/programmers/notations/NotationGeneralProgrammer.ts +984 -984
  300. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  301. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +119 -119
  302. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +98 -98
  303. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +102 -102
  304. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +654 -654
  305. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +945 -945
  306. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  307. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  308. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +179 -179
  309. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +92 -92
  310. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +119 -119
  311. package/src/protobuf.ts +868 -868
  312. package/src/reflect.ts +57 -57
  313. package/src/schemas/json/IJsonApplication.ts +73 -73
  314. package/src/schemas/json/IJsonSchemaCollection.ts +29 -29
  315. package/src/schemas/json/__IJsonApplication.ts +63 -63
  316. package/src/schemas/llm/ILlmApplicationOfValidate.ts +55 -0
  317. package/src/schemas/llm/ILlmFunctionOfValidate.ts +39 -0
  318. package/src/schemas/metadata/IMetadata.ts +35 -35
  319. package/src/schemas/metadata/IMetadataAlias.ts +6 -6
  320. package/src/schemas/metadata/IMetadataAliasType.ts +12 -12
  321. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  322. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  323. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  324. package/src/schemas/metadata/IMetadataConstantValue.ts +11 -11
  325. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  326. package/src/schemas/metadata/IMetadataMap.ts +8 -8
  327. package/src/schemas/metadata/IMetadataNative.ts +6 -6
  328. package/src/schemas/metadata/IMetadataObject.ts +6 -6
  329. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  330. package/src/schemas/metadata/IMetadataSet.ts +7 -7
  331. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  332. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  333. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  334. package/src/schemas/metadata/Metadata.ts +669 -669
  335. package/src/schemas/metadata/MetadataAlias.ts +46 -46
  336. package/src/schemas/metadata/MetadataAliasType.ts +63 -63
  337. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  338. package/src/schemas/metadata/MetadataArray.ts +49 -49
  339. package/src/schemas/metadata/MetadataAtomic.ts +87 -87
  340. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  341. package/src/schemas/metadata/MetadataConstantValue.ts +62 -62
  342. package/src/schemas/metadata/MetadataMap.ts +48 -48
  343. package/src/schemas/metadata/MetadataNative.ts +44 -44
  344. package/src/schemas/metadata/MetadataObject.ts +48 -48
  345. package/src/schemas/metadata/MetadataObjectType.ts +149 -149
  346. package/src/schemas/metadata/MetadataParameter.ts +4 -0
  347. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  348. package/src/schemas/metadata/MetadataSet.ts +45 -45
  349. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  350. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  351. package/src/schemas/protobuf/IProtobufProperty.ts +6 -6
  352. package/src/schemas/protobuf/IProtobufPropertyType.ts +37 -37
  353. package/src/schemas/protobuf/IProtobufSchema.ts +50 -50
  354. package/src/tags/Example.ts +24 -24
  355. package/src/tags/Examples.ts +16 -16
  356. package/src/tags/Format.ts +50 -50
  357. package/src/tags/JsonSchemaPlugin.ts +8 -8
  358. package/src/tags/Sequence.ts +10 -10
  359. package/src/tags/TagBase.ts +82 -82
  360. package/src/tags/Type.ts +32 -32
  361. package/src/tags/UniqueItems.ts +14 -14
  362. package/src/tags/index.ts +21 -21
  363. package/src/transform.ts +35 -35
  364. package/src/transformers/CallExpressionTransformer.ts +547 -545
  365. package/src/transformers/FileTransformer.ts +136 -136
  366. package/src/transformers/IProgrammerProps.ts +11 -11
  367. package/src/transformers/ITransformOptions.ts +62 -62
  368. package/src/transformers/ITransformProps.ts +9 -9
  369. package/src/transformers/ITypiaContext.ts +18 -18
  370. package/src/transformers/ImportTransformer.ts +81 -81
  371. package/src/transformers/NodeTransformer.ts +17 -17
  372. package/src/transformers/TransformerError.ts +60 -60
  373. package/src/transformers/features/AssertTransformer.ts +24 -24
  374. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  375. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  376. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  377. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  378. package/src/transformers/features/IsTransformer.ts +18 -18
  379. package/src/transformers/features/RandomTransformer.ts +41 -41
  380. package/src/transformers/features/ValidateTransformer.ts +18 -18
  381. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  382. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  383. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  384. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  385. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  386. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  387. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  388. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  389. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  390. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  391. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  392. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  393. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  394. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  395. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  396. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  397. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  398. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  399. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  400. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  401. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  402. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  403. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  404. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  405. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  406. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  407. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  408. package/src/transformers/features/json/JsonApplicationTransformer.ts +105 -105
  409. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  410. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  411. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  412. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  413. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  414. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  415. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  416. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  417. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  418. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  419. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  420. package/src/transformers/features/json/JsonSchemasTransformer.ts +143 -143
  421. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  422. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  423. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  424. package/src/transformers/features/llm/LlmApplicationOfValidateTransformer.ts +115 -0
  425. package/src/transformers/features/llm/LlmApplicationTransformer.ts +113 -113
  426. package/src/transformers/features/llm/LlmParametersTransformer.ts +89 -89
  427. package/src/transformers/features/llm/LlmSchemaTransformer.ts +130 -130
  428. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  429. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  430. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  431. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  432. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  433. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  434. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  435. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  436. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  437. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  438. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  439. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  440. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  441. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  442. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  443. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  444. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  445. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  446. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  447. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  448. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  449. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  450. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  451. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  452. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  453. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  454. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  455. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  456. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  457. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  458. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  459. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  460. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  461. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  462. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  463. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  464. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  465. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  466. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  467. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  468. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  469. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  470. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  471. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  472. package/src/transformers/internal/GenericTransformer.ts +101 -101
  473. package/src/utils/MapUtil.ts +14 -14
  474. package/src/utils/NamingConvention.ts +94 -94
  475. package/src/utils/ProtobufNameEncoder.ts +32 -32
  476. package/src/utils/StringUtil.ts +16 -16
@@ -1,83 +1,83 @@
1
- import fs from "fs";
2
-
3
- import { TypiaProgrammer } from "../programmers/TypiaProgrammer";
4
-
5
- import { ArgumentParser } from "./setup/ArgumentParser";
6
- import { PackageManager } from "./setup/PackageManager";
7
-
8
- export namespace TypiaGenerateWizard {
9
- export async function generate(): Promise<void> {
10
- console.log("----------------------------------------");
11
- console.log(" Typia Generate Wizard");
12
- console.log("----------------------------------------");
13
-
14
- // LOAD PACKAGE.JSON INFO
15
- const pack: PackageManager = await PackageManager.mount();
16
- const options: IArguments = await ArgumentParser.parse(pack, inquiry);
17
- await TypiaProgrammer.build(options);
18
- }
19
-
20
- const inquiry: ArgumentParser.Inquiry<IArguments> = async (
21
- _pack,
22
- command,
23
- prompt,
24
- action,
25
- ) => {
26
- // PREPARE ASSETS
27
- command.option("--input [path]", "input directory");
28
- command.option("--output [directory]", "output directory");
29
- command.option("--project [project]", "tsconfig.json file location");
30
-
31
- const questioned = { value: false };
32
-
33
- const input = (name: string) => async (message: string) => {
34
- const result = await prompt()({
35
- type: "input",
36
- name,
37
- message,
38
- default: "",
39
- });
40
- return result[name] as string;
41
- };
42
- const select =
43
- (name: string) =>
44
- (message: string) =>
45
- async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
46
- questioned.value = true;
47
- return (
48
- await prompt()({
49
- type: "list",
50
- name: name,
51
- message: message,
52
- choices: choices,
53
- })
54
- )[name];
55
- };
56
- const configure = async (): Promise<string> => {
57
- const files: string[] = await (
58
- await fs.promises.readdir(process.cwd())
59
- ).filter(
60
- (str) =>
61
- str.substring(0, 8) === "tsconfig" &&
62
- str.substring(str.length - 5) === ".json",
63
- );
64
- if (files.length === 0)
65
- throw new URIError(`Unable to find "tsconfig.json" file.`);
66
- else if (files.length === 1) return files[0]!;
67
- return select("tsconfig")("TS Config File")(files);
68
- };
69
-
70
- return action(async (options) => {
71
- options.input ??= await input("input")("input directory");
72
- options.output ??= await input("output")("output directory");
73
- options.project ??= await configure();
74
- return options as IArguments;
75
- });
76
- };
77
-
78
- export interface IArguments {
79
- input: string;
80
- output: string;
81
- project: string;
82
- }
83
- }
1
+ import fs from "fs";
2
+
3
+ import { TypiaProgrammer } from "../programmers/TypiaProgrammer";
4
+
5
+ import { ArgumentParser } from "./setup/ArgumentParser";
6
+ import { PackageManager } from "./setup/PackageManager";
7
+
8
+ export namespace TypiaGenerateWizard {
9
+ export async function generate(): Promise<void> {
10
+ console.log("----------------------------------------");
11
+ console.log(" Typia Generate Wizard");
12
+ console.log("----------------------------------------");
13
+
14
+ // LOAD PACKAGE.JSON INFO
15
+ const pack: PackageManager = await PackageManager.mount();
16
+ const options: IArguments = await ArgumentParser.parse(pack, inquiry);
17
+ await TypiaProgrammer.build(options);
18
+ }
19
+
20
+ const inquiry: ArgumentParser.Inquiry<IArguments> = async (
21
+ _pack,
22
+ command,
23
+ prompt,
24
+ action,
25
+ ) => {
26
+ // PREPARE ASSETS
27
+ command.option("--input [path]", "input directory");
28
+ command.option("--output [directory]", "output directory");
29
+ command.option("--project [project]", "tsconfig.json file location");
30
+
31
+ const questioned = { value: false };
32
+
33
+ const input = (name: string) => async (message: string) => {
34
+ const result = await prompt()({
35
+ type: "input",
36
+ name,
37
+ message,
38
+ default: "",
39
+ });
40
+ return result[name] as string;
41
+ };
42
+ const select =
43
+ (name: string) =>
44
+ (message: string) =>
45
+ async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
46
+ questioned.value = true;
47
+ return (
48
+ await prompt()({
49
+ type: "list",
50
+ name: name,
51
+ message: message,
52
+ choices: choices,
53
+ })
54
+ )[name];
55
+ };
56
+ const configure = async (): Promise<string> => {
57
+ const files: string[] = await (
58
+ await fs.promises.readdir(process.cwd())
59
+ ).filter(
60
+ (str) =>
61
+ str.substring(0, 8) === "tsconfig" &&
62
+ str.substring(str.length - 5) === ".json",
63
+ );
64
+ if (files.length === 0)
65
+ throw new URIError(`Unable to find "tsconfig.json" file.`);
66
+ else if (files.length === 1) return files[0]!;
67
+ return select("tsconfig")("TS Config File")(files);
68
+ };
69
+
70
+ return action(async (options) => {
71
+ options.input ??= await input("input")("input directory");
72
+ options.output ??= await input("output")("output directory");
73
+ options.project ??= await configure();
74
+ return options as IArguments;
75
+ });
76
+ };
77
+
78
+ export interface IArguments {
79
+ input: string;
80
+ output: string;
81
+ project: string;
82
+ }
83
+ }
@@ -1,45 +1,45 @@
1
- import fs from "fs";
2
-
3
- export namespace TypiaPatchWizard {
4
- export const main = async (): Promise<void> => {
5
- console.log("----------------------------------------");
6
- console.log(" Typia Setup Wizard");
7
- console.log("----------------------------------------");
8
- console.log(
9
- [
10
- `Since TypeScript v5.3 update, "tsc" no more parses JSDoc comments.`,
11
- ``,
12
- `Therefore, "typia" revives the JSDoc parsing feature by patching "tsc".`,
13
- ``,
14
- `This is a temporary feature of "typia", and it would be removed when "ts-patch" being updated.`,
15
- ].join("\n"),
16
- );
17
-
18
- await patch();
19
- };
20
-
21
- export const patch = async (): Promise<void> => {
22
- for (const file of ["tsc.js", "_tsc.js"])
23
- try {
24
- const location: string = require.resolve(`typescript/lib/${file}`);
25
- const content: string = await fs.promises.readFile(location, "utf8");
26
- if (content.indexOf(FROM_WITH_COMMENT) !== -1)
27
- await fs.promises.writeFile(
28
- location,
29
- content.replace(FROM_WITH_COMMENT, TO_WITH_COMMENT),
30
- "utf8",
31
- );
32
- else if (content.indexOf(FROM_ONLY) !== -1)
33
- await fs.promises.writeFile(
34
- location,
35
- content.replace(FROM_ONLY, TO_ONLY),
36
- "utf8",
37
- );
38
- } catch {}
39
- };
40
- }
41
-
42
- const FROM_WITH_COMMENT = `var defaultJSDocParsingMode = 2 /* ParseForTypeErrors */`;
43
- const TO_WITH_COMMENT = `var defaultJSDocParsingMode = 0 /* ParseAll */`;
44
- const FROM_ONLY = `var defaultJSDocParsingMode = 2`;
45
- const TO_ONLY = `var defaultJSDocParsingMode = 0`;
1
+ import fs from "fs";
2
+
3
+ export namespace TypiaPatchWizard {
4
+ export const main = async (): Promise<void> => {
5
+ console.log("----------------------------------------");
6
+ console.log(" Typia Setup Wizard");
7
+ console.log("----------------------------------------");
8
+ console.log(
9
+ [
10
+ `Since TypeScript v5.3 update, "tsc" no more parses JSDoc comments.`,
11
+ ``,
12
+ `Therefore, "typia" revives the JSDoc parsing feature by patching "tsc".`,
13
+ ``,
14
+ `This is a temporary feature of "typia", and it would be removed when "ts-patch" being updated.`,
15
+ ].join("\n"),
16
+ );
17
+
18
+ await patch();
19
+ };
20
+
21
+ export const patch = async (): Promise<void> => {
22
+ for (const file of ["tsc.js", "_tsc.js"])
23
+ try {
24
+ const location: string = require.resolve(`typescript/lib/${file}`);
25
+ const content: string = await fs.promises.readFile(location, "utf8");
26
+ if (content.indexOf(FROM_WITH_COMMENT) !== -1)
27
+ await fs.promises.writeFile(
28
+ location,
29
+ content.replace(FROM_WITH_COMMENT, TO_WITH_COMMENT),
30
+ "utf8",
31
+ );
32
+ else if (content.indexOf(FROM_ONLY) !== -1)
33
+ await fs.promises.writeFile(
34
+ location,
35
+ content.replace(FROM_ONLY, TO_ONLY),
36
+ "utf8",
37
+ );
38
+ } catch {}
39
+ };
40
+ }
41
+
42
+ const FROM_WITH_COMMENT = `var defaultJSDocParsingMode = 2 /* ParseForTypeErrors */`;
43
+ const TO_WITH_COMMENT = `var defaultJSDocParsingMode = 0 /* ParseAll */`;
44
+ const FROM_ONLY = `var defaultJSDocParsingMode = 2`;
45
+ const TO_ONLY = `var defaultJSDocParsingMode = 0`;
@@ -1,179 +1,179 @@
1
- import fs from "fs";
2
- import { DetectResult, detect } from "package-manager-detector";
3
-
4
- import { ArgumentParser } from "./setup/ArgumentParser";
5
- import { CommandExecutor } from "./setup/CommandExecutor";
6
- import { PackageManager } from "./setup/PackageManager";
7
- import { PluginConfigurator } from "./setup/PluginConfigurator";
8
-
9
- export namespace TypiaSetupWizard {
10
- export interface IArguments {
11
- manager: "npm" | "pnpm" | "yarn" | "bun";
12
- project: string | null;
13
- }
14
-
15
- export const setup = async (): Promise<void> => {
16
- console.log("----------------------------------------");
17
- console.log(" Typia Setup Wizard");
18
- console.log("----------------------------------------");
19
-
20
- // PREPARE ASSETS
21
- const pack: PackageManager = await PackageManager.mount();
22
- const args: IArguments = await ArgumentParser.parse(pack, inquiry);
23
-
24
- // INSTALL TYPESCRIPT COMPILERS
25
- pack.install({
26
- dev: true,
27
- modulo: "typescript",
28
- version: await getTypeScriptVersion(),
29
- });
30
- pack.install({ dev: true, modulo: "ts-patch", version: "latest" });
31
- args.project ??= (() => {
32
- const runner: string = pack.manager === "npm" ? "npx" : pack.manager;
33
- CommandExecutor.run(`${runner} tsc --init`);
34
- return (args.project = "tsconfig.json");
35
- })();
36
-
37
- // SETUP TRANSFORMER
38
- await pack.save((data) => {
39
- // COMPOSE PREPARE COMMAND
40
- data.scripts ??= {};
41
- if (
42
- typeof data.scripts.prepare === "string" &&
43
- data.scripts.prepare.trim().length
44
- ) {
45
- if (
46
- data.scripts.prepare.indexOf("ts-patch install") === -1 &&
47
- data.scripts.prepare.indexOf("typia patch") === -1
48
- )
49
- data.scripts.prepare =
50
- "ts-patch install && typia patch && " + data.scripts.prepare;
51
- else if (data.scripts.prepare.indexOf("ts-patch install") === -1)
52
- data.scripts.prepare = "ts-patch install && " + data.scripts.prepare;
53
- else if (data.scripts.prepare.indexOf("typia patch") === -1)
54
- data.scripts.prepare = data.scripts.prepare.replace(
55
- "ts-patch install",
56
- "ts-patch install && typia patch",
57
- );
58
- } else data.scripts.prepare = "ts-patch install && typia patch";
59
-
60
- // FOR OLDER VERSIONS
61
- if (typeof data.scripts.postinstall === "string") {
62
- data.scripts.postinstall = data.scripts.postinstall
63
- .split("&&")
64
- .map((str) => str.trim())
65
- .filter((str) => str.indexOf("ts-patch install") === -1)
66
- .join(" && ");
67
- if (data.scripts.postinstall.length === 0)
68
- delete data.scripts.postinstall;
69
- }
70
- });
71
-
72
- // CONFIGURE TYPIA
73
- await PluginConfigurator.configure(args);
74
- CommandExecutor.run(`${pack.manager} run prepare`);
75
- };
76
-
77
- const inquiry: ArgumentParser.Inquiry<IArguments> = async (
78
- pack,
79
- command,
80
- prompt,
81
- action,
82
- ) => {
83
- // PREPARE ASSETS
84
- command.option("--manager [manager", "package manager");
85
- command.option("--project [project]", "tsconfig.json file location");
86
-
87
- // INTERNAL PROCEDURES
88
- const questioned = { value: false };
89
- const select =
90
- (name: string) =>
91
- (message: string) =>
92
- async <Choice extends string>(
93
- choices: Choice[],
94
- filter?: (choice: string) => Choice,
95
- ): Promise<Choice> => {
96
- questioned.value = true;
97
- return (
98
- await prompt()({
99
- type: "list",
100
- name: name,
101
- message: message,
102
- choices: choices,
103
- ...(filter
104
- ? {
105
- filter,
106
- }
107
- : {}),
108
- })
109
- )[name];
110
- };
111
- const configure = async (): Promise<string | null> => {
112
- const fileList: string[] = await (
113
- await fs.promises.readdir(process.cwd())
114
- )
115
- .filter(
116
- (str) =>
117
- str.substring(0, 8) === "tsconfig" &&
118
- str.substring(str.length - 5) === ".json",
119
- )
120
- .sort((x, y) =>
121
- x === "tsconfig.json"
122
- ? -1
123
- : y === "tsconfig.json"
124
- ? 1
125
- : x < y
126
- ? -1
127
- : 1,
128
- );
129
- if (fileList.length === 0) {
130
- if (process.cwd() !== pack.directory)
131
- throw new URIError(`Unable to find "tsconfig.json" file.`);
132
- return null;
133
- } else if (fileList.length === 1) return fileList[0]!;
134
- return select("tsconfig")("TS Config File")(fileList);
135
- };
136
-
137
- // DO CONSTRUCT
138
- return action(async (options) => {
139
- pack.manager = options.manager ??=
140
- (await detectManager()) ??
141
- (await select("manager")("Package Manager")(
142
- [
143
- "npm" as const,
144
- "pnpm" as const,
145
- "bun" as const,
146
- "yarn (berry is not supported)" as "yarn",
147
- ],
148
- (value) => value.split(" ")[0] as "yarn",
149
- ));
150
- options.project ??= await configure();
151
-
152
- if (questioned.value) console.log("");
153
- return options as IArguments;
154
- });
155
- };
156
-
157
- const detectManager = async (): Promise<
158
- "npm" | "pnpm" | "yarn" | "bun" | null
159
- > => {
160
- const result: DetectResult | null = await detect({ cwd: process.cwd() });
161
- switch (result?.name) {
162
- case "npm":
163
- case "deno":
164
- return null; // NPM case is still selectable & Deno is not supported
165
- default:
166
- return result?.name ?? null;
167
- }
168
- };
169
-
170
- const getTypeScriptVersion = async (): Promise<string> => {
171
- const content: string = await fs.promises.readFile(
172
- `${__dirname}/../../package.json`,
173
- "utf-8",
174
- );
175
- const json: { devDependencies: { typescript: string } } =
176
- JSON.parse(content);
177
- return json.devDependencies.typescript;
178
- };
179
- }
1
+ import fs from "fs";
2
+ import { DetectResult, detect } from "package-manager-detector";
3
+
4
+ import { ArgumentParser } from "./setup/ArgumentParser";
5
+ import { CommandExecutor } from "./setup/CommandExecutor";
6
+ import { PackageManager } from "./setup/PackageManager";
7
+ import { PluginConfigurator } from "./setup/PluginConfigurator";
8
+
9
+ export namespace TypiaSetupWizard {
10
+ export interface IArguments {
11
+ manager: "npm" | "pnpm" | "yarn" | "bun";
12
+ project: string | null;
13
+ }
14
+
15
+ export const setup = async (): Promise<void> => {
16
+ console.log("----------------------------------------");
17
+ console.log(" Typia Setup Wizard");
18
+ console.log("----------------------------------------");
19
+
20
+ // PREPARE ASSETS
21
+ const pack: PackageManager = await PackageManager.mount();
22
+ const args: IArguments = await ArgumentParser.parse(pack, inquiry);
23
+
24
+ // INSTALL TYPESCRIPT COMPILERS
25
+ pack.install({
26
+ dev: true,
27
+ modulo: "typescript",
28
+ version: await getTypeScriptVersion(),
29
+ });
30
+ pack.install({ dev: true, modulo: "ts-patch", version: "latest" });
31
+ args.project ??= (() => {
32
+ const runner: string = pack.manager === "npm" ? "npx" : pack.manager;
33
+ CommandExecutor.run(`${runner} tsc --init`);
34
+ return (args.project = "tsconfig.json");
35
+ })();
36
+
37
+ // SETUP TRANSFORMER
38
+ await pack.save((data) => {
39
+ // COMPOSE PREPARE COMMAND
40
+ data.scripts ??= {};
41
+ if (
42
+ typeof data.scripts.prepare === "string" &&
43
+ data.scripts.prepare.trim().length
44
+ ) {
45
+ if (
46
+ data.scripts.prepare.indexOf("ts-patch install") === -1 &&
47
+ data.scripts.prepare.indexOf("typia patch") === -1
48
+ )
49
+ data.scripts.prepare =
50
+ "ts-patch install && typia patch && " + data.scripts.prepare;
51
+ else if (data.scripts.prepare.indexOf("ts-patch install") === -1)
52
+ data.scripts.prepare = "ts-patch install && " + data.scripts.prepare;
53
+ else if (data.scripts.prepare.indexOf("typia patch") === -1)
54
+ data.scripts.prepare = data.scripts.prepare.replace(
55
+ "ts-patch install",
56
+ "ts-patch install && typia patch",
57
+ );
58
+ } else data.scripts.prepare = "ts-patch install && typia patch";
59
+
60
+ // FOR OLDER VERSIONS
61
+ if (typeof data.scripts.postinstall === "string") {
62
+ data.scripts.postinstall = data.scripts.postinstall
63
+ .split("&&")
64
+ .map((str) => str.trim())
65
+ .filter((str) => str.indexOf("ts-patch install") === -1)
66
+ .join(" && ");
67
+ if (data.scripts.postinstall.length === 0)
68
+ delete data.scripts.postinstall;
69
+ }
70
+ });
71
+
72
+ // CONFIGURE TYPIA
73
+ await PluginConfigurator.configure(args);
74
+ CommandExecutor.run(`${pack.manager} run prepare`);
75
+ };
76
+
77
+ const inquiry: ArgumentParser.Inquiry<IArguments> = async (
78
+ pack,
79
+ command,
80
+ prompt,
81
+ action,
82
+ ) => {
83
+ // PREPARE ASSETS
84
+ command.option("--manager [manager", "package manager");
85
+ command.option("--project [project]", "tsconfig.json file location");
86
+
87
+ // INTERNAL PROCEDURES
88
+ const questioned = { value: false };
89
+ const select =
90
+ (name: string) =>
91
+ (message: string) =>
92
+ async <Choice extends string>(
93
+ choices: Choice[],
94
+ filter?: (choice: string) => Choice,
95
+ ): Promise<Choice> => {
96
+ questioned.value = true;
97
+ return (
98
+ await prompt()({
99
+ type: "list",
100
+ name: name,
101
+ message: message,
102
+ choices: choices,
103
+ ...(filter
104
+ ? {
105
+ filter,
106
+ }
107
+ : {}),
108
+ })
109
+ )[name];
110
+ };
111
+ const configure = async (): Promise<string | null> => {
112
+ const fileList: string[] = await (
113
+ await fs.promises.readdir(process.cwd())
114
+ )
115
+ .filter(
116
+ (str) =>
117
+ str.substring(0, 8) === "tsconfig" &&
118
+ str.substring(str.length - 5) === ".json",
119
+ )
120
+ .sort((x, y) =>
121
+ x === "tsconfig.json"
122
+ ? -1
123
+ : y === "tsconfig.json"
124
+ ? 1
125
+ : x < y
126
+ ? -1
127
+ : 1,
128
+ );
129
+ if (fileList.length === 0) {
130
+ if (process.cwd() !== pack.directory)
131
+ throw new URIError(`Unable to find "tsconfig.json" file.`);
132
+ return null;
133
+ } else if (fileList.length === 1) return fileList[0]!;
134
+ return select("tsconfig")("TS Config File")(fileList);
135
+ };
136
+
137
+ // DO CONSTRUCT
138
+ return action(async (options) => {
139
+ pack.manager = options.manager ??=
140
+ (await detectManager()) ??
141
+ (await select("manager")("Package Manager")(
142
+ [
143
+ "npm" as const,
144
+ "pnpm" as const,
145
+ "bun" as const,
146
+ "yarn (berry is not supported)" as "yarn",
147
+ ],
148
+ (value) => value.split(" ")[0] as "yarn",
149
+ ));
150
+ options.project ??= await configure();
151
+
152
+ if (questioned.value) console.log("");
153
+ return options as IArguments;
154
+ });
155
+ };
156
+
157
+ const detectManager = async (): Promise<
158
+ "npm" | "pnpm" | "yarn" | "bun" | null
159
+ > => {
160
+ const result: DetectResult | null = await detect({ cwd: process.cwd() });
161
+ switch (result?.name) {
162
+ case "npm":
163
+ case "deno":
164
+ return null; // NPM case is still selectable & Deno is not supported
165
+ default:
166
+ return result?.name ?? null;
167
+ }
168
+ };
169
+
170
+ const getTypeScriptVersion = async (): Promise<string> => {
171
+ const content: string = await fs.promises.readFile(
172
+ `${__dirname}/../../package.json`,
173
+ "utf-8",
174
+ );
175
+ const json: { devDependencies: { typescript: string } } =
176
+ JSON.parse(content);
177
+ return json.devDependencies.typescript;
178
+ };
179
+ }