typia 3.8.0-dev.20230426-3 → 3.8.0

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 (153) hide show
  1. package/lib/executable/TypiaSetupWizard.js +1 -1
  2. package/package.json +2 -2
  3. package/src/Primitive.ts +120 -120
  4. package/src/executable/TypiaGenerateWizard.ts +85 -85
  5. package/src/executable/TypiaSetupWizard.ts +133 -133
  6. package/src/executable/setup/CommandExecutor.ts +8 -8
  7. package/src/executable/setup/PackageManager.ts +71 -71
  8. package/src/executable/typia.ts +52 -52
  9. package/src/factories/CommentFactory.ts +14 -14
  10. package/src/factories/ExpressionFactory.ts +70 -70
  11. package/src/factories/IdentifierFactory.ts +63 -63
  12. package/src/factories/LiteralFactory.ts +39 -39
  13. package/src/factories/MetadataCollection.ts +121 -121
  14. package/src/factories/MetadataFactory.ts +62 -62
  15. package/src/factories/MetadataTagFactory.ts +297 -297
  16. package/src/factories/StatementFactory.ts +24 -24
  17. package/src/factories/TemplateFactory.ts +58 -58
  18. package/src/factories/TypeFactory.ts +124 -124
  19. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  20. package/src/factories/internal/metadata/emplace_metadata_object.ts +140 -140
  21. package/src/factories/internal/metadata/iterate_metadata.ts +67 -67
  22. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  23. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  24. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  25. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  26. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +44 -44
  27. package/src/factories/internal/metadata/iterate_metadata_union.ts +57 -57
  28. package/src/functional/$any.ts +2 -2
  29. package/src/functional/$is_between.ts +2 -2
  30. package/src/functional/$is_custom.ts +14 -14
  31. package/src/functional/$is_date.ts +3 -3
  32. package/src/functional/$is_datetime.ts +2 -2
  33. package/src/functional/$is_email.ts +4 -4
  34. package/src/functional/$is_ipv4.ts +4 -4
  35. package/src/functional/$is_ipv6.ts +4 -4
  36. package/src/functional/$is_url.ts +4 -4
  37. package/src/functional/$is_uuid.ts +4 -4
  38. package/src/functional/$join.ts +46 -46
  39. package/src/functional/$number.ts +12 -12
  40. package/src/functional/$rest.ts +3 -3
  41. package/src/functional/$string.ts +37 -37
  42. package/src/functional/$tail.ts +5 -5
  43. package/src/metadata/Metadata.ts +533 -533
  44. package/src/metadata/MetadataConstant.ts +3 -3
  45. package/src/metadata/MetadataObject.ts +127 -127
  46. package/src/module.ts +2043 -2043
  47. package/src/programmers/ApplicationProgrammer.ts +62 -62
  48. package/src/programmers/AssertCloneProgrammer.ts +79 -79
  49. package/src/programmers/AssertParseProgrammer.ts +74 -74
  50. package/src/programmers/AssertProgrammer.ts +285 -285
  51. package/src/programmers/AssertPruneProgrammer.ts +76 -76
  52. package/src/programmers/AssertStringifyProgrammer.ts +74 -74
  53. package/src/programmers/CheckerProgrammer.ts +875 -875
  54. package/src/programmers/CloneProgrammer.ts +389 -389
  55. package/src/programmers/FeatureProgrammer.ts +500 -500
  56. package/src/programmers/IsCloneProgrammer.ts +86 -86
  57. package/src/programmers/IsParseProgrammer.ts +80 -80
  58. package/src/programmers/IsProgrammer.ts +212 -212
  59. package/src/programmers/IsPruneProgrammer.ts +81 -81
  60. package/src/programmers/IsStringifyProgrammer.ts +84 -84
  61. package/src/programmers/LiteralsProgrammer.ts +65 -65
  62. package/src/programmers/PruneProgrammer.ts +347 -347
  63. package/src/programmers/RandomProgrammer.ts +423 -423
  64. package/src/programmers/StringifyProgrammer.ts +798 -798
  65. package/src/programmers/TypiaProgrammer.ts +129 -129
  66. package/src/programmers/ValidateCloneProgrammer.ts +93 -93
  67. package/src/programmers/ValidateParseProgrammer.ts +78 -78
  68. package/src/programmers/ValidateProgrammer.ts +316 -316
  69. package/src/programmers/ValidatePruneProgrammer.ts +86 -86
  70. package/src/programmers/ValidateStringifyProgrammer.ts +92 -92
  71. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  72. package/src/programmers/helpers/FunctionImporeter.ts +54 -54
  73. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  74. package/src/programmers/helpers/PruneJoiner.ts +144 -144
  75. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  76. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  77. package/src/programmers/helpers/UnionExplorer.ts +275 -275
  78. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  79. package/src/programmers/internal/application_array.ts +36 -36
  80. package/src/programmers/internal/application_boolean.ts +17 -17
  81. package/src/programmers/internal/application_constant.ts +30 -30
  82. package/src/programmers/internal/application_default_string.ts +33 -33
  83. package/src/programmers/internal/application_native.ts +32 -32
  84. package/src/programmers/internal/application_number.ts +73 -73
  85. package/src/programmers/internal/application_object.ts +154 -154
  86. package/src/programmers/internal/application_schema.ts +213 -213
  87. package/src/programmers/internal/application_string.ts +45 -45
  88. package/src/programmers/internal/application_templates.ts +26 -26
  89. package/src/programmers/internal/application_tuple.ts +29 -29
  90. package/src/programmers/internal/check_array.ts +30 -30
  91. package/src/programmers/internal/check_custom.ts +31 -31
  92. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  93. package/src/programmers/internal/check_everything.ts +28 -28
  94. package/src/programmers/internal/check_native.ts +21 -21
  95. package/src/programmers/internal/check_string_tags.ts +67 -67
  96. package/src/programmers/internal/check_union_array_like.ts +271 -271
  97. package/src/programmers/internal/check_union_tuple.ts +33 -33
  98. package/src/programmers/internal/random_custom.ts +29 -29
  99. package/src/programmers/internal/stringify_dynamic_properties.ts +167 -167
  100. package/src/programmers/internal/stringify_native.ts +7 -7
  101. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  102. package/src/schemas/IJsonSchema.ts +129 -129
  103. package/src/transform.ts +17 -17
  104. package/src/transformers/CallExpressionTransformer.ts +177 -177
  105. package/src/transformers/FileTransformer.ts +47 -47
  106. package/src/transformers/NodeTransformer.ts +13 -13
  107. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +114 -114
  108. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  109. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  110. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  111. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  112. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  113. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  114. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  115. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  116. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  117. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  118. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  119. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  120. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  121. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  122. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  123. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +52 -52
  124. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  125. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  126. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  127. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  128. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  129. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  130. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  131. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  132. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  133. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  134. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  135. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  136. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  137. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  138. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  139. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  140. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  141. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  142. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  143. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  144. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  145. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  146. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  147. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  148. package/src/transformers/internal/GenericTransformer.ts +97 -97
  149. package/src/utils/ArrayUtil.ts +44 -44
  150. package/src/utils/Escaper.ts +45 -45
  151. package/src/utils/MapUtil.ts +12 -12
  152. package/src/utils/PatternUtil.ts +30 -30
  153. package/src/utils/RandomGenerator.ts +81 -81
@@ -82,7 +82,7 @@ var TypiaSetupWizard;
82
82
  })();
83
83
  return Number((_a = version.split(".")[0]) !== null && _a !== void 0 ? _a : "") >= 3
84
84
  ? "latest"
85
- : "2.1.0";
85
+ : "4.9.5";
86
86
  })(),
87
87
  });
88
88
  (_a = args.project) !== null && _a !== void 0 ? _a : (args.project = (function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "3.8.0-dev.20230426-3",
3
+ "version": "3.8.0",
4
4
  "description": "Superfast runtime validators with only one line",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -67,7 +67,7 @@
67
67
  "bugs": {
68
68
  "url": "https://github.com/samchon/typia/issues"
69
69
  },
70
- "homepage": "https://github.com/samchon/typia#readme",
70
+ "homepage": "https://typia.io",
71
71
  "dependencies": {
72
72
  "commander": "^10.0.0",
73
73
  "comment-json": "^4.2.3",
package/src/Primitive.ts CHANGED
@@ -1,120 +1,120 @@
1
- /**
2
- * Primitive type.
3
- *
4
- * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
- * primitive type.
6
- *
7
- * If the target argument is a built-in class who returns its origin primitive type through
8
- * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
- * `string` or `number`.
10
- *
11
- * Otherwise, the target argument is a type of custom class, all of its custom method would
12
- * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
- * type of the TMP type finally be the primitive object.
14
- *
15
- * In addition, if the target argument is a type of custom class and it has a special
16
- * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
- * but `Primitive<ReturnType<Instance.toJSON>>`.
18
- *
19
- * Before | After
20
- * ------------------------|----------------------------------------
21
- * `Boolean` | `boolean`
22
- * `Number` | `number`
23
- * `String` | `string`
24
- * `Class` | `object`
25
- * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
- * Others | No change
27
- *
28
- * @template Instance Target argument type.
29
- * @author Jenogho Nam - https://github.com/samchon
30
- */
31
- export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
32
- ? T
33
- : _Primitive<T>;
34
-
35
- type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
36
-
37
- type _Primitive<Instance> = _ValueOf<Instance> extends object
38
- ? Instance extends object
39
- ? Instance extends _Native
40
- ? {}
41
- : Instance extends IJsonable<infer Raw>
42
- ? _ValueOf<Raw> extends object
43
- ? Raw extends object
44
- ? _PrimitiveObject<Raw> // object would be primitified
45
- : never // cannot be
46
- : _ValueOf<Raw> // atomic value
47
- : _PrimitiveObject<Instance> // object would be primitified
48
- : never // cannot be
49
- : _ValueOf<Instance>;
50
-
51
- type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
52
- ? _IsTuple<Instance> extends true
53
- ? _PrimitiveSpread<Instance>
54
- : _Primitive<T>[]
55
- : {
56
- [P in keyof Instance]: Instance[P] extends Function
57
- ? never
58
- : _Primitive<Instance[P]>;
59
- };
60
-
61
- type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest]
62
- ? [_Primitive<F>, ..._PrimitiveSpread<Rest>]
63
- : [];
64
-
65
- type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
66
- ? boolean
67
- : _IsValueOf<Instance, Number> extends true
68
- ? number
69
- : _IsValueOf<Instance, String> extends true
70
- ? string
71
- : Instance;
72
-
73
- type _Native =
74
- | Set<any>
75
- | Map<any, any>
76
- | WeakSet<any>
77
- | WeakMap<any, any>
78
- | Uint8Array
79
- | Uint8ClampedArray
80
- | Uint16Array
81
- | Uint32Array
82
- | BigUint64Array
83
- | Int8Array
84
- | Int16Array
85
- | Int32Array
86
- | BigInt64Array
87
- | Float32Array
88
- | Float64Array
89
- | ArrayBuffer
90
- | SharedArrayBuffer
91
- | DataView;
92
-
93
- type _IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
94
- never,
95
- ]
96
- ? false
97
- : T extends readonly any[]
98
- ? number extends T["length"]
99
- ? false
100
- : true
101
- : false;
102
-
103
- type _IsValueOf<
104
- Instance,
105
- Object extends IValueOf<any>,
106
- > = Instance extends Object
107
- ? Object extends IValueOf<infer Primitive>
108
- ? Instance extends Primitive
109
- ? false
110
- : true // not Primitive, but Object
111
- : false // cannot be
112
- : false;
113
-
114
- interface IValueOf<T> {
115
- valueOf(): T;
116
- }
117
-
118
- interface IJsonable<T> {
119
- toJSON(): T;
120
- }
1
+ /**
2
+ * Primitive type.
3
+ *
4
+ * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
+ * primitive type.
6
+ *
7
+ * If the target argument is a built-in class who returns its origin primitive type through
8
+ * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
+ * `string` or `number`.
10
+ *
11
+ * Otherwise, the target argument is a type of custom class, all of its custom method would
12
+ * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
+ * type of the TMP type finally be the primitive object.
14
+ *
15
+ * In addition, if the target argument is a type of custom class and it has a special
16
+ * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
+ * but `Primitive<ReturnType<Instance.toJSON>>`.
18
+ *
19
+ * Before | After
20
+ * ------------------------|----------------------------------------
21
+ * `Boolean` | `boolean`
22
+ * `Number` | `number`
23
+ * `String` | `string`
24
+ * `Class` | `object`
25
+ * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
+ * Others | No change
27
+ *
28
+ * @template Instance Target argument type.
29
+ * @author Jenogho Nam - https://github.com/samchon
30
+ */
31
+ export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
32
+ ? T
33
+ : _Primitive<T>;
34
+
35
+ type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
36
+
37
+ type _Primitive<Instance> = _ValueOf<Instance> extends object
38
+ ? Instance extends object
39
+ ? Instance extends _Native
40
+ ? {}
41
+ : Instance extends IJsonable<infer Raw>
42
+ ? _ValueOf<Raw> extends object
43
+ ? Raw extends object
44
+ ? _PrimitiveObject<Raw> // object would be primitified
45
+ : never // cannot be
46
+ : _ValueOf<Raw> // atomic value
47
+ : _PrimitiveObject<Instance> // object would be primitified
48
+ : never // cannot be
49
+ : _ValueOf<Instance>;
50
+
51
+ type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
52
+ ? _IsTuple<Instance> extends true
53
+ ? _PrimitiveSpread<Instance>
54
+ : _Primitive<T>[]
55
+ : {
56
+ [P in keyof Instance]: Instance[P] extends Function
57
+ ? never
58
+ : _Primitive<Instance[P]>;
59
+ };
60
+
61
+ type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest]
62
+ ? [_Primitive<F>, ..._PrimitiveSpread<Rest>]
63
+ : [];
64
+
65
+ type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
66
+ ? boolean
67
+ : _IsValueOf<Instance, Number> extends true
68
+ ? number
69
+ : _IsValueOf<Instance, String> extends true
70
+ ? string
71
+ : Instance;
72
+
73
+ type _Native =
74
+ | Set<any>
75
+ | Map<any, any>
76
+ | WeakSet<any>
77
+ | WeakMap<any, any>
78
+ | Uint8Array
79
+ | Uint8ClampedArray
80
+ | Uint16Array
81
+ | Uint32Array
82
+ | BigUint64Array
83
+ | Int8Array
84
+ | Int16Array
85
+ | Int32Array
86
+ | BigInt64Array
87
+ | Float32Array
88
+ | Float64Array
89
+ | ArrayBuffer
90
+ | SharedArrayBuffer
91
+ | DataView;
92
+
93
+ type _IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
94
+ never,
95
+ ]
96
+ ? false
97
+ : T extends readonly any[]
98
+ ? number extends T["length"]
99
+ ? false
100
+ : true
101
+ : false;
102
+
103
+ type _IsValueOf<
104
+ Instance,
105
+ Object extends IValueOf<any>,
106
+ > = Instance extends Object
107
+ ? Object extends IValueOf<infer Primitive>
108
+ ? Instance extends Primitive
109
+ ? false
110
+ : true // not Primitive, but Object
111
+ : false // cannot be
112
+ : false;
113
+
114
+ interface IValueOf<T> {
115
+ valueOf(): T;
116
+ }
117
+
118
+ interface IJsonable<T> {
119
+ toJSON(): T;
120
+ }
@@ -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 Error(`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 Error(`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
+ }