typia 3.5.8 → 3.6.0-dev.20230225

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 (279) hide show
  1. package/README.md +2 -0
  2. package/lib/Primitive.d.ts +2 -1
  3. package/lib/executable/TypiaGenerateWizard.d.ts +8 -0
  4. package/lib/executable/TypiaGenerateWizard.js +182 -0
  5. package/lib/executable/TypiaGenerateWizard.js.map +1 -0
  6. package/lib/executable/typia.js +11 -4
  7. package/lib/executable/typia.js.map +1 -1
  8. package/lib/factories/IdentifierFactory.d.ts +1 -1
  9. package/lib/factories/IdentifierFactory.js +3 -3
  10. package/lib/factories/IdentifierFactory.js.map +1 -1
  11. package/lib/factories/TypeFactory.d.ts +1 -0
  12. package/lib/factories/TypeFactory.js +17 -1
  13. package/lib/factories/TypeFactory.js.map +1 -1
  14. package/lib/factories/TypiaFileFactory.d.ts +8 -0
  15. package/lib/factories/TypiaFileFactory.js +236 -0
  16. package/lib/factories/TypiaFileFactory.js.map +1 -0
  17. package/lib/programmers/AssertCloneProgrammer.js +4 -1
  18. package/lib/programmers/AssertCloneProgrammer.js.map +1 -1
  19. package/lib/programmers/AssertParseProgrammer.js +4 -1
  20. package/lib/programmers/AssertParseProgrammer.js.map +1 -1
  21. package/lib/programmers/AssertProgrammer.js +4 -1
  22. package/lib/programmers/AssertProgrammer.js.map +1 -1
  23. package/lib/programmers/AssertPruneProgrammer.js +4 -1
  24. package/lib/programmers/AssertPruneProgrammer.js.map +1 -1
  25. package/lib/programmers/AssertStringifyProgrammer.js +4 -1
  26. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -1
  27. package/lib/programmers/CheckerProgrammer.d.ts +1 -1
  28. package/lib/programmers/CheckerProgrammer.js +8 -0
  29. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  30. package/lib/programmers/CloneProgrammer.d.ts +1 -1
  31. package/lib/programmers/CloneProgrammer.js +17 -2
  32. package/lib/programmers/CloneProgrammer.js.map +1 -1
  33. package/lib/programmers/FeatureProgrammer.d.ts +10 -1
  34. package/lib/programmers/FeatureProgrammer.js +24 -16
  35. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  36. package/lib/programmers/IsCloneProgrammer.js +7 -1
  37. package/lib/programmers/IsCloneProgrammer.js.map +1 -1
  38. package/lib/programmers/IsParseProgrammer.js +5 -2
  39. package/lib/programmers/IsParseProgrammer.js.map +1 -1
  40. package/lib/programmers/IsProgrammer.d.ts +1 -1
  41. package/lib/programmers/IsPruneProgrammer.js +4 -1
  42. package/lib/programmers/IsPruneProgrammer.js.map +1 -1
  43. package/lib/programmers/IsStringifyProgrammer.js +7 -1
  44. package/lib/programmers/IsStringifyProgrammer.js.map +1 -1
  45. package/lib/programmers/PruneProgrammer.d.ts +1 -1
  46. package/lib/programmers/PruneProgrammer.js +7 -0
  47. package/lib/programmers/PruneProgrammer.js.map +1 -1
  48. package/lib/programmers/RandomProgrammer.js +9 -8
  49. package/lib/programmers/RandomProgrammer.js.map +1 -1
  50. package/lib/programmers/StringifyProgrammer.d.ts +1 -1
  51. package/lib/programmers/StringifyProgrammer.js +7 -0
  52. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  53. package/lib/programmers/ValidateCloneProgrammer.js +5 -2
  54. package/lib/programmers/ValidateCloneProgrammer.js.map +1 -1
  55. package/lib/programmers/ValidateParseProgrammer.js +4 -1
  56. package/lib/programmers/ValidateParseProgrammer.js.map +1 -1
  57. package/lib/programmers/ValidateProgrammer.js +7 -4
  58. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  59. package/lib/programmers/ValidatePruneProgrammer.js +4 -1
  60. package/lib/programmers/ValidatePruneProgrammer.js.map +1 -1
  61. package/lib/programmers/ValidateStringifyProgrammer.js +5 -2
  62. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -1
  63. package/lib/programmers/helpers/CloneJoiner.js +5 -4
  64. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  65. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  66. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  67. package/lib/programmers/helpers/RandomJoiner.js +3 -2
  68. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  69. package/lib/programmers/internal/check_everything.js +4 -1
  70. package/lib/programmers/internal/check_everything.js.map +1 -1
  71. package/lib/programmers/internal/check_union_array_like.js +10 -3
  72. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  73. package/lib/programmers/internal/stringify_dynamic_properties.js +1 -1
  74. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  75. package/lib/transformers/CallExpressionTransformer.js +4 -1
  76. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  77. package/lib/transformers/ImportTransformer.d.ts +4 -0
  78. package/lib/transformers/ImportTransformer.js +51 -0
  79. package/lib/transformers/ImportTransformer.js.map +1 -0
  80. package/package.json +1 -1
  81. package/src/IRandomGenerator.ts +16 -16
  82. package/src/IValidation.ts +21 -21
  83. package/src/Primitive.ts +104 -82
  84. package/src/TypeGuardError.ts +36 -36
  85. package/src/executable/TypiaGenerateWizard.ts +87 -0
  86. package/src/executable/TypiaSetupWizard.ts +142 -142
  87. package/src/executable/setup/ArgumentParser.ts +91 -91
  88. package/src/executable/setup/CommandExecutor.ts +8 -8
  89. package/src/executable/setup/FileRetriever.ts +33 -33
  90. package/src/executable/setup/PackageManager.ts +92 -92
  91. package/src/executable/setup/PluginConfigurator.ts +99 -99
  92. package/src/executable/typia.ts +38 -29
  93. package/src/factories/CommentFactory.ts +10 -10
  94. package/src/factories/ExpressionFactory.ts +77 -77
  95. package/src/factories/IdentifierFactory.ts +73 -72
  96. package/src/factories/LiteralFactory.ts +44 -44
  97. package/src/factories/MetadataCollection.ts +122 -122
  98. package/src/factories/MetadataFactory.ts +51 -51
  99. package/src/factories/MetadataTagFactory.ts +265 -265
  100. package/src/factories/StatementFactory.ts +60 -60
  101. package/src/factories/TemplateFactory.ts +56 -56
  102. package/src/factories/TypeFactory.ts +129 -101
  103. package/src/factories/TypiaFileFactory.ts +117 -0
  104. package/src/factories/ValueFactory.ts +12 -12
  105. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  106. package/src/factories/internal/metadata/emplace_metadata_object.ts +140 -140
  107. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  108. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  109. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  110. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  111. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  112. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  113. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  114. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  115. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  116. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  117. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  118. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  119. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  120. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  121. package/src/functional/$any.ts +3 -3
  122. package/src/functional/$every.ts +11 -11
  123. package/src/functional/$guard.ts +35 -35
  124. package/src/functional/$is_between.ts +7 -7
  125. package/src/functional/$is_email.ts +5 -5
  126. package/src/functional/$is_ipv4.ts +5 -5
  127. package/src/functional/$is_ipv6.ts +5 -5
  128. package/src/functional/$is_url.ts +5 -5
  129. package/src/functional/$is_uuid.ts +5 -5
  130. package/src/functional/$join.ts +50 -50
  131. package/src/functional/$number.ts +12 -12
  132. package/src/functional/$report.ts +15 -15
  133. package/src/functional/$rest.ts +3 -3
  134. package/src/functional/$string.ts +37 -37
  135. package/src/functional/$tail.ts +6 -6
  136. package/src/functional/Namespace.ts +121 -121
  137. package/src/index.ts +4 -4
  138. package/src/metadata/IJsDocTagInfo.ts +10 -10
  139. package/src/metadata/IMetadata.ts +25 -25
  140. package/src/metadata/IMetadataApplication.ts +7 -7
  141. package/src/metadata/IMetadataConstant.ts +16 -16
  142. package/src/metadata/IMetadataEntry.ts +6 -6
  143. package/src/metadata/IMetadataObject.ts +29 -29
  144. package/src/metadata/IMetadataProperty.ts +11 -11
  145. package/src/metadata/IMetadataTag.ts +113 -113
  146. package/src/metadata/Metadata.ts +534 -534
  147. package/src/metadata/MetadataConstant.ts +3 -3
  148. package/src/metadata/MetadataObject.ts +131 -131
  149. package/src/metadata/MetadataProperty.ts +64 -64
  150. package/src/module.ts +1946 -1946
  151. package/src/programmers/ApplicationProgrammer.ts +55 -55
  152. package/src/programmers/AssertCloneProgrammer.ts +71 -60
  153. package/src/programmers/AssertParseProgrammer.ts +66 -55
  154. package/src/programmers/AssertProgrammer.ts +232 -435
  155. package/src/programmers/AssertPruneProgrammer.ts +67 -59
  156. package/src/programmers/AssertStringifyProgrammer.ts +71 -65
  157. package/src/programmers/CheckerProgrammer.ts +892 -879
  158. package/src/programmers/CloneProgrammer.ts +387 -361
  159. package/src/programmers/FeatureProgrammer.ts +505 -462
  160. package/src/programmers/IsCloneProgrammer.ts +80 -66
  161. package/src/programmers/IsParseProgrammer.ts +75 -61
  162. package/src/programmers/IsProgrammer.ts +200 -200
  163. package/src/programmers/IsPruneProgrammer.ts +75 -63
  164. package/src/programmers/IsStringifyProgrammer.ts +80 -69
  165. package/src/programmers/PruneProgrammer.ts +341 -333
  166. package/src/programmers/RandomProgrammer.ts +392 -373
  167. package/src/programmers/StringifyProgrammer.ts +795 -787
  168. package/src/programmers/ValidateCloneProgrammer.ts +91 -77
  169. package/src/programmers/ValidateParseProgrammer.ts +70 -59
  170. package/src/programmers/ValidateProgrammer.ts +267 -238
  171. package/src/programmers/ValidatePruneProgrammer.ts +84 -73
  172. package/src/programmers/ValidateStringifyProgrammer.ts +88 -77
  173. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  174. package/src/programmers/helpers/CloneJoiner.ts +134 -124
  175. package/src/programmers/helpers/FunctionImporeter.ts +55 -46
  176. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  177. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  178. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  179. package/src/programmers/helpers/RandomJoiner.ts +149 -142
  180. package/src/programmers/helpers/RandomRanger.ts +216 -216
  181. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  182. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  183. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  184. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  185. package/src/programmers/internal/application_array.ts +37 -37
  186. package/src/programmers/internal/application_boolean.ts +17 -17
  187. package/src/programmers/internal/application_constant.ts +29 -29
  188. package/src/programmers/internal/application_default.ts +17 -17
  189. package/src/programmers/internal/application_default_string.ts +32 -32
  190. package/src/programmers/internal/application_native.ts +29 -29
  191. package/src/programmers/internal/application_number.ts +70 -70
  192. package/src/programmers/internal/application_object.ts +153 -153
  193. package/src/programmers/internal/application_schema.ts +184 -184
  194. package/src/programmers/internal/application_string.ts +41 -41
  195. package/src/programmers/internal/application_templates.ts +27 -27
  196. package/src/programmers/internal/application_tuple.ts +29 -29
  197. package/src/programmers/internal/check_array.ts +22 -22
  198. package/src/programmers/internal/check_array_length.ts +44 -44
  199. package/src/programmers/internal/check_bigint.ts +64 -64
  200. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  201. package/src/programmers/internal/check_everything.ts +28 -25
  202. package/src/programmers/internal/check_native.ts +21 -21
  203. package/src/programmers/internal/check_number.ts +145 -145
  204. package/src/programmers/internal/check_object.ts +48 -48
  205. package/src/programmers/internal/check_string.ts +24 -24
  206. package/src/programmers/internal/check_string_tags.ts +63 -63
  207. package/src/programmers/internal/check_template.ts +50 -50
  208. package/src/programmers/internal/check_union_array_like.ts +260 -244
  209. package/src/programmers/internal/check_union_tuple.ts +33 -33
  210. package/src/programmers/internal/decode_union_object.ts +73 -73
  211. package/src/programmers/internal/feature_object_entries.ts +59 -59
  212. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  213. package/src/programmers/internal/prune_object_properties.ts +60 -60
  214. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -164
  215. package/src/programmers/internal/stringify_native.ts +8 -8
  216. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  217. package/src/programmers/internal/template_to_pattern.ts +15 -15
  218. package/src/schemas/IJsonApplication.ts +9 -9
  219. package/src/schemas/IJsonComponents.ts +26 -26
  220. package/src/schemas/IJsonSchema.ts +127 -127
  221. package/src/transform.ts +21 -21
  222. package/src/transformers/CallExpressionTransformer.ts +172 -165
  223. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  224. package/src/transformers/FileTransformer.ts +49 -49
  225. package/src/transformers/IProject.ts +11 -11
  226. package/src/transformers/ITransformOptions.ts +62 -62
  227. package/src/transformers/ImportTransformer.ts +60 -0
  228. package/src/transformers/NodeTransformer.ts +19 -19
  229. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  230. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +38 -38
  231. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +38 -38
  232. package/src/transformers/features/miscellaneous/CloneTransformer.ts +46 -46
  233. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +32 -32
  234. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +32 -32
  235. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +31 -31
  236. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +32 -32
  237. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +32 -32
  238. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +31 -31
  239. package/src/transformers/features/miscellaneous/CreateRandomGenerator.ts +39 -39
  240. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +32 -32
  241. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +32 -32
  242. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +38 -38
  243. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +38 -38
  244. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  245. package/src/transformers/features/miscellaneous/PruneTransformer.ts +46 -46
  246. package/src/transformers/features/miscellaneous/RandomTransformer.ts +45 -45
  247. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +38 -38
  248. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +38 -38
  249. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  250. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  251. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  252. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  253. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  254. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  255. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  256. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  257. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  258. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  259. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  260. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  261. package/src/transformers/features/stringifiers/StringifyTransformer.ts +46 -46
  262. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  263. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  264. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  265. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  266. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  267. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  268. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  269. package/src/typings/Atomic.ts +17 -17
  270. package/src/typings/ClassProperties.ts +5 -5
  271. package/src/typings/OmitNever.ts +3 -3
  272. package/src/typings/SpecialFields.ts +3 -3
  273. package/src/typings/Writable.ts +11 -11
  274. package/src/utils/ArrayUtil.ts +49 -49
  275. package/src/utils/Escaper.ts +50 -50
  276. package/src/utils/MapUtil.ts +14 -14
  277. package/src/utils/PatternUtil.ts +30 -30
  278. package/src/utils/RandomGenerator.ts +90 -90
  279. package/src/utils/Singleton.ts +17 -17
@@ -1,91 +1,91 @@
1
- import type CommanderModule from "commander";
2
- import type * as InquirerModule from "inquirer";
3
- import path from "path";
4
-
5
- import { FileRetriever } from "./FileRetriever";
6
- import { PackageManager } from "./PackageManager";
7
-
8
- export namespace ArgumentParser {
9
- export type Inquiry<T> = (
10
- pack: PackageManager,
11
- command: CommanderModule.Command,
12
- prompt: (
13
- opt?: InquirerModule.StreamOptions,
14
- ) => InquirerModule.PromptModule,
15
- action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
16
- ) => Promise<T>;
17
-
18
- export const parse =
19
- (pack: PackageManager) =>
20
- (erase: boolean) =>
21
- async <T>(
22
- inquiry: (
23
- pack: PackageManager,
24
- command: CommanderModule.Command,
25
- prompt: (
26
- opt?: InquirerModule.StreamOptions,
27
- ) => InquirerModule.PromptModule,
28
- action: (
29
- closure: (options: Partial<T>) => Promise<T>,
30
- ) => Promise<T>,
31
- ) => Promise<T>,
32
- ): Promise<T> => {
33
- // INSTALL TEMPORARY PACKAGES
34
- const newbie = {
35
- commander: pack.install({
36
- dev: true,
37
- modulo: "commander",
38
- version: "10.0.0",
39
- silent: true,
40
- }),
41
- inquirer: pack.install({
42
- dev: true,
43
- modulo: "inquirer",
44
- version: "8.2.5",
45
- silent: true,
46
- }),
47
- };
48
-
49
- // LOAD INSTALLED MODULES
50
- const { program: command }: typeof CommanderModule =
51
- await FileRetriever.require(
52
- path.join("node_modules", "commander"),
53
- )(pack.directory);
54
- const { createPromptModule: prompt }: typeof InquirerModule =
55
- await FileRetriever.require(
56
- path.join("node_modules", "inquirer"),
57
- )(pack.directory);
58
-
59
- // TAKE OPTIONS
60
- const action = (closure: (options: Partial<T>) => Promise<T>) =>
61
- new Promise<T>((resolve, reject) => {
62
- command.action(async (options) => {
63
- try {
64
- resolve(await closure(options));
65
- } catch (exp) {
66
- reject(exp);
67
- }
68
- });
69
- command.parseAsync().catch(reject);
70
- });
71
- const output: T | Error = await (async () => {
72
- try {
73
- return await inquiry(pack, command, prompt, action);
74
- } catch (error) {
75
- return error as Error;
76
- }
77
- })();
78
-
79
- // REMOVE TEMPORARY PACKAGES
80
- if (erase === true) {
81
- if (newbie.commander)
82
- pack.erase({ modulo: "commander", silent: true });
83
- if (newbie.inquirer)
84
- pack.erase({ modulo: "inquirer", silent: true });
85
- }
86
-
87
- // RETURNS
88
- if (output instanceof Error) throw output;
89
- return output;
90
- };
91
- }
1
+ import type CommanderModule from "commander";
2
+ import type * as InquirerModule from "inquirer";
3
+ import path from "path";
4
+
5
+ import { FileRetriever } from "./FileRetriever";
6
+ import { PackageManager } from "./PackageManager";
7
+
8
+ export namespace ArgumentParser {
9
+ export type Inquiry<T> = (
10
+ pack: PackageManager,
11
+ command: CommanderModule.Command,
12
+ prompt: (
13
+ opt?: InquirerModule.StreamOptions,
14
+ ) => InquirerModule.PromptModule,
15
+ action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
16
+ ) => Promise<T>;
17
+
18
+ export const parse =
19
+ (pack: PackageManager) =>
20
+ (erase: boolean) =>
21
+ async <T>(
22
+ inquiry: (
23
+ pack: PackageManager,
24
+ command: CommanderModule.Command,
25
+ prompt: (
26
+ opt?: InquirerModule.StreamOptions,
27
+ ) => InquirerModule.PromptModule,
28
+ action: (
29
+ closure: (options: Partial<T>) => Promise<T>,
30
+ ) => Promise<T>,
31
+ ) => Promise<T>,
32
+ ): Promise<T> => {
33
+ // INSTALL TEMPORARY PACKAGES
34
+ const newbie = {
35
+ commander: pack.install({
36
+ dev: true,
37
+ modulo: "commander",
38
+ version: "10.0.0",
39
+ silent: true,
40
+ }),
41
+ inquirer: pack.install({
42
+ dev: true,
43
+ modulo: "inquirer",
44
+ version: "8.2.5",
45
+ silent: true,
46
+ }),
47
+ };
48
+
49
+ // LOAD INSTALLED MODULES
50
+ const { program: command }: typeof CommanderModule =
51
+ await FileRetriever.require(
52
+ path.join("node_modules", "commander"),
53
+ )(pack.directory);
54
+ const { createPromptModule: prompt }: typeof InquirerModule =
55
+ await FileRetriever.require(
56
+ path.join("node_modules", "inquirer"),
57
+ )(pack.directory);
58
+
59
+ // TAKE OPTIONS
60
+ const action = (closure: (options: Partial<T>) => Promise<T>) =>
61
+ new Promise<T>((resolve, reject) => {
62
+ command.action(async (options) => {
63
+ try {
64
+ resolve(await closure(options));
65
+ } catch (exp) {
66
+ reject(exp);
67
+ }
68
+ });
69
+ command.parseAsync().catch(reject);
70
+ });
71
+ const output: T | Error = await (async () => {
72
+ try {
73
+ return await inquiry(pack, command, prompt, action);
74
+ } catch (error) {
75
+ return error as Error;
76
+ }
77
+ })();
78
+
79
+ // REMOVE TEMPORARY PACKAGES
80
+ if (erase === true) {
81
+ if (newbie.commander)
82
+ pack.erase({ modulo: "commander", silent: true });
83
+ if (newbie.inquirer)
84
+ pack.erase({ modulo: "inquirer", silent: true });
85
+ }
86
+
87
+ // RETURNS
88
+ if (output instanceof Error) throw output;
89
+ return output;
90
+ };
91
+ }
@@ -1,8 +1,8 @@
1
- import cp from "child_process";
2
-
3
- export namespace CommandExecutor {
4
- export function run(str: string, silent: boolean): void {
5
- if (silent === false) console.log(str);
6
- cp.execSync(str, { stdio: "ignore" });
7
- }
8
- }
1
+ import cp from "child_process";
2
+
3
+ export namespace CommandExecutor {
4
+ export function run(str: string, silent: boolean): void {
5
+ if (silent === false) console.log(str);
6
+ cp.execSync(str, { stdio: "ignore" });
7
+ }
8
+ }
@@ -1,33 +1,33 @@
1
- import fs from "fs";
2
- import path from "path";
3
-
4
- export namespace FileRetriever {
5
- export const directory =
6
- (name: string) =>
7
- (dir: string, depth: number = 0): string | null => {
8
- const location: string = path.join(dir, name);
9
- if (fs.existsSync(location)) return dir;
10
- else if (depth > 2) return null;
11
- return directory(name)(path.join(dir, ".."), depth + 1);
12
- };
13
-
14
- export const file =
15
- (name: string) =>
16
- (directory: string, depth: number = 0): string | null => {
17
- const location: string = path.join(directory, name);
18
- if (fs.existsSync(location)) return location;
19
- else if (depth > 2) return null;
20
- return file(name)(path.join(directory, ".."), depth + 1);
21
- };
22
-
23
- export const require =
24
- (name: string) =>
25
- async (directory: string, depth: number = 0) => {
26
- const location: string | null = file(name)(directory, depth);
27
- if (location === null)
28
- throw new Error(
29
- `Unable to find installed module. Please report to the nestia - https://github.com/samchon/nestia/issues`,
30
- );
31
- return import(location);
32
- };
33
- }
1
+ import fs from "fs";
2
+ import path from "path";
3
+
4
+ export namespace FileRetriever {
5
+ export const directory =
6
+ (name: string) =>
7
+ (dir: string, depth: number = 0): string | null => {
8
+ const location: string = path.join(dir, name);
9
+ if (fs.existsSync(location)) return dir;
10
+ else if (depth > 2) return null;
11
+ return directory(name)(path.join(dir, ".."), depth + 1);
12
+ };
13
+
14
+ export const file =
15
+ (name: string) =>
16
+ (directory: string, depth: number = 0): string | null => {
17
+ const location: string = path.join(directory, name);
18
+ if (fs.existsSync(location)) return location;
19
+ else if (depth > 2) return null;
20
+ return file(name)(path.join(directory, ".."), depth + 1);
21
+ };
22
+
23
+ export const require =
24
+ (name: string) =>
25
+ async (directory: string, depth: number = 0) => {
26
+ const location: string | null = file(name)(directory, depth);
27
+ if (location === null)
28
+ throw new Error(
29
+ `Unable to find installed module. Please report to the nestia - https://github.com/samchon/nestia/issues`,
30
+ );
31
+ return import(location);
32
+ };
33
+ }
@@ -1,92 +1,92 @@
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: string = "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
- "package.json",
16
- )(process.cwd());
17
- if (location === null)
18
- throw new Error(`Unable to find "package.json" file`);
19
-
20
- return new PackageManager(
21
- location,
22
- await this.load(path.join(location, "package.json")),
23
- );
24
- }
25
-
26
- public async save(modifier: (data: Package.Data) => void): Promise<void> {
27
- const content: string = await fs.promises.readFile(this.file, "utf8");
28
- this.data = JSON.parse(content);
29
- modifier(this.data);
30
-
31
- return fs.promises.writeFile(
32
- this.file,
33
- JSON.stringify(this.data, null, 2),
34
- "utf8",
35
- );
36
- }
37
-
38
- public install(props: {
39
- dev: boolean;
40
- silent?: boolean;
41
- modulo: string;
42
- version?: string;
43
- }): boolean {
44
- const container = props.dev
45
- ? this.data.devDependencies
46
- : this.data.dependencies;
47
- if (
48
- !!container?.[props.modulo] &&
49
- FileRetriever.file(path.join("node_modules", props.modulo))(
50
- this.directory,
51
- ) !== null
52
- )
53
- return false;
54
-
55
- const middle: string =
56
- this.manager === "yarn"
57
- ? `add${props.dev ? " -D" : ""}`
58
- : `install ${props.dev ? "--save-dev" : "--save"}`;
59
- CommandExecutor.run(
60
- `${this.manager} ${middle} ${props.modulo}${
61
- props.version ? `@${props.version}` : ""
62
- }`,
63
- !!props.silent,
64
- );
65
- return true;
66
- }
67
-
68
- public erase(props: { modulo: string; silent?: boolean }): void {
69
- const middle: string = this.manager === "yarn" ? "remove" : "uninstall";
70
- CommandExecutor.run(
71
- `${this.manager} ${middle} ${props.modulo}`,
72
- !!props.silent,
73
- );
74
- }
75
-
76
- private constructor(
77
- public readonly directory: string,
78
- public data: Package.Data,
79
- ) {}
80
-
81
- private static async load(file: string): Promise<Package.Data> {
82
- const content: string = await fs.promises.readFile(file, "utf8");
83
- return JSON.parse(content);
84
- }
85
- }
86
- export namespace Package {
87
- export interface Data {
88
- scripts?: Record<string, string>;
89
- dependencies?: Record<string, string>;
90
- devDependencies?: Record<string, string>;
91
- }
92
- }
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: string = "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
+ "package.json",
16
+ )(process.cwd());
17
+ if (location === null)
18
+ throw new Error(`Unable to find "package.json" file`);
19
+
20
+ return new PackageManager(
21
+ location,
22
+ await this.load(path.join(location, "package.json")),
23
+ );
24
+ }
25
+
26
+ public async save(modifier: (data: Package.Data) => void): Promise<void> {
27
+ const content: string = await fs.promises.readFile(this.file, "utf8");
28
+ this.data = JSON.parse(content);
29
+ modifier(this.data);
30
+
31
+ return fs.promises.writeFile(
32
+ this.file,
33
+ JSON.stringify(this.data, null, 2),
34
+ "utf8",
35
+ );
36
+ }
37
+
38
+ public install(props: {
39
+ dev: boolean;
40
+ silent?: boolean;
41
+ modulo: string;
42
+ version?: string;
43
+ }): boolean {
44
+ const container = props.dev
45
+ ? this.data.devDependencies
46
+ : this.data.dependencies;
47
+ if (
48
+ !!container?.[props.modulo] &&
49
+ FileRetriever.file(path.join("node_modules", props.modulo))(
50
+ this.directory,
51
+ ) !== null
52
+ )
53
+ return false;
54
+
55
+ const middle: string =
56
+ this.manager === "yarn"
57
+ ? `add${props.dev ? " -D" : ""}`
58
+ : `install ${props.dev ? "--save-dev" : "--save"}`;
59
+ CommandExecutor.run(
60
+ `${this.manager} ${middle} ${props.modulo}${
61
+ props.version ? `@${props.version}` : ""
62
+ }`,
63
+ !!props.silent,
64
+ );
65
+ return true;
66
+ }
67
+
68
+ public erase(props: { modulo: string; silent?: boolean }): void {
69
+ const middle: string = this.manager === "yarn" ? "remove" : "uninstall";
70
+ CommandExecutor.run(
71
+ `${this.manager} ${middle} ${props.modulo}`,
72
+ !!props.silent,
73
+ );
74
+ }
75
+
76
+ private constructor(
77
+ public readonly directory: string,
78
+ public data: Package.Data,
79
+ ) {}
80
+
81
+ private static async load(file: string): Promise<Package.Data> {
82
+ const content: string = await fs.promises.readFile(file, "utf8");
83
+ return JSON.parse(content);
84
+ }
85
+ }
86
+ export namespace Package {
87
+ export interface Data {
88
+ scripts?: Record<string, string>;
89
+ dependencies?: Record<string, string>;
90
+ devDependencies?: Record<string, string>;
91
+ }
92
+ }
@@ -1,99 +1,99 @@
1
- import type Comment from "comment-json";
2
- import fs from "fs";
3
- import path from "path";
4
-
5
- import { TypiaSetupWizard } from "../TypiaSetupWizard";
6
- import { FileRetriever } from "./FileRetriever";
7
- import { PackageManager } from "./PackageManager";
8
-
9
- export namespace PluginConfigurator {
10
- export async function configure(
11
- pack: PackageManager,
12
- args: TypiaSetupWizard.IArguments,
13
- ): Promise<void> {
14
- // INSTALL COMMENT-JSON
15
- const installed: boolean = pack.install({
16
- dev: true,
17
- modulo: "comment-json",
18
- version: "4.2.3",
19
- silent: true,
20
- });
21
-
22
- // DO CONFIGURE
23
- const error: Error | null = await (async () => {
24
- try {
25
- await _Configure(pack, args);
26
- return null;
27
- } catch (exp) {
28
- return exp as Error;
29
- }
30
- })();
31
-
32
- // REMOVE IT
33
- if (installed)
34
- pack.erase({
35
- modulo: "comment-json",
36
- silent: true,
37
- });
38
- if (error !== null) throw error;
39
- }
40
-
41
- async function _Configure(
42
- pack: PackageManager,
43
- args: TypiaSetupWizard.IArguments,
44
- ): Promise<void> {
45
- // GET COMPILER-OPTIONS
46
- const Comment: typeof import("comment-json") =
47
- await FileRetriever.require(
48
- path.join("node_modules", "comment-json"),
49
- )(pack.directory);
50
-
51
- const config: Comment.CommentObject = Comment.parse(
52
- await fs.promises.readFile(args.project!, "utf8"),
53
- ) as Comment.CommentObject;
54
- const compilerOptions = config.compilerOptions as
55
- | Comment.CommentObject
56
- | undefined;
57
- if (compilerOptions === undefined)
58
- throw new Error(
59
- `${args.project} file does not have "compilerOptions" property.`,
60
- );
61
-
62
- // PREPARE PLUGINS
63
- const plugins: Comment.CommentArray<Comment.CommentObject> = (() => {
64
- const plugins = compilerOptions.plugins as
65
- | Comment.CommentArray<Comment.CommentObject>
66
- | undefined;
67
- if (plugins === undefined)
68
- return (compilerOptions.plugins = [] as any);
69
- else if (!Array.isArray(plugins))
70
- throw new Error(
71
- `"plugins" property of ${args.project} must be array type.`,
72
- );
73
- return plugins;
74
- })();
75
-
76
- const strict: boolean = compilerOptions.strict === true;
77
- const oldbie: Comment.CommentObject | undefined = plugins.find(
78
- (p) =>
79
- typeof p === "object" &&
80
- p !== null &&
81
- p.transform === "typia/lib/transform",
82
- );
83
- if (strict === true && oldbie !== undefined) return;
84
-
85
- // DO CONFIGURE
86
- compilerOptions.strict = true;
87
- if (oldbie === undefined)
88
- plugins.push(
89
- Comment.parse(`
90
- {
91
- "transform": "typia/lib/transform"
92
- }`) as Comment.CommentObject,
93
- );
94
- await fs.promises.writeFile(
95
- args.project!,
96
- Comment.stringify(config, null, 2),
97
- );
98
- }
99
- }
1
+ import type Comment from "comment-json";
2
+ import fs from "fs";
3
+ import path from "path";
4
+
5
+ import { TypiaSetupWizard } from "../TypiaSetupWizard";
6
+ import { FileRetriever } from "./FileRetriever";
7
+ import { PackageManager } from "./PackageManager";
8
+
9
+ export namespace PluginConfigurator {
10
+ export async function configure(
11
+ pack: PackageManager,
12
+ args: TypiaSetupWizard.IArguments,
13
+ ): Promise<void> {
14
+ // INSTALL COMMENT-JSON
15
+ const installed: boolean = pack.install({
16
+ dev: true,
17
+ modulo: "comment-json",
18
+ version: "4.2.3",
19
+ silent: true,
20
+ });
21
+
22
+ // DO CONFIGURE
23
+ const error: Error | null = await (async () => {
24
+ try {
25
+ await _Configure(pack, args);
26
+ return null;
27
+ } catch (exp) {
28
+ return exp as Error;
29
+ }
30
+ })();
31
+
32
+ // REMOVE IT
33
+ if (installed)
34
+ pack.erase({
35
+ modulo: "comment-json",
36
+ silent: true,
37
+ });
38
+ if (error !== null) throw error;
39
+ }
40
+
41
+ async function _Configure(
42
+ pack: PackageManager,
43
+ args: TypiaSetupWizard.IArguments,
44
+ ): Promise<void> {
45
+ // GET COMPILER-OPTIONS
46
+ const Comment: typeof import("comment-json") =
47
+ await FileRetriever.require(
48
+ path.join("node_modules", "comment-json"),
49
+ )(pack.directory);
50
+
51
+ const config: Comment.CommentObject = Comment.parse(
52
+ await fs.promises.readFile(args.project!, "utf8"),
53
+ ) as Comment.CommentObject;
54
+ const compilerOptions = config.compilerOptions as
55
+ | Comment.CommentObject
56
+ | undefined;
57
+ if (compilerOptions === undefined)
58
+ throw new Error(
59
+ `${args.project} file does not have "compilerOptions" property.`,
60
+ );
61
+
62
+ // PREPARE PLUGINS
63
+ const plugins: Comment.CommentArray<Comment.CommentObject> = (() => {
64
+ const plugins = compilerOptions.plugins as
65
+ | Comment.CommentArray<Comment.CommentObject>
66
+ | undefined;
67
+ if (plugins === undefined)
68
+ return (compilerOptions.plugins = [] as any);
69
+ else if (!Array.isArray(plugins))
70
+ throw new Error(
71
+ `"plugins" property of ${args.project} must be array type.`,
72
+ );
73
+ return plugins;
74
+ })();
75
+
76
+ const strict: boolean = compilerOptions.strict === true;
77
+ const oldbie: Comment.CommentObject | undefined = plugins.find(
78
+ (p) =>
79
+ typeof p === "object" &&
80
+ p !== null &&
81
+ p.transform === "typia/lib/transform",
82
+ );
83
+ if (strict === true && oldbie !== undefined) return;
84
+
85
+ // DO CONFIGURE
86
+ compilerOptions.strict = true;
87
+ if (oldbie === undefined)
88
+ plugins.push(
89
+ Comment.parse(`
90
+ {
91
+ "transform": "typia/lib/transform"
92
+ }`) as Comment.CommentObject,
93
+ );
94
+ await fs.promises.writeFile(
95
+ args.project!,
96
+ Comment.stringify(config, null, 2),
97
+ );
98
+ }
99
+ }