typia 4.2.3-dev.20230814 → 4.3.0-dev.20230821

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 (260) hide show
  1. package/README.md +1 -1
  2. package/lib/factories/ExpressionFactory.d.ts +1 -0
  3. package/lib/factories/ExpressionFactory.js +3 -0
  4. package/lib/factories/ExpressionFactory.js.map +1 -1
  5. package/lib/factories/MetadataTagFactory.js +10 -4
  6. package/lib/factories/MetadataTagFactory.js.map +1 -1
  7. package/lib/metadata/IMetadataTag.d.ts +1 -1
  8. package/lib/metadata/MetadataTuple.js.map +1 -1
  9. package/lib/programmers/CheckerProgrammer.js +2 -2
  10. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  11. package/lib/programmers/LiteralsProgrammer.js +2 -1
  12. package/lib/programmers/LiteralsProgrammer.js.map +1 -1
  13. package/lib/programmers/RandomProgrammer.js +19 -10
  14. package/lib/programmers/RandomProgrammer.js.map +1 -1
  15. package/lib/programmers/helpers/RandomRanger.js +2 -2
  16. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  17. package/lib/programmers/helpers/UnionExplorer.js +11 -7
  18. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  19. package/lib/programmers/internal/application_number.js +10 -3
  20. package/lib/programmers/internal/application_number.js.map +1 -1
  21. package/lib/programmers/internal/check_bigint.js +16 -12
  22. package/lib/programmers/internal/check_bigint.js.map +1 -1
  23. package/lib/programmers/internal/check_number.js +38 -5
  24. package/lib/programmers/internal/check_number.js.map +1 -1
  25. package/package.json +2 -2
  26. package/src/CustomValidatorMap.ts +126 -126
  27. package/src/IRandomGenerator.ts +34 -34
  28. package/src/IValidation.ts +21 -21
  29. package/src/Primitive.ts +131 -131
  30. package/src/TypeGuardError.ts +36 -36
  31. package/src/executable/TypiaGenerateWizard.ts +85 -85
  32. package/src/executable/TypiaSetupWizard.ts +153 -153
  33. package/src/executable/setup/ArgumentParser.ts +45 -45
  34. package/src/executable/setup/CommandExecutor.ts +8 -8
  35. package/src/executable/setup/FileRetriever.ts +22 -22
  36. package/src/executable/setup/PackageManager.ts +71 -71
  37. package/src/executable/setup/PluginConfigurator.ts +70 -70
  38. package/src/executable/typia.ts +52 -52
  39. package/src/factories/CommentFactory.ts +84 -84
  40. package/src/factories/ExpressionFactory.ts +77 -70
  41. package/src/factories/IdentifierFactory.ts +59 -59
  42. package/src/factories/LiteralFactory.ts +39 -39
  43. package/src/factories/MetadataCollection.ts +269 -269
  44. package/src/factories/MetadataFactory.ts +34 -34
  45. package/src/factories/MetadataTagFactory.ts +361 -355
  46. package/src/factories/StatementFactory.ts +24 -24
  47. package/src/factories/TemplateFactory.ts +58 -58
  48. package/src/factories/TypeFactory.ts +124 -124
  49. package/src/factories/ValueFactory.ts +12 -12
  50. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  51. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  52. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  53. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  54. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  55. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  56. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  57. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  58. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  59. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  60. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  61. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  62. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  63. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  64. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -84
  65. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  66. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  67. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  68. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  69. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  70. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  71. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  72. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  73. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  74. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  75. package/src/functional/$any.ts +2 -2
  76. package/src/functional/$dictionary.ts +25 -25
  77. package/src/functional/$every.ts +11 -11
  78. package/src/functional/$guard.ts +35 -35
  79. package/src/functional/$is_between.ts +2 -2
  80. package/src/functional/$is_custom.ts +14 -14
  81. package/src/functional/$is_date.ts +3 -3
  82. package/src/functional/$is_datetime.ts +2 -2
  83. package/src/functional/$is_email.ts +4 -4
  84. package/src/functional/$is_ipv4.ts +4 -4
  85. package/src/functional/$is_ipv6.ts +4 -4
  86. package/src/functional/$is_url.ts +4 -4
  87. package/src/functional/$is_uuid.ts +4 -4
  88. package/src/functional/$join.ts +46 -46
  89. package/src/functional/$number.ts +12 -12
  90. package/src/functional/$report.ts +15 -15
  91. package/src/functional/$rest.ts +3 -3
  92. package/src/functional/$string.ts +50 -50
  93. package/src/functional/$tail.ts +5 -5
  94. package/src/functional/Namespace.ts +127 -127
  95. package/src/index.ts +4 -4
  96. package/src/metadata/ICommentTag.ts +4 -4
  97. package/src/metadata/IJsDocTagInfo.ts +10 -10
  98. package/src/metadata/IMetadata.ts +28 -28
  99. package/src/metadata/IMetadataAlias.ts +14 -14
  100. package/src/metadata/IMetadataApplication.ts +7 -7
  101. package/src/metadata/IMetadataArray.ts +10 -10
  102. package/src/metadata/IMetadataCollection.ts +11 -11
  103. package/src/metadata/IMetadataConstant.ts +16 -16
  104. package/src/metadata/IMetadataDictionary.ts +14 -14
  105. package/src/metadata/IMetadataEntry.ts +6 -6
  106. package/src/metadata/IMetadataObject.ts +18 -18
  107. package/src/metadata/IMetadataProperty.ts +11 -11
  108. package/src/metadata/IMetadataResolved.ts +6 -6
  109. package/src/metadata/IMetadataTag.ts +112 -105
  110. package/src/metadata/IMetadataTuple.ts +10 -10
  111. package/src/metadata/Metadata.ts +607 -607
  112. package/src/metadata/MetadataAlias.ts +66 -66
  113. package/src/metadata/MetadataArray.ts +55 -55
  114. package/src/metadata/MetadataConstant.ts +3 -3
  115. package/src/metadata/MetadataObject.ts +129 -129
  116. package/src/metadata/MetadataProperty.ts +64 -64
  117. package/src/metadata/MetadataResolved.ts +51 -51
  118. package/src/metadata/MetadataTuple.ts +58 -53
  119. package/src/module.ts +2038 -2038
  120. package/src/programmers/ApplicationProgrammer.ts +47 -47
  121. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  122. package/src/programmers/AssertParseProgrammer.ts +66 -66
  123. package/src/programmers/AssertProgrammer.ts +279 -279
  124. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  125. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  126. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  127. package/src/programmers/CloneProgrammer.ts +587 -587
  128. package/src/programmers/FeatureProgrammer.ts +495 -495
  129. package/src/programmers/IsCloneProgrammer.ts +78 -78
  130. package/src/programmers/IsParseProgrammer.ts +72 -72
  131. package/src/programmers/IsProgrammer.ts +239 -239
  132. package/src/programmers/IsPruneProgrammer.ts +73 -73
  133. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  134. package/src/programmers/LiteralsProgrammer.ts +64 -63
  135. package/src/programmers/PruneProgrammer.ts +542 -542
  136. package/src/programmers/RandomProgrammer.ts +578 -579
  137. package/src/programmers/StringifyProgrammer.ts +986 -986
  138. package/src/programmers/TypiaProgrammer.ts +129 -129
  139. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  140. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  141. package/src/programmers/ValidateProgrammer.ts +305 -305
  142. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  143. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  144. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  145. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  146. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  147. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  148. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  149. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  150. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  151. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  152. package/src/programmers/helpers/RandomRanger.ts +208 -216
  153. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  154. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  155. package/src/programmers/helpers/UnionExplorer.ts +305 -301
  156. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  157. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  158. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  159. package/src/programmers/internal/application_alias.ts +66 -66
  160. package/src/programmers/internal/application_array.ts +30 -30
  161. package/src/programmers/internal/application_boolean.ts +15 -15
  162. package/src/programmers/internal/application_constant.ts +26 -26
  163. package/src/programmers/internal/application_default.ts +17 -17
  164. package/src/programmers/internal/application_default_string.ts +33 -33
  165. package/src/programmers/internal/application_native.ts +39 -39
  166. package/src/programmers/internal/application_number.ts +80 -74
  167. package/src/programmers/internal/application_object.ts +165 -165
  168. package/src/programmers/internal/application_resolved.ts +55 -55
  169. package/src/programmers/internal/application_schema.ts +157 -157
  170. package/src/programmers/internal/application_string.ts +44 -44
  171. package/src/programmers/internal/application_templates.ts +25 -25
  172. package/src/programmers/internal/application_tuple.ts +57 -57
  173. package/src/programmers/internal/check_array.ts +30 -30
  174. package/src/programmers/internal/check_array_length.ts +35 -35
  175. package/src/programmers/internal/check_bigint.ts +113 -82
  176. package/src/programmers/internal/check_custom.ts +31 -31
  177. package/src/programmers/internal/check_dynamic_properties.ts +195 -195
  178. package/src/programmers/internal/check_everything.ts +28 -28
  179. package/src/programmers/internal/check_native.ts +21 -21
  180. package/src/programmers/internal/check_number.ts +258 -177
  181. package/src/programmers/internal/check_object.ts +55 -55
  182. package/src/programmers/internal/check_string.ts +25 -25
  183. package/src/programmers/internal/check_string_tags.ts +67 -67
  184. package/src/programmers/internal/check_template.ts +56 -56
  185. package/src/programmers/internal/check_union_array_like.ts +329 -329
  186. package/src/programmers/internal/decode_union_object.ts +73 -73
  187. package/src/programmers/internal/feature_object_entries.ts +63 -63
  188. package/src/programmers/internal/get_comment_tags.ts +23 -23
  189. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  190. package/src/programmers/internal/prune_object_properties.ts +60 -60
  191. package/src/programmers/internal/random_custom.ts +29 -29
  192. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  193. package/src/programmers/internal/stringify_native.ts +7 -7
  194. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  195. package/src/programmers/internal/template_to_pattern.ts +15 -15
  196. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  197. package/src/schemas/IJsonApplication.ts +8 -8
  198. package/src/schemas/IJsonComponents.ts +33 -33
  199. package/src/schemas/IJsonSchema.ts +133 -133
  200. package/src/transform.ts +27 -27
  201. package/src/transformers/CallExpressionTransformer.ts +179 -179
  202. package/src/transformers/FileTransformer.ts +47 -47
  203. package/src/transformers/IProject.ts +11 -11
  204. package/src/transformers/ITransformOptions.ts +62 -62
  205. package/src/transformers/ImportTransformer.ts +66 -66
  206. package/src/transformers/NodeTransformer.ts +13 -13
  207. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -112
  208. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  209. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  210. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  211. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  212. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  213. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  214. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  215. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  216. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  217. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  218. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  219. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  220. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  221. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  222. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  223. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  224. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  225. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  226. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  227. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  228. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  229. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  230. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  231. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  232. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  233. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  234. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  235. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  236. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  237. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  238. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  239. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  240. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  241. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  242. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  243. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  244. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  245. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  246. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  247. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  248. package/src/transformers/internal/GenericTransformer.ts +97 -97
  249. package/src/typings/Atomic.ts +17 -17
  250. package/src/typings/ClassProperties.ts +5 -5
  251. package/src/typings/Customizable.ts +5 -5
  252. package/src/typings/OmitNever.ts +3 -3
  253. package/src/typings/SpecialFields.ts +3 -3
  254. package/src/typings/Writable.ts +11 -11
  255. package/src/utils/ArrayUtil.ts +45 -45
  256. package/src/utils/Escaper.ts +46 -46
  257. package/src/utils/MapUtil.ts +12 -12
  258. package/src/utils/PatternUtil.ts +33 -33
  259. package/src/utils/RandomGenerator.ts +81 -81
  260. 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,70 +1,77 @@
1
- import ts from "typescript";
2
-
3
- export namespace ExpressionFactory {
4
- export const isRequired = (input: ts.Expression): ts.Expression =>
5
- ts.factory.createStrictInequality(
6
- ts.factory.createIdentifier("undefined"),
7
- input,
8
- );
9
-
10
- export const isArray = (input: ts.Expression): ts.Expression =>
11
- ts.factory.createCallExpression(
12
- ts.factory.createIdentifier("Array.isArray"),
13
- undefined,
14
- [input],
15
- );
16
-
17
- export const isObject =
18
- (options: { checkNull: boolean; checkArray: boolean }) =>
19
- (input: ts.Expression): ts.Expression => {
20
- const conditions: ts.Expression[] = [
21
- ts.factory.createStrictEquality(
22
- ts.factory.createStringLiteral("object"),
23
- ts.factory.createTypeOfExpression(input),
24
- ),
25
- ];
26
- if (options.checkNull === true)
27
- conditions.push(
28
- ts.factory.createStrictInequality(
29
- ts.factory.createNull(),
30
- input,
31
- ),
32
- );
33
- if (options.checkArray === true)
34
- conditions.push(
35
- ts.factory.createStrictEquality(
36
- ts.factory.createFalse(),
37
- ts.factory.createCallExpression(
38
- ts.factory.createIdentifier("Array.isArray"),
39
- undefined,
40
- [input],
41
- ),
42
- ),
43
- );
44
-
45
- return conditions.length === 1
46
- ? conditions[0]!
47
- : conditions.reduce((x, y) =>
48
- ts.factory.createLogicalAnd(x, y),
49
- );
50
- };
51
-
52
- export const isInstanceOf =
53
- (type: string) =>
54
- (input: ts.Expression): ts.Expression => {
55
- return ts.factory.createBinaryExpression(
56
- input,
57
- ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
58
- ts.factory.createIdentifier(type),
59
- );
60
- };
61
-
62
- export const coalesce =
63
- (x: ts.Expression) =>
64
- (y: ts.Expression): ts.Expression =>
65
- ts.factory.createBinaryExpression(
66
- x,
67
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
68
- y,
69
- );
70
- }
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
+ }