typia 7.1.0 → 7.2.1-dev.20241212

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