typia 5.0.4 → 5.0.5-dev.20230921

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 (291) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/IRandomGenerator.ts +35 -35
  4. package/src/IValidation.ts +21 -21
  5. package/src/Primitive.ts +135 -135
  6. package/src/Resolved.ts +116 -116
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +85 -85
  9. package/src/executable/TypiaSetupWizard.ts +153 -153
  10. package/src/executable/setup/ArgumentParser.ts +45 -45
  11. package/src/executable/setup/CommandExecutor.ts +8 -8
  12. package/src/executable/setup/FileRetriever.ts +22 -22
  13. package/src/executable/setup/PackageManager.ts +71 -71
  14. package/src/executable/setup/PluginConfigurator.ts +70 -70
  15. package/src/executable/typia.ts +52 -52
  16. package/src/factories/CommentFactory.ts +84 -84
  17. package/src/factories/ExpressionFactory.ts +159 -159
  18. package/src/factories/IdentifierFactory.ts +74 -74
  19. package/src/factories/JsonMetadataFactory.ts +43 -43
  20. package/src/factories/LiteralFactory.ts +47 -47
  21. package/src/factories/MetadataCollection.ts +269 -269
  22. package/src/factories/MetadataCommentTagFactory.ts +629 -629
  23. package/src/factories/MetadataFactory.ts +214 -214
  24. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  25. package/src/factories/NumericRangeFactory.ts +33 -33
  26. package/src/factories/ProtobufFactory.ts +272 -272
  27. package/src/factories/StatementFactory.ts +72 -72
  28. package/src/factories/TemplateFactory.ts +58 -58
  29. package/src/factories/TypeFactory.ts +119 -119
  30. package/src/factories/ValueFactory.ts +12 -12
  31. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  32. package/src/factories/internal/metadata/emend_metadata_atomics.ts +40 -40
  33. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  34. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +41 -41
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
  36. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +60 -60
  37. package/src/factories/internal/metadata/explore_metadata.ts +32 -32
  38. package/src/factories/internal/metadata/iterate_metadata.ts +101 -101
  39. package/src/factories/internal/metadata/iterate_metadata_alias.ts +35 -35
  40. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  41. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  42. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  43. package/src/factories/internal/metadata/iterate_metadata_collection.ts +141 -141
  44. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +197 -197
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -210
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +44 -44
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +42 -42
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_template.ts +47 -47
  54. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  55. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  56. package/src/functional/$ProtobufReader.ts +201 -201
  57. package/src/functional/$ProtobufSizer.ts +147 -147
  58. package/src/functional/$ProtobufWriter.ts +151 -151
  59. package/src/functional/$any.ts +4 -4
  60. package/src/functional/$clone.ts +4 -4
  61. package/src/functional/$dictionary.ts +25 -25
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +2 -2
  65. package/src/functional/$join.ts +46 -46
  66. package/src/functional/$number.ts +13 -13
  67. package/src/functional/$report.ts +15 -15
  68. package/src/functional/$rest.ts +3 -3
  69. package/src/functional/$string.ts +50 -50
  70. package/src/functional/$strlen.ts +7 -7
  71. package/src/functional/$tail.ts +5 -5
  72. package/src/functional/$varint.ts +130 -130
  73. package/src/functional/$zigzag.ts +39 -39
  74. package/src/functional/IProtobufWriter.ts +18 -18
  75. package/src/functional/Namespace.ts +133 -133
  76. package/src/index.ts +4 -4
  77. package/src/json.ts +648 -648
  78. package/src/misc.ts +651 -651
  79. package/src/module.ts +656 -656
  80. package/src/programmers/AssertProgrammer.ts +317 -317
  81. package/src/programmers/CheckerProgrammer.ts +1137 -1137
  82. package/src/programmers/FeatureProgrammer.ts +478 -478
  83. package/src/programmers/IsProgrammer.ts +252 -252
  84. package/src/programmers/RandomProgrammer.ts +878 -878
  85. package/src/programmers/TypiaProgrammer.ts +163 -163
  86. package/src/programmers/ValidateProgrammer.ts +346 -346
  87. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  88. package/src/programmers/helpers/CloneJoiner.ts +144 -144
  89. package/src/programmers/helpers/FunctionImporeter.ts +91 -91
  90. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  91. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  92. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  93. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  94. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  95. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  96. package/src/programmers/helpers/RandomJoiner.ts +151 -151
  97. package/src/programmers/helpers/RandomRanger.ts +173 -173
  98. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  99. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  100. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  101. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  102. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  103. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  104. package/src/programmers/internal/application_alias.ts +65 -65
  105. package/src/programmers/internal/application_array.ts +53 -53
  106. package/src/programmers/internal/application_boolean.ts +15 -15
  107. package/src/programmers/internal/application_constant.ts +26 -26
  108. package/src/programmers/internal/application_default.ts +17 -17
  109. package/src/programmers/internal/application_default_string.ts +37 -37
  110. package/src/programmers/internal/application_escaped.ts +55 -55
  111. package/src/programmers/internal/application_native.ts +39 -39
  112. package/src/programmers/internal/application_number.ts +88 -88
  113. package/src/programmers/internal/application_object.ts +162 -162
  114. package/src/programmers/internal/application_schema.ts +175 -175
  115. package/src/programmers/internal/application_string.ts +51 -51
  116. package/src/programmers/internal/application_templates.ts +25 -25
  117. package/src/programmers/internal/application_tuple.ts +58 -58
  118. package/src/programmers/internal/check_array_length.ts +41 -41
  119. package/src/programmers/internal/check_bigint.ts +45 -45
  120. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  121. package/src/programmers/internal/check_everything.ts +28 -28
  122. package/src/programmers/internal/check_native.ts +21 -21
  123. package/src/programmers/internal/check_number.ts +105 -105
  124. package/src/programmers/internal/check_object.ts +55 -55
  125. package/src/programmers/internal/check_string.ts +45 -45
  126. package/src/programmers/internal/check_template.ts +61 -61
  127. package/src/programmers/internal/check_union_array_like.ts +323 -323
  128. package/src/programmers/internal/decode_union_object.ts +84 -84
  129. package/src/programmers/internal/feature_object_entries.ts +58 -58
  130. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  131. package/src/programmers/internal/prune_object_properties.ts +60 -60
  132. package/src/programmers/internal/random_custom.ts +37 -37
  133. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  134. package/src/programmers/internal/stringify_native.ts +7 -7
  135. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  136. package/src/programmers/internal/template_to_pattern.ts +15 -15
  137. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  138. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  139. package/src/programmers/json/JsonAssertParseProgrammer.ts +71 -71
  140. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  141. package/src/programmers/json/JsonIsParseProgrammer.ts +77 -77
  142. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  143. package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
  144. package/src/programmers/json/JsonValidateParseProgrammer.ts +68 -68
  145. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  146. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  147. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  148. package/src/programmers/misc/MiscCloneProgrammer.ts +774 -774
  149. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  150. package/src/programmers/misc/MiscIsPruneProgrammer.ts +73 -73
  151. package/src/programmers/misc/MiscLiteralsProgrammer.ts +69 -69
  152. package/src/programmers/misc/MiscPruneProgrammer.ts +550 -550
  153. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  154. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  155. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  156. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  157. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +655 -655
  158. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +883 -883
  159. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -85
  160. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  161. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +165 -165
  162. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  163. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  164. package/src/protobuf.ts +881 -881
  165. package/src/schemas/json/IJsonApplication.ts +8 -8
  166. package/src/schemas/json/IJsonComponents.ts +33 -33
  167. package/src/schemas/json/IJsonSchema.ts +110 -110
  168. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  169. package/src/schemas/metadata/IMetadata.ts +34 -34
  170. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  171. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  172. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  173. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  174. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  175. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  176. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  177. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  178. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  179. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  180. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  181. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  182. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  183. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  184. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -8
  185. package/src/schemas/metadata/Metadata.ts +685 -685
  186. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  187. package/src/schemas/metadata/MetadataArray.ts +49 -49
  188. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  189. package/src/schemas/metadata/MetadataAtomic.ts +42 -42
  190. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  191. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  192. package/src/schemas/metadata/MetadataObject.ts +139 -139
  193. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  194. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  195. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  196. package/src/tags/ExclusiveMaximum.ts +13 -13
  197. package/src/tags/ExclusiveMinimum.ts +13 -13
  198. package/src/tags/Format.ts +30 -30
  199. package/src/tags/MaxItems.ts +9 -9
  200. package/src/tags/MaxLength.ts +9 -9
  201. package/src/tags/Maximum.ts +13 -13
  202. package/src/tags/MinItems.ts +9 -9
  203. package/src/tags/MinLength.ts +9 -9
  204. package/src/tags/Minimum.ts +13 -13
  205. package/src/tags/MultipleOf.ts +15 -15
  206. package/src/tags/Pattern.ts +8 -8
  207. package/src/tags/TagBase.ts +68 -68
  208. package/src/tags/Type.ts +27 -27
  209. package/src/tags/index.ts +13 -13
  210. package/src/transform.ts +35 -35
  211. package/src/transformers/CallExpressionTransformer.ts +243 -243
  212. package/src/transformers/FileTransformer.ts +57 -57
  213. package/src/transformers/IProject.ts +15 -15
  214. package/src/transformers/ITransformOptions.ts +62 -62
  215. package/src/transformers/ImportTransformer.ts +66 -66
  216. package/src/transformers/NodeTransformer.ts +13 -13
  217. package/src/transformers/TransformerError.ts +55 -55
  218. package/src/transformers/features/AssertTransformer.ts +11 -11
  219. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  220. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  221. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  222. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  223. package/src/transformers/features/IsTransformer.ts +11 -11
  224. package/src/transformers/features/RandomTransformer.ts +46 -46
  225. package/src/transformers/features/ValidateTransformer.ts +11 -11
  226. package/src/transformers/features/json/JsonApplicationTransformer.ts +118 -118
  227. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  228. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  229. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  230. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  231. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  232. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  233. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  234. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  235. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  236. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  237. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  238. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  239. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  240. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  241. package/src/transformers/features/misc/MetadataTransformer.ts +61 -61
  242. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  243. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  244. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  245. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  246. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  247. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  248. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  249. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  250. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  251. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  252. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  253. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  254. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  255. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  256. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  257. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  258. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  259. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  260. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  261. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  262. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  263. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  264. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  265. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  266. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  267. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  268. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  269. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  270. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  271. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  272. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  273. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  274. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  275. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  276. package/src/transformers/internal/GenericTransformer.ts +104 -104
  277. package/src/typings/Atomic.ts +18 -18
  278. package/src/typings/ClassProperties.ts +5 -5
  279. package/src/typings/Customizable.ts +5 -5
  280. package/src/typings/OmitNever.ts +3 -3
  281. package/src/typings/ProtobufAtomic.ts +19 -19
  282. package/src/typings/SpecialFields.ts +3 -3
  283. package/src/typings/ValidationPipe.ts +9 -9
  284. package/src/typings/Writable.ts +11 -11
  285. package/src/utils/ArrayUtil.ts +45 -45
  286. package/src/utils/Escaper.ts +46 -46
  287. package/src/utils/MapUtil.ts +12 -12
  288. package/src/utils/NameEncoder.ts +32 -32
  289. package/src/utils/PatternUtil.ts +33 -33
  290. package/src/utils/RandomGenerator.ts +83 -83
  291. package/src/utils/Singleton.ts +17 -17
@@ -1,36 +1,36 @@
1
- export class TypeGuardError extends Error {
2
- public readonly method: string;
3
- public readonly path: string | undefined;
4
- public readonly expected: string;
5
- public readonly value: any;
6
-
7
- public constructor(props: TypeGuardError.IProps) {
8
- // MESSAGE CONSTRUCTION
9
- super(
10
- props.message ||
11
- `Error on ${props.method}(): invalid type${
12
- props.path ? ` on ${props.path}` : ""
13
- }, expect to be ${props.expected}`,
14
- );
15
-
16
- // INHERITANCE POLYFILL
17
- const proto = new.target.prototype;
18
- if (Object.setPrototypeOf) Object.setPrototypeOf(this, proto);
19
- else (this as any).__proto__ = proto;
20
-
21
- // ASSIGN MEMBERS
22
- this.method = props.method;
23
- this.path = props.path;
24
- this.expected = props.expected;
25
- this.value = props.value;
26
- }
27
- }
28
- export namespace TypeGuardError {
29
- export interface IProps {
30
- method: string;
31
- path?: string;
32
- expected: string;
33
- value: any;
34
- message?: string;
35
- }
36
- }
1
+ export class TypeGuardError extends Error {
2
+ public readonly method: string;
3
+ public readonly path: string | undefined;
4
+ public readonly expected: string;
5
+ public readonly value: any;
6
+
7
+ public constructor(props: TypeGuardError.IProps) {
8
+ // MESSAGE CONSTRUCTION
9
+ super(
10
+ props.message ||
11
+ `Error on ${props.method}(): invalid type${
12
+ props.path ? ` on ${props.path}` : ""
13
+ }, expect to be ${props.expected}`,
14
+ );
15
+
16
+ // INHERITANCE POLYFILL
17
+ const proto = new.target.prototype;
18
+ if (Object.setPrototypeOf) Object.setPrototypeOf(this, proto);
19
+ else (this as any).__proto__ = proto;
20
+
21
+ // ASSIGN MEMBERS
22
+ this.method = props.method;
23
+ this.path = props.path;
24
+ this.expected = props.expected;
25
+ this.value = props.value;
26
+ }
27
+ }
28
+ export namespace TypeGuardError {
29
+ export interface IProps {
30
+ method: string;
31
+ path?: string;
32
+ expected: string;
33
+ value: any;
34
+ message?: string;
35
+ }
36
+ }
@@ -1,85 +1,85 @@
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>(
46
- choices: Choice[],
47
- ): Promise<Choice> => {
48
- questioned.value = true;
49
- return (
50
- await prompt()({
51
- type: "list",
52
- name: name,
53
- message: message,
54
- choices: choices,
55
- })
56
- )[name];
57
- };
58
- const configure = async () => {
59
- const files: string[] = await (
60
- await fs.promises.readdir(process.cwd())
61
- ).filter(
62
- (str) =>
63
- str.substring(0, 8) === "tsconfig" &&
64
- str.substring(str.length - 5) === ".json",
65
- );
66
- if (files.length === 0)
67
- throw new URIError(`Unable to find "tsconfig.json" file.`);
68
- else if (files.length === 1) return files[0];
69
- return select("tsconfig")("TS Config File")(files);
70
- };
71
-
72
- return action(async (options) => {
73
- options.input ??= await input("input")("input directory");
74
- options.output ??= await input("output")("output directory");
75
- options.project ??= await configure();
76
- return options as IArguments;
77
- });
78
- };
79
-
80
- export interface IArguments {
81
- input: string;
82
- output: string;
83
- project: string;
84
- }
85
- }
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>(
46
+ choices: Choice[],
47
+ ): Promise<Choice> => {
48
+ questioned.value = true;
49
+ return (
50
+ await prompt()({
51
+ type: "list",
52
+ name: name,
53
+ message: message,
54
+ choices: choices,
55
+ })
56
+ )[name];
57
+ };
58
+ const configure = async () => {
59
+ const files: string[] = await (
60
+ await fs.promises.readdir(process.cwd())
61
+ ).filter(
62
+ (str) =>
63
+ str.substring(0, 8) === "tsconfig" &&
64
+ str.substring(str.length - 5) === ".json",
65
+ );
66
+ if (files.length === 0)
67
+ throw new URIError(`Unable to find "tsconfig.json" file.`);
68
+ else if (files.length === 1) return files[0];
69
+ return select("tsconfig")("TS Config File")(files);
70
+ };
71
+
72
+ return action(async (options) => {
73
+ options.input ??= await input("input")("input directory");
74
+ options.output ??= await input("output")("output directory");
75
+ options.project ??= await configure();
76
+ return options as IArguments;
77
+ });
78
+ };
79
+
80
+ export interface IArguments {
81
+ input: string;
82
+ output: string;
83
+ project: string;
84
+ }
85
+ }
@@ -1,153 +1,153 @@
1
- import fs from "fs";
2
-
3
- import { ArgumentParser } from "./setup/ArgumentParser";
4
- import { CommandExecutor } from "./setup/CommandExecutor";
5
- import { PackageManager } from "./setup/PackageManager";
6
- import { PluginConfigurator } from "./setup/PluginConfigurator";
7
-
8
- export namespace TypiaSetupWizard {
9
- export interface IArguments {
10
- manager: "npm" | "pnpm" | "yarn";
11
- project: string | null;
12
- }
13
-
14
- export async function setup(): Promise<void> {
15
- console.log("----------------------------------------");
16
- console.log(" Typia Setup Wizard");
17
- console.log("----------------------------------------");
18
-
19
- // PREPARE ASSETS
20
- const pack: PackageManager = await PackageManager.mount();
21
- const args: IArguments = await ArgumentParser.parse(pack)(inquiry);
22
-
23
- // INSTALL TYPESCRIPT COMPILERS
24
- pack.install({ dev: true, modulo: "ts-patch", version: "latest" });
25
- pack.install({ dev: true, modulo: "ts-node", version: "latest" });
26
- pack.install({
27
- dev: true,
28
- modulo: "typescript",
29
- version: (() => {
30
- const version: string = (() => {
31
- try {
32
- return require("ts-patch/package.json")?.version ?? "";
33
- } catch {
34
- return "";
35
- }
36
- })();
37
- return Number(version.split(".")[0] ?? "") >= 3
38
- ? "latest"
39
- : "4.9.5";
40
- })(),
41
- });
42
- args.project ??= (() => {
43
- const runner: string =
44
- pack.manager === "npm" ? "npx" : pack.manager;
45
- CommandExecutor.run(`${runner} tsc --init`);
46
- return (args.project = "tsconfig.json");
47
- })();
48
-
49
- // SETUP TRANSFORMER
50
- await pack.save((data) => {
51
- // COMPOSE POSTINSTALL COMMAND
52
- data.scripts ??= {};
53
- if (
54
- typeof data.scripts.postinstall === "string" &&
55
- data.scripts.postinstall.trim().length
56
- ) {
57
- if (data.scripts.postinstall.indexOf("ts-patch install") === -1)
58
- data.scripts.postinstall =
59
- "ts-patch install && " + data.scripts.postinstall;
60
- } else data.scripts.postinstall = "ts-patch install";
61
-
62
- // FOR OLDER VERSIONS
63
- if (typeof data.scripts.prepare === "string") {
64
- data.scripts.prepare = data.scripts.prepare
65
- .split("&&")
66
- .map((str) => str.trim())
67
- .filter((str) => str.indexOf("ts-patch install") === -1)
68
- .join(" && ");
69
- if (data.scripts.prepare.length === 0)
70
- delete data.scripts.prepare;
71
- }
72
- });
73
- CommandExecutor.run(`${pack.manager} run postinstall`);
74
-
75
- // CONFIGURE TYPIA
76
- await PluginConfigurator.configure(args);
77
- }
78
-
79
- const inquiry: ArgumentParser.Inquiry<IArguments> = async (
80
- pack,
81
- command,
82
- prompt,
83
- action,
84
- ) => {
85
- // PREPARE ASSETS
86
- command.option("--manager [manager", "package manager");
87
- command.option("--project [project]", "tsconfig.json file location");
88
-
89
- // INTERNAL PROCEDURES
90
- const questioned = { value: false };
91
- const select =
92
- (name: string) =>
93
- (message: string) =>
94
- async <Choice extends string>(
95
- choices: Choice[],
96
- filter?: (choice: string) => Choice,
97
- ): Promise<Choice> => {
98
- questioned.value = true;
99
- return (
100
- await prompt()({
101
- type: "list",
102
- name: name,
103
- message: message,
104
- choices: choices,
105
- filter,
106
- })
107
- )[name];
108
- };
109
- const configure = async () => {
110
- const fileList: string[] = await (
111
- await fs.promises.readdir(process.cwd())
112
- )
113
- .filter(
114
- (str) =>
115
- str.substring(0, 8) === "tsconfig" &&
116
- str.substring(str.length - 5) === ".json",
117
- )
118
- .sort((x, y) =>
119
- x === "tsconfig.json"
120
- ? -1
121
- : y === "tsconfig.json"
122
- ? 1
123
- : x < y
124
- ? -1
125
- : 1,
126
- );
127
- if (fileList.length === 0) {
128
- if (process.cwd() !== pack.directory)
129
- throw new URIError(`Unable to find "tsconfig.json" file.`);
130
- return null;
131
- } else if (fileList.length === 1) return fileList[0];
132
- return select("tsconfig")("TS Config File")(fileList);
133
- };
134
-
135
- // DO CONSTRUCT
136
- return action(async (options) => {
137
- pack.manager = options.manager ??= await select("manager")(
138
- "Package Manager",
139
- )(
140
- [
141
- "npm" as const,
142
- "pnpm" as const,
143
- "yarn (berry is not supported)" as "yarn",
144
- ],
145
- (value) => value.split(" ")[0] as "yarn",
146
- );
147
- options.project ??= await configure();
148
-
149
- if (questioned.value) console.log("");
150
- return options as IArguments;
151
- });
152
- };
153
- }
1
+ import fs from "fs";
2
+
3
+ import { ArgumentParser } from "./setup/ArgumentParser";
4
+ import { CommandExecutor } from "./setup/CommandExecutor";
5
+ import { PackageManager } from "./setup/PackageManager";
6
+ import { PluginConfigurator } from "./setup/PluginConfigurator";
7
+
8
+ export namespace TypiaSetupWizard {
9
+ export interface IArguments {
10
+ manager: "npm" | "pnpm" | "yarn";
11
+ project: string | null;
12
+ }
13
+
14
+ export async function setup(): Promise<void> {
15
+ console.log("----------------------------------------");
16
+ console.log(" Typia Setup Wizard");
17
+ console.log("----------------------------------------");
18
+
19
+ // PREPARE ASSETS
20
+ const pack: PackageManager = await PackageManager.mount();
21
+ const args: IArguments = await ArgumentParser.parse(pack)(inquiry);
22
+
23
+ // INSTALL TYPESCRIPT COMPILERS
24
+ pack.install({ dev: true, modulo: "ts-patch", version: "latest" });
25
+ pack.install({ dev: true, modulo: "ts-node", version: "latest" });
26
+ pack.install({
27
+ dev: true,
28
+ modulo: "typescript",
29
+ version: (() => {
30
+ const version: string = (() => {
31
+ try {
32
+ return require("ts-patch/package.json")?.version ?? "";
33
+ } catch {
34
+ return "";
35
+ }
36
+ })();
37
+ return Number(version.split(".")[0] ?? "") >= 3
38
+ ? "latest"
39
+ : "4.9.5";
40
+ })(),
41
+ });
42
+ args.project ??= (() => {
43
+ const runner: string =
44
+ pack.manager === "npm" ? "npx" : pack.manager;
45
+ CommandExecutor.run(`${runner} tsc --init`);
46
+ return (args.project = "tsconfig.json");
47
+ })();
48
+
49
+ // SETUP TRANSFORMER
50
+ await pack.save((data) => {
51
+ // COMPOSE POSTINSTALL COMMAND
52
+ data.scripts ??= {};
53
+ if (
54
+ typeof data.scripts.postinstall === "string" &&
55
+ data.scripts.postinstall.trim().length
56
+ ) {
57
+ if (data.scripts.postinstall.indexOf("ts-patch install") === -1)
58
+ data.scripts.postinstall =
59
+ "ts-patch install && " + data.scripts.postinstall;
60
+ } else data.scripts.postinstall = "ts-patch install";
61
+
62
+ // FOR OLDER VERSIONS
63
+ if (typeof data.scripts.prepare === "string") {
64
+ data.scripts.prepare = data.scripts.prepare
65
+ .split("&&")
66
+ .map((str) => str.trim())
67
+ .filter((str) => str.indexOf("ts-patch install") === -1)
68
+ .join(" && ");
69
+ if (data.scripts.prepare.length === 0)
70
+ delete data.scripts.prepare;
71
+ }
72
+ });
73
+ CommandExecutor.run(`${pack.manager} run postinstall`);
74
+
75
+ // CONFIGURE TYPIA
76
+ await PluginConfigurator.configure(args);
77
+ }
78
+
79
+ const inquiry: ArgumentParser.Inquiry<IArguments> = async (
80
+ pack,
81
+ command,
82
+ prompt,
83
+ action,
84
+ ) => {
85
+ // PREPARE ASSETS
86
+ command.option("--manager [manager", "package manager");
87
+ command.option("--project [project]", "tsconfig.json file location");
88
+
89
+ // INTERNAL PROCEDURES
90
+ const questioned = { value: false };
91
+ const select =
92
+ (name: string) =>
93
+ (message: string) =>
94
+ async <Choice extends string>(
95
+ choices: Choice[],
96
+ filter?: (choice: string) => Choice,
97
+ ): Promise<Choice> => {
98
+ questioned.value = true;
99
+ return (
100
+ await prompt()({
101
+ type: "list",
102
+ name: name,
103
+ message: message,
104
+ choices: choices,
105
+ filter,
106
+ })
107
+ )[name];
108
+ };
109
+ const configure = async () => {
110
+ const fileList: string[] = await (
111
+ await fs.promises.readdir(process.cwd())
112
+ )
113
+ .filter(
114
+ (str) =>
115
+ str.substring(0, 8) === "tsconfig" &&
116
+ str.substring(str.length - 5) === ".json",
117
+ )
118
+ .sort((x, y) =>
119
+ x === "tsconfig.json"
120
+ ? -1
121
+ : y === "tsconfig.json"
122
+ ? 1
123
+ : x < y
124
+ ? -1
125
+ : 1,
126
+ );
127
+ if (fileList.length === 0) {
128
+ if (process.cwd() !== pack.directory)
129
+ throw new URIError(`Unable to find "tsconfig.json" file.`);
130
+ return null;
131
+ } else if (fileList.length === 1) return fileList[0];
132
+ return select("tsconfig")("TS Config File")(fileList);
133
+ };
134
+
135
+ // DO CONSTRUCT
136
+ return action(async (options) => {
137
+ pack.manager = options.manager ??= await select("manager")(
138
+ "Package Manager",
139
+ )(
140
+ [
141
+ "npm" as const,
142
+ "pnpm" as const,
143
+ "yarn (berry is not supported)" as "yarn",
144
+ ],
145
+ (value) => value.split(" ")[0] as "yarn",
146
+ );
147
+ options.project ??= await configure();
148
+
149
+ if (questioned.value) console.log("");
150
+ return options as IArguments;
151
+ });
152
+ };
153
+ }
@@ -1,45 +1,45 @@
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 =
15
- (pack: PackageManager) =>
16
- async <T>(
17
- inquiry: (
18
- pack: PackageManager,
19
- command: commander.Command,
20
- prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule,
21
- action: (
22
- closure: (options: Partial<T>) => Promise<T>,
23
- ) => Promise<T>,
24
- ) => Promise<T>,
25
- ): Promise<T> => {
26
- // TAKE OPTIONS
27
- const action = (closure: (options: Partial<T>) => Promise<T>) =>
28
- new Promise<T>((resolve, reject) => {
29
- commander.program.action(async (options) => {
30
- try {
31
- resolve(await closure(options));
32
- } catch (exp) {
33
- reject(exp);
34
- }
35
- });
36
- commander.program.parseAsync().catch(reject);
37
- });
38
- return inquiry(
39
- pack,
40
- commander.program,
41
- inquirer.createPromptModule,
42
- action,
43
- );
44
- };
45
- }
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 =
15
+ (pack: PackageManager) =>
16
+ async <T>(
17
+ inquiry: (
18
+ pack: PackageManager,
19
+ command: commander.Command,
20
+ prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule,
21
+ action: (
22
+ closure: (options: Partial<T>) => Promise<T>,
23
+ ) => Promise<T>,
24
+ ) => Promise<T>,
25
+ ): Promise<T> => {
26
+ // TAKE OPTIONS
27
+ const action = (closure: (options: Partial<T>) => Promise<T>) =>
28
+ new Promise<T>((resolve, reject) => {
29
+ commander.program.action(async (options) => {
30
+ try {
31
+ resolve(await closure(options));
32
+ } catch (exp) {
33
+ reject(exp);
34
+ }
35
+ });
36
+ commander.program.parseAsync().catch(reject);
37
+ });
38
+ return inquiry(
39
+ pack,
40
+ commander.program,
41
+ inquirer.createPromptModule,
42
+ action,
43
+ );
44
+ };
45
+ }
@@ -1,8 +1,8 @@
1
- import cp from "child_process";
2
-
3
- export namespace CommandExecutor {
4
- export const run = (str: string): void => {
5
- console.log(str);
6
- cp.execSync(str, { stdio: "ignore" });
7
- };
8
- }
1
+ import cp from "child_process";
2
+
3
+ export namespace CommandExecutor {
4
+ export const run = (str: string): void => {
5
+ console.log(str);
6
+ cp.execSync(str, { stdio: "ignore" });
7
+ };
8
+ }