typia 4.3.2 → 4.3.3

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 (241) hide show
  1. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +2 -0
  2. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  3. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  4. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  5. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  6. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/CustomValidatorMap.ts +126 -126
  9. package/src/IRandomGenerator.ts +34 -34
  10. package/src/IValidation.ts +21 -21
  11. package/src/Primitive.ts +131 -131
  12. package/src/TypeGuardError.ts +36 -36
  13. package/src/executable/TypiaGenerateWizard.ts +85 -85
  14. package/src/executable/TypiaSetupWizard.ts +153 -153
  15. package/src/executable/setup/ArgumentParser.ts +45 -45
  16. package/src/executable/setup/CommandExecutor.ts +8 -8
  17. package/src/executable/setup/FileRetriever.ts +22 -22
  18. package/src/executable/setup/PackageManager.ts +71 -71
  19. package/src/executable/setup/PluginConfigurator.ts +70 -70
  20. package/src/executable/typia.ts +52 -52
  21. package/src/factories/CommentFactory.ts +84 -84
  22. package/src/factories/ExpressionFactory.ts +77 -77
  23. package/src/factories/IdentifierFactory.ts +59 -59
  24. package/src/factories/LiteralFactory.ts +39 -39
  25. package/src/factories/MetadataCollection.ts +269 -269
  26. package/src/factories/MetadataFactory.ts +34 -34
  27. package/src/factories/MetadataTagFactory.ts +361 -361
  28. package/src/factories/StatementFactory.ts +24 -24
  29. package/src/factories/TemplateFactory.ts +58 -58
  30. package/src/factories/TypeFactory.ts +124 -124
  31. package/src/factories/ValueFactory.ts +12 -12
  32. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  33. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  34. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  35. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  36. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  37. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  38. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  39. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  40. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  41. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  42. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  43. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  44. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +88 -84
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  54. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  55. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  56. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  57. package/src/functional/$any.ts +2 -2
  58. package/src/functional/$dictionary.ts +25 -25
  59. package/src/functional/$every.ts +11 -11
  60. package/src/functional/$guard.ts +35 -35
  61. package/src/functional/$is_between.ts +2 -2
  62. package/src/functional/$is_custom.ts +14 -14
  63. package/src/functional/$is_date.ts +3 -3
  64. package/src/functional/$is_datetime.ts +2 -2
  65. package/src/functional/$is_email.ts +4 -4
  66. package/src/functional/$is_ipv4.ts +4 -4
  67. package/src/functional/$is_ipv6.ts +4 -4
  68. package/src/functional/$is_url.ts +4 -4
  69. package/src/functional/$is_uuid.ts +4 -4
  70. package/src/functional/$join.ts +46 -46
  71. package/src/functional/$number.ts +12 -12
  72. package/src/functional/$report.ts +15 -15
  73. package/src/functional/$rest.ts +3 -3
  74. package/src/functional/$string.ts +50 -50
  75. package/src/functional/$tail.ts +5 -5
  76. package/src/functional/Namespace.ts +127 -127
  77. package/src/index.ts +4 -4
  78. package/src/metadata/ICommentTag.ts +4 -4
  79. package/src/metadata/IJsDocTagInfo.ts +10 -10
  80. package/src/metadata/IMetadata.ts +28 -28
  81. package/src/metadata/IMetadataAlias.ts +14 -14
  82. package/src/metadata/IMetadataApplication.ts +7 -7
  83. package/src/metadata/IMetadataArray.ts +10 -10
  84. package/src/metadata/IMetadataCollection.ts +11 -11
  85. package/src/metadata/IMetadataConstant.ts +16 -16
  86. package/src/metadata/IMetadataDictionary.ts +14 -14
  87. package/src/metadata/IMetadataEntry.ts +6 -6
  88. package/src/metadata/IMetadataObject.ts +18 -18
  89. package/src/metadata/IMetadataProperty.ts +11 -11
  90. package/src/metadata/IMetadataResolved.ts +6 -6
  91. package/src/metadata/IMetadataTag.ts +112 -112
  92. package/src/metadata/IMetadataTuple.ts +10 -10
  93. package/src/metadata/Metadata.ts +607 -607
  94. package/src/metadata/MetadataAlias.ts +66 -66
  95. package/src/metadata/MetadataArray.ts +55 -55
  96. package/src/metadata/MetadataConstant.ts +3 -3
  97. package/src/metadata/MetadataObject.ts +129 -129
  98. package/src/metadata/MetadataProperty.ts +64 -64
  99. package/src/metadata/MetadataResolved.ts +51 -51
  100. package/src/metadata/MetadataTuple.ts +58 -58
  101. package/src/module.ts +2038 -2038
  102. package/src/programmers/ApplicationProgrammer.ts +47 -47
  103. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  104. package/src/programmers/AssertParseProgrammer.ts +66 -66
  105. package/src/programmers/AssertProgrammer.ts +279 -279
  106. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  107. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  108. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  109. package/src/programmers/CloneProgrammer.ts +587 -587
  110. package/src/programmers/FeatureProgrammer.ts +495 -495
  111. package/src/programmers/IsCloneProgrammer.ts +78 -78
  112. package/src/programmers/IsParseProgrammer.ts +72 -72
  113. package/src/programmers/IsProgrammer.ts +239 -239
  114. package/src/programmers/IsPruneProgrammer.ts +73 -73
  115. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  116. package/src/programmers/LiteralsProgrammer.ts +64 -64
  117. package/src/programmers/PruneProgrammer.ts +542 -542
  118. package/src/programmers/RandomProgrammer.ts +578 -578
  119. package/src/programmers/StringifyProgrammer.ts +986 -986
  120. package/src/programmers/TypiaProgrammer.ts +129 -129
  121. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  122. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  123. package/src/programmers/ValidateProgrammer.ts +305 -305
  124. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  125. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  126. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  127. package/src/programmers/helpers/CloneJoiner.ts +168 -131
  128. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  129. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  130. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  131. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  132. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  133. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  134. package/src/programmers/helpers/RandomRanger.ts +208 -208
  135. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  136. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  137. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  138. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  139. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  140. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  141. package/src/programmers/internal/application_alias.ts +66 -66
  142. package/src/programmers/internal/application_array.ts +30 -30
  143. package/src/programmers/internal/application_boolean.ts +15 -15
  144. package/src/programmers/internal/application_constant.ts +26 -26
  145. package/src/programmers/internal/application_default.ts +17 -17
  146. package/src/programmers/internal/application_default_string.ts +33 -33
  147. package/src/programmers/internal/application_native.ts +39 -39
  148. package/src/programmers/internal/application_number.ts +80 -80
  149. package/src/programmers/internal/application_object.ts +165 -165
  150. package/src/programmers/internal/application_resolved.ts +55 -55
  151. package/src/programmers/internal/application_schema.ts +157 -157
  152. package/src/programmers/internal/application_string.ts +44 -44
  153. package/src/programmers/internal/application_templates.ts +25 -25
  154. package/src/programmers/internal/application_tuple.ts +57 -57
  155. package/src/programmers/internal/check_array.ts +30 -30
  156. package/src/programmers/internal/check_array_length.ts +35 -35
  157. package/src/programmers/internal/check_bigint.ts +110 -110
  158. package/src/programmers/internal/check_custom.ts +31 -31
  159. package/src/programmers/internal/check_dynamic_properties.ts +194 -195
  160. package/src/programmers/internal/check_everything.ts +28 -28
  161. package/src/programmers/internal/check_native.ts +21 -21
  162. package/src/programmers/internal/check_object.ts +55 -55
  163. package/src/programmers/internal/check_string.ts +25 -25
  164. package/src/programmers/internal/check_string_tags.ts +67 -67
  165. package/src/programmers/internal/check_template.ts +56 -56
  166. package/src/programmers/internal/check_union_array_like.ts +329 -329
  167. package/src/programmers/internal/decode_union_object.ts +73 -73
  168. package/src/programmers/internal/feature_object_entries.ts +63 -63
  169. package/src/programmers/internal/get_comment_tags.ts +23 -23
  170. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  171. package/src/programmers/internal/prune_object_properties.ts +60 -60
  172. package/src/programmers/internal/random_custom.ts +29 -29
  173. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  174. package/src/programmers/internal/stringify_native.ts +7 -7
  175. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  176. package/src/programmers/internal/template_to_pattern.ts +15 -15
  177. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  178. package/src/schemas/IJsonApplication.ts +8 -8
  179. package/src/schemas/IJsonComponents.ts +33 -33
  180. package/src/schemas/IJsonSchema.ts +133 -133
  181. package/src/transform.ts +27 -27
  182. package/src/transformers/CallExpressionTransformer.ts +179 -179
  183. package/src/transformers/FileTransformer.ts +47 -47
  184. package/src/transformers/IProject.ts +11 -11
  185. package/src/transformers/ITransformOptions.ts +62 -62
  186. package/src/transformers/ImportTransformer.ts +66 -66
  187. package/src/transformers/NodeTransformer.ts +13 -13
  188. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -112
  189. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  199. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  204. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  205. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  207. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  208. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  209. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  210. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  211. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  212. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  213. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  214. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  215. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  216. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  217. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  218. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  219. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  220. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  221. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  222. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  223. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  224. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  225. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  226. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  227. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  228. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  229. package/src/transformers/internal/GenericTransformer.ts +97 -97
  230. package/src/typings/Atomic.ts +17 -17
  231. package/src/typings/ClassProperties.ts +5 -5
  232. package/src/typings/Customizable.ts +5 -5
  233. package/src/typings/OmitNever.ts +3 -3
  234. package/src/typings/SpecialFields.ts +3 -3
  235. package/src/typings/Writable.ts +11 -11
  236. package/src/utils/ArrayUtil.ts +45 -45
  237. package/src/utils/Escaper.ts +46 -46
  238. package/src/utils/MapUtil.ts +12 -12
  239. package/src/utils/PatternUtil.ts +33 -33
  240. package/src/utils/RandomGenerator.ts +81 -81
  241. package/src/utils/Singleton.ts +17 -17
@@ -1,70 +1,70 @@
1
- import comments from "comment-json";
2
- import fs from "fs";
3
-
4
- import { TypiaSetupWizard } from "../TypiaSetupWizard";
5
-
6
- export namespace PluginConfigurator {
7
- export async function configure(
8
- args: TypiaSetupWizard.IArguments,
9
- ): Promise<void> {
10
- // GET COMPILER-OPTIONS
11
- const config: comments.CommentObject = comments.parse(
12
- await fs.promises.readFile(args.project!, "utf8"),
13
- ) as comments.CommentObject;
14
- const compilerOptions = config.compilerOptions as
15
- | comments.CommentObject
16
- | undefined;
17
- if (compilerOptions === undefined)
18
- throw new Error(
19
- `${args.project} file does not have "compilerOptions" property.`,
20
- );
21
-
22
- // PREPARE PLUGINS
23
- const plugins: comments.CommentArray<comments.CommentObject> = (() => {
24
- const plugins = compilerOptions.plugins as
25
- | comments.CommentArray<comments.CommentObject>
26
- | undefined;
27
- if (plugins === undefined)
28
- return (compilerOptions.plugins = [] as any);
29
- else if (!Array.isArray(plugins))
30
- throw new Error(
31
- `"plugins" property of ${args.project} must be array type.`,
32
- );
33
- return plugins;
34
- })();
35
-
36
- const strict: boolean | undefined = compilerOptions.strict as
37
- | boolean
38
- | undefined;
39
- const strictNullChecks: boolean | undefined =
40
- compilerOptions.strictNullChecks as boolean | undefined;
41
- const oldbie: comments.CommentObject | undefined = plugins.find(
42
- (p) =>
43
- typeof p === "object" &&
44
- p !== null &&
45
- p.transform === "typia/lib/transform",
46
- );
47
- if (
48
- strictNullChecks !== false &&
49
- (strict === true || strictNullChecks === true) &&
50
- oldbie !== undefined
51
- )
52
- return;
53
-
54
- // DO CONFIGURE
55
- compilerOptions.strictNullChecks = true;
56
- if (strict === undefined && strictNullChecks === undefined)
57
- compilerOptions.strict = true;
58
- if (oldbie === undefined)
59
- plugins.push(
60
- comments.parse(`
61
- {
62
- "transform": "typia/lib/transform"
63
- }`) as comments.CommentObject,
64
- );
65
- await fs.promises.writeFile(
66
- args.project!,
67
- comments.stringify(config, null, 2),
68
- );
69
- }
70
- }
1
+ import comments from "comment-json";
2
+ import fs from "fs";
3
+
4
+ import { TypiaSetupWizard } from "../TypiaSetupWizard";
5
+
6
+ export namespace PluginConfigurator {
7
+ export async function configure(
8
+ args: TypiaSetupWizard.IArguments,
9
+ ): Promise<void> {
10
+ // GET COMPILER-OPTIONS
11
+ const config: comments.CommentObject = comments.parse(
12
+ await fs.promises.readFile(args.project!, "utf8"),
13
+ ) as comments.CommentObject;
14
+ const compilerOptions = config.compilerOptions as
15
+ | comments.CommentObject
16
+ | undefined;
17
+ if (compilerOptions === undefined)
18
+ throw new Error(
19
+ `${args.project} file does not have "compilerOptions" property.`,
20
+ );
21
+
22
+ // PREPARE PLUGINS
23
+ const plugins: comments.CommentArray<comments.CommentObject> = (() => {
24
+ const plugins = compilerOptions.plugins as
25
+ | comments.CommentArray<comments.CommentObject>
26
+ | undefined;
27
+ if (plugins === undefined)
28
+ return (compilerOptions.plugins = [] as any);
29
+ else if (!Array.isArray(plugins))
30
+ throw new Error(
31
+ `"plugins" property of ${args.project} must be array type.`,
32
+ );
33
+ return plugins;
34
+ })();
35
+
36
+ const strict: boolean | undefined = compilerOptions.strict as
37
+ | boolean
38
+ | undefined;
39
+ const strictNullChecks: boolean | undefined =
40
+ compilerOptions.strictNullChecks as boolean | undefined;
41
+ const oldbie: comments.CommentObject | undefined = plugins.find(
42
+ (p) =>
43
+ typeof p === "object" &&
44
+ p !== null &&
45
+ p.transform === "typia/lib/transform",
46
+ );
47
+ if (
48
+ strictNullChecks !== false &&
49
+ (strict === true || strictNullChecks === true) &&
50
+ oldbie !== undefined
51
+ )
52
+ return;
53
+
54
+ // DO CONFIGURE
55
+ compilerOptions.strictNullChecks = true;
56
+ if (strict === undefined && strictNullChecks === undefined)
57
+ compilerOptions.strict = true;
58
+ if (oldbie === undefined)
59
+ plugins.push(
60
+ comments.parse(`
61
+ {
62
+ "transform": "typia/lib/transform"
63
+ }`) as comments.CommentObject,
64
+ );
65
+ await fs.promises.writeFile(
66
+ args.project!,
67
+ comments.stringify(config, null, 2),
68
+ );
69
+ }
70
+ }
@@ -1,52 +1,52 @@
1
- #!/usr/bin/env node
2
- const USAGE = `Wrong command has been detected. Use like below:
3
-
4
- npx typia setup \\
5
- --manager (npm|pnpm|yarn) \\
6
- --project {tsconfig.json file path}
7
-
8
- - npx typia setup
9
- - npx typia setup --manager pnpm
10
- - npx typia setup --project tsconfig.test.json
11
-
12
- npx typia generate
13
- --input {directory} \\
14
- --output {directory}
15
-
16
- --npx typia generate --input src/templates --output src/functinoal
17
- `;
18
-
19
- const halt = (desc: string): never => {
20
- console.error(desc);
21
- process.exit(-1);
22
- };
23
-
24
- const main = async (): Promise<void> => {
25
- try {
26
- await import("comment-json");
27
- await import("inquirer");
28
- await import("commander");
29
- } catch {
30
- halt(`typia has not been installed. Run "npm i typia" before.`);
31
- }
32
-
33
- const type: string | undefined = process.argv[2];
34
- if (type === "setup") {
35
- const { TypiaSetupWizard } = await import("./TypiaSetupWizard");
36
- await TypiaSetupWizard.setup();
37
- } else if (type === "generate") {
38
- try {
39
- await import("typescript");
40
- } catch {
41
- halt(
42
- `typescript has not been installed. Run "npm i -D typescript" before.`,
43
- );
44
- }
45
- const { TypiaGenerateWizard } = await import("./TypiaGenerateWizard");
46
- await TypiaGenerateWizard.generate();
47
- } else halt(USAGE);
48
- };
49
- main().catch((exp) => {
50
- console.error(exp);
51
- process.exit(-1);
52
- });
1
+ #!/usr/bin/env node
2
+ const USAGE = `Wrong command has been detected. Use like below:
3
+
4
+ npx typia setup \\
5
+ --manager (npm|pnpm|yarn) \\
6
+ --project {tsconfig.json file path}
7
+
8
+ - npx typia setup
9
+ - npx typia setup --manager pnpm
10
+ - npx typia setup --project tsconfig.test.json
11
+
12
+ npx typia generate
13
+ --input {directory} \\
14
+ --output {directory}
15
+
16
+ --npx typia generate --input src/templates --output src/functinoal
17
+ `;
18
+
19
+ const halt = (desc: string): never => {
20
+ console.error(desc);
21
+ process.exit(-1);
22
+ };
23
+
24
+ const main = async (): Promise<void> => {
25
+ try {
26
+ await import("comment-json");
27
+ await import("inquirer");
28
+ await import("commander");
29
+ } catch {
30
+ halt(`typia has not been installed. Run "npm i typia" before.`);
31
+ }
32
+
33
+ const type: string | undefined = process.argv[2];
34
+ if (type === "setup") {
35
+ const { TypiaSetupWizard } = await import("./TypiaSetupWizard");
36
+ await TypiaSetupWizard.setup();
37
+ } else if (type === "generate") {
38
+ try {
39
+ await import("typescript");
40
+ } catch {
41
+ halt(
42
+ `typescript has not been installed. Run "npm i -D typescript" before.`,
43
+ );
44
+ }
45
+ const { TypiaGenerateWizard } = await import("./TypiaGenerateWizard");
46
+ await TypiaGenerateWizard.generate();
47
+ } else halt(USAGE);
48
+ };
49
+ main().catch((exp) => {
50
+ console.error(exp);
51
+ process.exit(-1);
52
+ });
@@ -1,84 +1,84 @@
1
- import ts from "typescript";
2
-
3
- export namespace CommentFactory {
4
- export const description = (
5
- symbol: ts.Symbol,
6
- includeTags: boolean = false,
7
- ): string | undefined => {
8
- const node = symbol.declarations?.[0];
9
- if (!node) return undefined;
10
-
11
- // FOR LEGACY TS < 5.2
12
- const [major, minor] = ts.versionMajorMinor.split(".").map(Number) as [
13
- number,
14
- number,
15
- ];
16
- if (major < 5 || (major === 5 && minor < 1)) {
17
- const content: string[] = [];
18
- const main: string = ts.displayPartsToString(
19
- symbol.getDocumentationComment(undefined),
20
- );
21
- if (main.length) {
22
- content.push(main);
23
- if (includeTags && symbol.getJsDocTags().length)
24
- content.push("");
25
- }
26
- if (includeTags)
27
- for (const tag of symbol.getJsDocTags()) {
28
- content.push(
29
- tag.text
30
- ? `@${tag.name} ${ts.displayPartsToString(
31
- tag.text,
32
- )}`
33
- : `@${tag.name}`,
34
- );
35
- }
36
- return content.length
37
- ? content
38
- .map((line) => line.split("\r\n").join("\n"))
39
- .join("\n")
40
- : undefined;
41
- }
42
-
43
- // NEW FEATURE OF TS 5.2
44
- const elements: readonly (ts.JSDoc | ts.JSDocTag)[] =
45
- ts.getJSDocCommentsAndTags(node);
46
- if (elements.length === 0) return undefined;
47
-
48
- const content: string[] = [];
49
- for (const comment of elements) {
50
- if (ts.isJSDoc(comment)) {
51
- const parsed: string | undefined = ts.getTextOfJSDocComment(
52
- comment.comment,
53
- );
54
- if (parsed?.length) {
55
- content.push(parsed);
56
- if (includeTags && comment.tags?.length) content.push("");
57
- }
58
- if (includeTags)
59
- for (const tag of comment.tags ?? [])
60
- content.push(parseJSDocTag(tag));
61
- } else if (includeTags) content.push(parseJSDocTag(comment));
62
- }
63
- const output: string = content
64
- .map((line) => line.split("\r\n").join("\n"))
65
- .join("\n");
66
- return output.length ? output : undefined;
67
- };
68
-
69
- export const merge = (comments: ts.SymbolDisplayPart[]): string =>
70
- comments
71
- .map((part) => part.text)
72
- .map((str) => str.split("\r\n").join("\n"))
73
- .join("");
74
- }
75
-
76
- const parseJSDocTag = (tag: ts.JSDocTag): string => {
77
- const name: string | undefined = (
78
- tag as ts.JSDocParameterTag
79
- ).name?.getText();
80
- const parsed: string | undefined = ts.getTextOfJSDocComment(tag.comment);
81
- return [`@${tag.tagName.text}`, name, parsed]
82
- .filter((str) => !!str?.length)
83
- .join(" ");
84
- };
1
+ import ts from "typescript";
2
+
3
+ export namespace CommentFactory {
4
+ export const description = (
5
+ symbol: ts.Symbol,
6
+ includeTags: boolean = false,
7
+ ): string | undefined => {
8
+ const node = symbol.declarations?.[0];
9
+ if (!node) return undefined;
10
+
11
+ // FOR LEGACY TS < 5.2
12
+ const [major, minor] = ts.versionMajorMinor.split(".").map(Number) as [
13
+ number,
14
+ number,
15
+ ];
16
+ if (major < 5 || (major === 5 && minor < 1)) {
17
+ const content: string[] = [];
18
+ const main: string = ts.displayPartsToString(
19
+ symbol.getDocumentationComment(undefined),
20
+ );
21
+ if (main.length) {
22
+ content.push(main);
23
+ if (includeTags && symbol.getJsDocTags().length)
24
+ content.push("");
25
+ }
26
+ if (includeTags)
27
+ for (const tag of symbol.getJsDocTags()) {
28
+ content.push(
29
+ tag.text
30
+ ? `@${tag.name} ${ts.displayPartsToString(
31
+ tag.text,
32
+ )}`
33
+ : `@${tag.name}`,
34
+ );
35
+ }
36
+ return content.length
37
+ ? content
38
+ .map((line) => line.split("\r\n").join("\n"))
39
+ .join("\n")
40
+ : undefined;
41
+ }
42
+
43
+ // NEW FEATURE OF TS 5.2
44
+ const elements: readonly (ts.JSDoc | ts.JSDocTag)[] =
45
+ ts.getJSDocCommentsAndTags(node);
46
+ if (elements.length === 0) return undefined;
47
+
48
+ const content: string[] = [];
49
+ for (const comment of elements) {
50
+ if (ts.isJSDoc(comment)) {
51
+ const parsed: string | undefined = ts.getTextOfJSDocComment(
52
+ comment.comment,
53
+ );
54
+ if (parsed?.length) {
55
+ content.push(parsed);
56
+ if (includeTags && comment.tags?.length) content.push("");
57
+ }
58
+ if (includeTags)
59
+ for (const tag of comment.tags ?? [])
60
+ content.push(parseJSDocTag(tag));
61
+ } else if (includeTags) content.push(parseJSDocTag(comment));
62
+ }
63
+ const output: string = content
64
+ .map((line) => line.split("\r\n").join("\n"))
65
+ .join("\n");
66
+ return output.length ? output : undefined;
67
+ };
68
+
69
+ export const merge = (comments: ts.SymbolDisplayPart[]): string =>
70
+ comments
71
+ .map((part) => part.text)
72
+ .map((str) => str.split("\r\n").join("\n"))
73
+ .join("");
74
+ }
75
+
76
+ const parseJSDocTag = (tag: ts.JSDocTag): string => {
77
+ const name: string | undefined = (
78
+ tag as ts.JSDocParameterTag
79
+ ).name?.getText();
80
+ const parsed: string | undefined = ts.getTextOfJSDocComment(tag.comment);
81
+ return [`@${tag.tagName.text}`, name, parsed]
82
+ .filter((str) => !!str?.length)
83
+ .join(" ");
84
+ };
@@ -1,77 +1,77 @@
1
- import ts from "typescript";
2
-
3
- export namespace ExpressionFactory {
4
- export const bigint = (value: number) =>
5
- ts.factory.createCallExpression(
6
- ts.factory.createIdentifier("BigInt"),
7
- undefined,
8
- [ts.factory.createNumericLiteral(value)],
9
- );
10
-
11
- export const isRequired = (input: ts.Expression): ts.Expression =>
12
- ts.factory.createStrictInequality(
13
- ts.factory.createIdentifier("undefined"),
14
- input,
15
- );
16
-
17
- export const isArray = (input: ts.Expression): ts.Expression =>
18
- ts.factory.createCallExpression(
19
- ts.factory.createIdentifier("Array.isArray"),
20
- undefined,
21
- [input],
22
- );
23
-
24
- export const isObject =
25
- (options: { checkNull: boolean; checkArray: boolean }) =>
26
- (input: ts.Expression): ts.Expression => {
27
- const conditions: ts.Expression[] = [
28
- ts.factory.createStrictEquality(
29
- ts.factory.createStringLiteral("object"),
30
- ts.factory.createTypeOfExpression(input),
31
- ),
32
- ];
33
- if (options.checkNull === true)
34
- conditions.push(
35
- ts.factory.createStrictInequality(
36
- ts.factory.createNull(),
37
- input,
38
- ),
39
- );
40
- if (options.checkArray === true)
41
- conditions.push(
42
- ts.factory.createStrictEquality(
43
- ts.factory.createFalse(),
44
- ts.factory.createCallExpression(
45
- ts.factory.createIdentifier("Array.isArray"),
46
- undefined,
47
- [input],
48
- ),
49
- ),
50
- );
51
-
52
- return conditions.length === 1
53
- ? conditions[0]!
54
- : conditions.reduce((x, y) =>
55
- ts.factory.createLogicalAnd(x, y),
56
- );
57
- };
58
-
59
- export const isInstanceOf =
60
- (type: string) =>
61
- (input: ts.Expression): ts.Expression => {
62
- return ts.factory.createBinaryExpression(
63
- input,
64
- ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
65
- ts.factory.createIdentifier(type),
66
- );
67
- };
68
-
69
- export const coalesce =
70
- (x: ts.Expression) =>
71
- (y: ts.Expression): ts.Expression =>
72
- ts.factory.createBinaryExpression(
73
- x,
74
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
75
- y,
76
- );
77
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace ExpressionFactory {
4
+ export const bigint = (value: number) =>
5
+ ts.factory.createCallExpression(
6
+ ts.factory.createIdentifier("BigInt"),
7
+ undefined,
8
+ [ts.factory.createNumericLiteral(value)],
9
+ );
10
+
11
+ export const isRequired = (input: ts.Expression): ts.Expression =>
12
+ ts.factory.createStrictInequality(
13
+ ts.factory.createIdentifier("undefined"),
14
+ input,
15
+ );
16
+
17
+ export const isArray = (input: ts.Expression): ts.Expression =>
18
+ ts.factory.createCallExpression(
19
+ ts.factory.createIdentifier("Array.isArray"),
20
+ undefined,
21
+ [input],
22
+ );
23
+
24
+ export const isObject =
25
+ (options: { checkNull: boolean; checkArray: boolean }) =>
26
+ (input: ts.Expression): ts.Expression => {
27
+ const conditions: ts.Expression[] = [
28
+ ts.factory.createStrictEquality(
29
+ ts.factory.createStringLiteral("object"),
30
+ ts.factory.createTypeOfExpression(input),
31
+ ),
32
+ ];
33
+ if (options.checkNull === true)
34
+ conditions.push(
35
+ ts.factory.createStrictInequality(
36
+ ts.factory.createNull(),
37
+ input,
38
+ ),
39
+ );
40
+ if (options.checkArray === true)
41
+ conditions.push(
42
+ ts.factory.createStrictEquality(
43
+ ts.factory.createFalse(),
44
+ ts.factory.createCallExpression(
45
+ ts.factory.createIdentifier("Array.isArray"),
46
+ undefined,
47
+ [input],
48
+ ),
49
+ ),
50
+ );
51
+
52
+ return conditions.length === 1
53
+ ? conditions[0]!
54
+ : conditions.reduce((x, y) =>
55
+ ts.factory.createLogicalAnd(x, y),
56
+ );
57
+ };
58
+
59
+ export const isInstanceOf =
60
+ (type: string) =>
61
+ (input: ts.Expression): ts.Expression => {
62
+ return ts.factory.createBinaryExpression(
63
+ input,
64
+ ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
65
+ ts.factory.createIdentifier(type),
66
+ );
67
+ };
68
+
69
+ export const coalesce =
70
+ (x: ts.Expression) =>
71
+ (y: ts.Expression): ts.Expression =>
72
+ ts.factory.createBinaryExpression(
73
+ x,
74
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
75
+ y,
76
+ );
77
+ }