typia 4.0.0-dev.20230519-3 → 4.0.0-dev.20230527

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 (222) hide show
  1. package/lib/transform.js +1 -1
  2. package/lib/transform.js.map +1 -1
  3. package/lib/utils/TsSymbolUtil.js +2 -1
  4. package/lib/utils/TsSymbolUtil.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/CustomValidatorMap.ts +126 -126
  7. package/src/IRandomGenerator.ts +33 -33
  8. package/src/IValidation.ts +21 -21
  9. package/src/Primitive.ts +123 -123
  10. package/src/TypeGuardError.ts +36 -36
  11. package/src/executable/TypiaGenerateWizard.ts +85 -85
  12. package/src/executable/TypiaSetupWizard.ts +133 -133
  13. package/src/executable/setup/ArgumentParser.ts +45 -45
  14. package/src/executable/setup/CommandExecutor.ts +8 -8
  15. package/src/executable/setup/FileRetriever.ts +22 -22
  16. package/src/executable/setup/PackageManager.ts +71 -71
  17. package/src/executable/setup/PluginConfigurator.ts +70 -70
  18. package/src/executable/typia.ts +52 -52
  19. package/src/factories/CommentFactory.ts +14 -14
  20. package/src/factories/ExpressionFactory.ts +77 -77
  21. package/src/factories/IdentifierFactory.ts +62 -62
  22. package/src/factories/LiteralFactory.ts +57 -57
  23. package/src/factories/MetadataCollection.ts +123 -123
  24. package/src/factories/MetadataFactory.ts +53 -53
  25. package/src/factories/MetadataTagFactory.ts +295 -295
  26. package/src/factories/StatementFactory.ts +20 -20
  27. package/src/factories/TemplateFactory.ts +64 -64
  28. package/src/factories/TypeFactory.ts +145 -145
  29. package/src/factories/ValueFactory.ts +15 -15
  30. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  31. package/src/factories/internal/metadata/emplace_metadata_object.ts +152 -152
  32. package/src/factories/internal/metadata/explore_metadata.ts +93 -93
  33. package/src/factories/internal/metadata/iterate_metadata.ts +63 -63
  34. package/src/factories/internal/metadata/iterate_metadata_array.ts +32 -32
  35. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  36. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  37. package/src/factories/internal/metadata/iterate_metadata_constant.ts +62 -62
  38. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  39. package/src/factories/internal/metadata/iterate_metadata_native.ts +217 -217
  40. package/src/factories/internal/metadata/iterate_metadata_object.ts +51 -51
  41. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +30 -30
  42. package/src/factories/internal/metadata/iterate_metadata_set.ts +36 -36
  43. package/src/factories/internal/metadata/iterate_metadata_template.ts +40 -40
  44. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +51 -51
  45. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  46. package/src/functional/$any.ts +2 -2
  47. package/src/functional/$dictionary.ts +25 -25
  48. package/src/functional/$every.ts +11 -11
  49. package/src/functional/$guard.ts +35 -35
  50. package/src/functional/$is_between.ts +2 -2
  51. package/src/functional/$is_custom.ts +14 -14
  52. package/src/functional/$is_date.ts +3 -3
  53. package/src/functional/$is_datetime.ts +2 -2
  54. package/src/functional/$is_email.ts +4 -4
  55. package/src/functional/$is_ipv4.ts +4 -4
  56. package/src/functional/$is_ipv6.ts +4 -4
  57. package/src/functional/$is_url.ts +4 -4
  58. package/src/functional/$is_uuid.ts +4 -4
  59. package/src/functional/$join.ts +46 -46
  60. package/src/functional/$number.ts +12 -12
  61. package/src/functional/$report.ts +15 -15
  62. package/src/functional/$rest.ts +3 -3
  63. package/src/functional/$string.ts +37 -37
  64. package/src/functional/$tail.ts +5 -5
  65. package/src/functional/Namespace.ts +127 -127
  66. package/src/index.ts +4 -4
  67. package/src/metadata/ICommentTag.ts +4 -4
  68. package/src/metadata/IJsDocTagInfo.ts +10 -10
  69. package/src/metadata/IMetadata.ts +26 -26
  70. package/src/metadata/IMetadataApplication.ts +7 -7
  71. package/src/metadata/IMetadataConstant.ts +16 -16
  72. package/src/metadata/IMetadataEntry.ts +6 -6
  73. package/src/metadata/IMetadataObject.ts +29 -29
  74. package/src/metadata/IMetadataProperty.ts +11 -11
  75. package/src/metadata/IMetadataTag.ts +105 -105
  76. package/src/metadata/Metadata.ts +539 -539
  77. package/src/metadata/MetadataConstant.ts +3 -3
  78. package/src/metadata/MetadataObject.ts +127 -127
  79. package/src/metadata/MetadataProperty.ts +64 -64
  80. package/src/module.ts +2038 -2038
  81. package/src/programmers/ApplicationProgrammer.ts +48 -48
  82. package/src/programmers/AssertCloneProgrammer.ts +68 -68
  83. package/src/programmers/AssertParseProgrammer.ts +66 -66
  84. package/src/programmers/AssertProgrammer.ts +274 -274
  85. package/src/programmers/AssertPruneProgrammer.ts +73 -73
  86. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  87. package/src/programmers/CheckerProgrammer.ts +897 -897
  88. package/src/programmers/CloneProgrammer.ts +387 -387
  89. package/src/programmers/FeatureProgrammer.ts +510 -510
  90. package/src/programmers/IsCloneProgrammer.ts +79 -79
  91. package/src/programmers/IsParseProgrammer.ts +72 -72
  92. package/src/programmers/IsProgrammer.ts +223 -223
  93. package/src/programmers/IsPruneProgrammer.ts +83 -83
  94. package/src/programmers/IsStringifyProgrammer.ts +77 -77
  95. package/src/programmers/LiteralsProgrammer.ts +65 -65
  96. package/src/programmers/PruneProgrammer.ts +348 -348
  97. package/src/programmers/RandomProgrammer.ts +444 -444
  98. package/src/programmers/StringifyProgrammer.ts +758 -758
  99. package/src/programmers/TypiaProgrammer.ts +141 -141
  100. package/src/programmers/ValidateCloneProgrammer.ts +93 -93
  101. package/src/programmers/ValidateParseProgrammer.ts +78 -78
  102. package/src/programmers/ValidateProgrammer.ts +317 -317
  103. package/src/programmers/ValidatePruneProgrammer.ts +86 -86
  104. package/src/programmers/ValidateStringifyProgrammer.ts +93 -93
  105. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  106. package/src/programmers/helpers/CloneJoiner.ts +138 -138
  107. package/src/programmers/helpers/FunctionImporeter.ts +56 -56
  108. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  109. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  110. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  111. package/src/programmers/helpers/PruneJoiner.ts +156 -156
  112. package/src/programmers/helpers/RandomJoiner.ts +165 -165
  113. package/src/programmers/helpers/RandomRanger.ts +218 -218
  114. package/src/programmers/helpers/StringifyJoinder.ts +118 -118
  115. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  116. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  117. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  118. package/src/programmers/helpers/disable_function_importer_declare.ts +21 -21
  119. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  120. package/src/programmers/internal/application_array.ts +32 -32
  121. package/src/programmers/internal/application_boolean.ts +15 -15
  122. package/src/programmers/internal/application_constant.ts +26 -26
  123. package/src/programmers/internal/application_default.ts +17 -17
  124. package/src/programmers/internal/application_default_string.ts +33 -33
  125. package/src/programmers/internal/application_native.ts +36 -36
  126. package/src/programmers/internal/application_number.ts +71 -71
  127. package/src/programmers/internal/application_object.ts +162 -162
  128. package/src/programmers/internal/application_schema.ts +198 -198
  129. package/src/programmers/internal/application_string.ts +44 -44
  130. package/src/programmers/internal/application_templates.ts +25 -25
  131. package/src/programmers/internal/application_tuple.ts +27 -27
  132. package/src/programmers/internal/check_array.ts +31 -31
  133. package/src/programmers/internal/check_array_length.ts +35 -35
  134. package/src/programmers/internal/check_bigint.ts +95 -95
  135. package/src/programmers/internal/check_custom.ts +32 -32
  136. package/src/programmers/internal/check_dynamic_properties.ts +198 -198
  137. package/src/programmers/internal/check_everything.ts +28 -28
  138. package/src/programmers/internal/check_native.ts +22 -22
  139. package/src/programmers/internal/check_number.ts +177 -177
  140. package/src/programmers/internal/check_object.ts +65 -65
  141. package/src/programmers/internal/check_string.ts +27 -27
  142. package/src/programmers/internal/check_string_tags.ts +68 -68
  143. package/src/programmers/internal/check_template.ts +57 -57
  144. package/src/programmers/internal/check_union_array_like.ts +273 -273
  145. package/src/programmers/internal/check_union_tuple.ts +34 -34
  146. package/src/programmers/internal/decode_union_object.ts +75 -75
  147. package/src/programmers/internal/feature_object_entries.ts +64 -64
  148. package/src/programmers/internal/get_comment_tags.ts +23 -23
  149. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  150. package/src/programmers/internal/prune_object_properties.ts +63 -63
  151. package/src/programmers/internal/random_custom.ts +30 -30
  152. package/src/programmers/internal/stringify_dynamic_properties.ts +173 -173
  153. package/src/programmers/internal/stringify_native.ts +7 -7
  154. package/src/programmers/internal/stringify_regular_properties.ts +89 -89
  155. package/src/programmers/internal/template_to_pattern.ts +15 -15
  156. package/src/schemas/IJsonApplication.ts +13 -13
  157. package/src/schemas/IJsonComponents.ts +33 -33
  158. package/src/schemas/IJsonSchema.ts +134 -134
  159. package/src/transform.ts +39 -39
  160. package/src/transformers/CallExpressionTransformer.ts +183 -183
  161. package/src/transformers/FileTransformer.ts +50 -50
  162. package/src/transformers/IProject.ts +18 -18
  163. package/src/transformers/ITransformOptions.ts +62 -62
  164. package/src/transformers/ImportTransformer.ts +74 -74
  165. package/src/transformers/NodeTransformer.ts +13 -13
  166. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +107 -107
  167. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  168. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  169. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  170. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  172. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  173. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  174. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  175. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  176. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +43 -43
  177. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  178. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  179. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  180. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  181. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +31 -31
  182. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +56 -56
  183. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  185. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  187. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  188. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  189. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  190. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  191. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  192. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  193. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  194. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  195. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  196. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  197. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  198. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  199. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  200. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  201. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  202. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  203. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  204. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  205. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  206. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  207. package/src/transformers/internal/GenericTransformer.ts +101 -101
  208. package/src/typings/Atomic.ts +17 -17
  209. package/src/typings/ClassProperties.ts +5 -5
  210. package/src/typings/Customizable.ts +5 -5
  211. package/src/typings/OmitNever.ts +3 -3
  212. package/src/typings/SpecialFields.ts +3 -3
  213. package/src/typings/Writable.ts +11 -11
  214. package/src/utils/ArrayUtil.ts +44 -44
  215. package/src/utils/Escaper.ts +45 -45
  216. package/src/utils/MapUtil.ts +12 -12
  217. package/src/utils/PatternUtil.ts +30 -30
  218. package/src/utils/RandomGenerator.ts +81 -81
  219. package/src/utils/Singleton.ts +17 -17
  220. package/src/utils/TsNodeUtil.ts +17 -17
  221. package/src/utils/TsSymbolUtil.ts +153 -152
  222. package/src/utils/TsTypeUtil.ts +38 -38
@@ -1,133 +1,133 @@
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
- CommandExecutor.run("npx tsc --init");
44
- return (args.project = "tsconfig.json");
45
- })();
46
-
47
- // SETUP TRANSFORMER
48
- await pack.save((data) => {
49
- data.scripts ??= {};
50
- if (
51
- typeof data.scripts.prepare === "string" &&
52
- data.scripts.prepare.length
53
- ) {
54
- if (data.scripts.prepare.indexOf("ts-patch install") === -1)
55
- data.scripts.prepare =
56
- "ts-patch install && " + data.scripts.prepare;
57
- } else data.scripts.prepare = "ts-patch install";
58
- });
59
- CommandExecutor.run("npm run prepare");
60
-
61
- // CONFIGURE TYPIA
62
- await PluginConfigurator.configure(args);
63
- }
64
-
65
- const inquiry: ArgumentParser.Inquiry<IArguments> = async (
66
- pack,
67
- command,
68
- prompt,
69
- action,
70
- ) => {
71
- // PREPARE ASSETS
72
- command.option("--manager [manager", "package manager");
73
- command.option("--project [project]", "tsconfig.json file location");
74
-
75
- // INTERNAL PROCEDURES
76
- const questioned = { value: false };
77
- const select =
78
- (name: string) =>
79
- (message: string) =>
80
- async <Choice extends string>(
81
- choices: Choice[],
82
- ): Promise<Choice> => {
83
- questioned.value = true;
84
- return (
85
- await prompt()({
86
- type: "list",
87
- name: name,
88
- message: message,
89
- choices: choices,
90
- })
91
- )[name];
92
- };
93
- const configure = async () => {
94
- const fileList: string[] = await (
95
- await fs.promises.readdir(process.cwd())
96
- )
97
- .filter(
98
- (str) =>
99
- str.substring(0, 8) === "tsconfig" &&
100
- str.substring(str.length - 5) === ".json",
101
- )
102
- .sort((x, y) =>
103
- x === "tsconfig.json"
104
- ? -1
105
- : y === "tsconfig.json"
106
- ? 1
107
- : x < y
108
- ? -1
109
- : 1,
110
- );
111
- if (fileList.length === 0) {
112
- if (process.cwd() !== pack.directory)
113
- throw new Error(`Unable to find "tsconfig.json" file.`);
114
- return null;
115
- } else if (fileList.length === 1) return fileList[0];
116
- return select("tsconfig")("TS Config File")(fileList);
117
- };
118
-
119
- // DO CONSTRUCT
120
- return action(async (options) => {
121
- options.manager ??= await select("manager")("Package Manager")([
122
- "npm" as const,
123
- "pnpm" as const,
124
- "yarn" as const,
125
- ]);
126
- pack.manager = options.manager;
127
- options.project ??= await configure();
128
-
129
- if (questioned.value) console.log("");
130
- return options as IArguments;
131
- });
132
- };
133
- }
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
+ CommandExecutor.run("npx tsc --init");
44
+ return (args.project = "tsconfig.json");
45
+ })();
46
+
47
+ // SETUP TRANSFORMER
48
+ await pack.save((data) => {
49
+ data.scripts ??= {};
50
+ if (
51
+ typeof data.scripts.prepare === "string" &&
52
+ data.scripts.prepare.length
53
+ ) {
54
+ if (data.scripts.prepare.indexOf("ts-patch install") === -1)
55
+ data.scripts.prepare =
56
+ "ts-patch install && " + data.scripts.prepare;
57
+ } else data.scripts.prepare = "ts-patch install";
58
+ });
59
+ CommandExecutor.run("npm run prepare");
60
+
61
+ // CONFIGURE TYPIA
62
+ await PluginConfigurator.configure(args);
63
+ }
64
+
65
+ const inquiry: ArgumentParser.Inquiry<IArguments> = async (
66
+ pack,
67
+ command,
68
+ prompt,
69
+ action,
70
+ ) => {
71
+ // PREPARE ASSETS
72
+ command.option("--manager [manager", "package manager");
73
+ command.option("--project [project]", "tsconfig.json file location");
74
+
75
+ // INTERNAL PROCEDURES
76
+ const questioned = { value: false };
77
+ const select =
78
+ (name: string) =>
79
+ (message: string) =>
80
+ async <Choice extends string>(
81
+ choices: Choice[],
82
+ ): Promise<Choice> => {
83
+ questioned.value = true;
84
+ return (
85
+ await prompt()({
86
+ type: "list",
87
+ name: name,
88
+ message: message,
89
+ choices: choices,
90
+ })
91
+ )[name];
92
+ };
93
+ const configure = async () => {
94
+ const fileList: string[] = await (
95
+ await fs.promises.readdir(process.cwd())
96
+ )
97
+ .filter(
98
+ (str) =>
99
+ str.substring(0, 8) === "tsconfig" &&
100
+ str.substring(str.length - 5) === ".json",
101
+ )
102
+ .sort((x, y) =>
103
+ x === "tsconfig.json"
104
+ ? -1
105
+ : y === "tsconfig.json"
106
+ ? 1
107
+ : x < y
108
+ ? -1
109
+ : 1,
110
+ );
111
+ if (fileList.length === 0) {
112
+ if (process.cwd() !== pack.directory)
113
+ throw new Error(`Unable to find "tsconfig.json" file.`);
114
+ return null;
115
+ } else if (fileList.length === 1) return fileList[0];
116
+ return select("tsconfig")("TS Config File")(fileList);
117
+ };
118
+
119
+ // DO CONSTRUCT
120
+ return action(async (options) => {
121
+ options.manager ??= await select("manager")("Package Manager")([
122
+ "npm" as const,
123
+ "pnpm" as const,
124
+ "yarn" as const,
125
+ ]);
126
+ pack.manager = options.manager;
127
+ options.project ??= await configure();
128
+
129
+ if (questioned.value) console.log("");
130
+ return options as IArguments;
131
+ });
132
+ };
133
+ }
@@ -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
+ }
@@ -1,22 +1,22 @@
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
- }
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
+ }
@@ -1,71 +1,71 @@
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
- modulo: string;
41
- version: string;
42
- }): boolean {
43
- const middle: string =
44
- this.manager === "yarn"
45
- ? `add${props.dev ? " -D" : ""}`
46
- : `install ${props.dev ? "--save-dev" : "--save"}`;
47
- CommandExecutor.run(
48
- `${this.manager} ${middle} ${props.modulo}${
49
- props.version ? `@${props.version}` : ""
50
- }`,
51
- );
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
- }
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
+ modulo: string;
41
+ version: string;
42
+ }): boolean {
43
+ const middle: string =
44
+ this.manager === "yarn"
45
+ ? `add${props.dev ? " -D" : ""}`
46
+ : `install ${props.dev ? "--save-dev" : "--save"}`;
47
+ CommandExecutor.run(
48
+ `${this.manager} ${middle} ${props.modulo}${
49
+ props.version ? `@${props.version}` : ""
50
+ }`,
51
+ );
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
+ }