typia 3.8.0-dev.20230417 → 3.8.0-dev.20230418

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 (51) hide show
  1. package/README.md +1 -1
  2. package/lib/executable/setup/PackageManager.d.ts +1 -1
  3. package/lib/metadata/Metadata.js +1 -1
  4. package/lib/metadata/Metadata.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.js +1 -1
  6. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  7. package/lib/typings/Customizable.d.ts +2 -2
  8. package/lib/utils/RandomGenerator.d.ts +1 -17
  9. package/lib/utils/RandomGenerator.js.map +1 -1
  10. package/package.json +2 -2
  11. package/src/IRandomGenerator.ts +33 -33
  12. package/src/executable/TypiaGenerateWizard.ts +85 -85
  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 +1 -1
  17. package/src/executable/setup/PluginConfigurator.ts +59 -59
  18. package/src/factories/MetadataTagFactory.ts +302 -302
  19. package/src/factories/TypiaFileFactory.ts +129 -129
  20. package/src/metadata/ICommentTag.ts +4 -4
  21. package/src/metadata/Metadata.ts +1 -1
  22. package/src/module.ts +2043 -2043
  23. package/src/programmers/AssertProgrammer.ts +284 -284
  24. package/src/programmers/CheckerProgrammer.ts +1 -1
  25. package/src/programmers/LiteralsProgrammer.ts +65 -65
  26. package/src/programmers/RandomProgrammer.ts +413 -413
  27. package/src/programmers/ValidateProgrammer.ts +317 -317
  28. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  29. package/src/programmers/helpers/RandomRanger.ts +216 -216
  30. package/src/programmers/internal/application_native.ts +32 -32
  31. package/src/programmers/internal/check_array.ts +30 -30
  32. package/src/programmers/internal/check_array_length.ts +35 -35
  33. package/src/programmers/internal/check_custom.ts +33 -33
  34. package/src/programmers/internal/check_number.ts +177 -177
  35. package/src/programmers/internal/check_object.ts +55 -55
  36. package/src/programmers/internal/check_union_array_like.ts +272 -272
  37. package/src/programmers/internal/feature_object_entries.ts +63 -63
  38. package/src/programmers/internal/get_comment_tags.ts +23 -23
  39. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  40. package/src/programmers/internal/random_custom.ts +30 -30
  41. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  42. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  43. package/src/transformers/CallExpressionTransformer.ts +174 -174
  44. package/src/transformers/ImportTransformer.ts +66 -66
  45. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  46. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  47. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  48. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  49. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  50. package/src/typings/Customizable.ts +2 -2
  51. package/src/utils/RandomGenerator.ts +3 -0
@@ -1,129 +1,129 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import ts from "typescript";
4
-
5
- import { ImportTransformer } from "../transformers/ImportTransformer";
6
-
7
- import transform from "../transform";
8
-
9
- export namespace TypiaFileFactory {
10
- export interface IProps {
11
- input: string;
12
- output: string;
13
- project: string;
14
- }
15
-
16
- export async function generate(
17
- props: TypiaFileFactory.IProps,
18
- ): Promise<void> {
19
- props.input = path.resolve(props.input);
20
- props.output = path.resolve(props.output);
21
-
22
- if ((await is_directory(props.input)) === false)
23
- throw new Error(
24
- "Error on TypiaGenerator.generate(): input path is not a directory.",
25
- );
26
- else if (fs.existsSync(props.output) === false)
27
- await fs.promises.mkdir(props.output, { recursive: true });
28
- else if ((await is_directory(props.output)) === false) {
29
- const parent: string = path.join(props.output, "..");
30
- if ((await is_directory(parent)) === false)
31
- throw new Error(
32
- "Error on TypiaGenerator.generate(): output path is not a directory.",
33
- );
34
- await fs.promises.mkdir(props.output);
35
- }
36
-
37
- // CREATE PROGRAM
38
- const { options: compilerOptions } = ts.parseJsonConfigFileContent(
39
- ts.readConfigFile(props.project, ts.sys.readFile).config,
40
- {
41
- fileExists: ts.sys.fileExists,
42
- readFile: ts.sys.readFile,
43
- readDirectory: ts.sys.readDirectory,
44
- useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
45
- },
46
- path.dirname(props.project),
47
- );
48
-
49
- const program: ts.Program = ts.createProgram(
50
- await (async () => {
51
- const container: string[] = [];
52
- await gather(props)(container)(props.input)(props.output);
53
- return container;
54
- })(),
55
- compilerOptions,
56
- );
57
-
58
- // DO TRANSFORM
59
- const result: ts.TransformationResult<ts.SourceFile> = ts.transform(
60
- program
61
- .getSourceFiles()
62
- .filter(
63
- (file) =>
64
- !file.isDeclarationFile &&
65
- path.resolve(file.fileName).indexOf(props.input) !== -1,
66
- ),
67
- [
68
- ImportTransformer.transform(props.input)(props.output),
69
- transform(
70
- program,
71
- ((compilerOptions.plugins as any[]) ?? []).find(
72
- (p: any) =>
73
- p.transform === "typia/lib/transform" ||
74
- p.transform === "../src/transform.ts",
75
- ) ?? {},
76
- ),
77
- ],
78
- program.getCompilerOptions(),
79
- );
80
-
81
- // ARCHIVE TRANSFORMED FILES
82
- const printer: ts.Printer = ts.createPrinter({
83
- newLine: ts.NewLineKind.LineFeed,
84
- });
85
- for (const file of result.transformed) {
86
- const to: string = path
87
- .resolve(file.fileName)
88
- .replace(props.input, props.output);
89
-
90
- const content: string = printer.printFile(file);
91
- await fs.promises.writeFile(to, emend(content), "utf8");
92
- }
93
- }
94
-
95
- const emend = (content: string): string => {
96
- if (
97
- content.indexOf("typia.") === -1 ||
98
- content.indexOf("import typia") !== -1 ||
99
- content.indexOf("import * as typia") !== -1
100
- )
101
- return content;
102
- return `import typia from "typia";\n\n${content}`;
103
- };
104
-
105
- const is_directory = async (current: string): Promise<boolean> => {
106
- const stat: fs.Stats = await fs.promises.stat(current);
107
- return stat.isDirectory();
108
- };
109
-
110
- const gather =
111
- (props: IProps) =>
112
- (container: string[]) =>
113
- (from: string) =>
114
- async (to: string) => {
115
- if (from === props.output) return;
116
- else if (fs.existsSync(to) === false) await fs.promises.mkdir(to);
117
-
118
- for (const file of await fs.promises.readdir(from)) {
119
- const next: string = path.join(from, file);
120
- const stat: fs.Stats = await fs.promises.stat(next);
121
-
122
- if (stat.isDirectory()) {
123
- await gather(props)(container)(next)(path.join(to, file));
124
- continue;
125
- } else if (file.substring(file.length - 3) === ".ts")
126
- container.push(next);
127
- }
128
- };
129
- }
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import ts from "typescript";
4
+
5
+ import { ImportTransformer } from "../transformers/ImportTransformer";
6
+
7
+ import transform from "../transform";
8
+
9
+ export namespace TypiaFileFactory {
10
+ export interface IProps {
11
+ input: string;
12
+ output: string;
13
+ project: string;
14
+ }
15
+
16
+ export async function generate(
17
+ props: TypiaFileFactory.IProps,
18
+ ): Promise<void> {
19
+ props.input = path.resolve(props.input);
20
+ props.output = path.resolve(props.output);
21
+
22
+ if ((await is_directory(props.input)) === false)
23
+ throw new Error(
24
+ "Error on TypiaGenerator.generate(): input path is not a directory.",
25
+ );
26
+ else if (fs.existsSync(props.output) === false)
27
+ await fs.promises.mkdir(props.output, { recursive: true });
28
+ else if ((await is_directory(props.output)) === false) {
29
+ const parent: string = path.join(props.output, "..");
30
+ if ((await is_directory(parent)) === false)
31
+ throw new Error(
32
+ "Error on TypiaGenerator.generate(): output path is not a directory.",
33
+ );
34
+ await fs.promises.mkdir(props.output);
35
+ }
36
+
37
+ // CREATE PROGRAM
38
+ const { options: compilerOptions } = ts.parseJsonConfigFileContent(
39
+ ts.readConfigFile(props.project, ts.sys.readFile).config,
40
+ {
41
+ fileExists: ts.sys.fileExists,
42
+ readFile: ts.sys.readFile,
43
+ readDirectory: ts.sys.readDirectory,
44
+ useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
45
+ },
46
+ path.dirname(props.project),
47
+ );
48
+
49
+ const program: ts.Program = ts.createProgram(
50
+ await (async () => {
51
+ const container: string[] = [];
52
+ await gather(props)(container)(props.input)(props.output);
53
+ return container;
54
+ })(),
55
+ compilerOptions,
56
+ );
57
+
58
+ // DO TRANSFORM
59
+ const result: ts.TransformationResult<ts.SourceFile> = ts.transform(
60
+ program
61
+ .getSourceFiles()
62
+ .filter(
63
+ (file) =>
64
+ !file.isDeclarationFile &&
65
+ path.resolve(file.fileName).indexOf(props.input) !== -1,
66
+ ),
67
+ [
68
+ ImportTransformer.transform(props.input)(props.output),
69
+ transform(
70
+ program,
71
+ ((compilerOptions.plugins as any[]) ?? []).find(
72
+ (p: any) =>
73
+ p.transform === "typia/lib/transform" ||
74
+ p.transform === "../src/transform.ts",
75
+ ) ?? {},
76
+ ),
77
+ ],
78
+ program.getCompilerOptions(),
79
+ );
80
+
81
+ // ARCHIVE TRANSFORMED FILES
82
+ const printer: ts.Printer = ts.createPrinter({
83
+ newLine: ts.NewLineKind.LineFeed,
84
+ });
85
+ for (const file of result.transformed) {
86
+ const to: string = path
87
+ .resolve(file.fileName)
88
+ .replace(props.input, props.output);
89
+
90
+ const content: string = printer.printFile(file);
91
+ await fs.promises.writeFile(to, emend(content), "utf8");
92
+ }
93
+ }
94
+
95
+ const emend = (content: string): string => {
96
+ if (
97
+ content.indexOf("typia.") === -1 ||
98
+ content.indexOf("import typia") !== -1 ||
99
+ content.indexOf("import * as typia") !== -1
100
+ )
101
+ return content;
102
+ return `import typia from "typia";\n\n${content}`;
103
+ };
104
+
105
+ const is_directory = async (current: string): Promise<boolean> => {
106
+ const stat: fs.Stats = await fs.promises.stat(current);
107
+ return stat.isDirectory();
108
+ };
109
+
110
+ const gather =
111
+ (props: IProps) =>
112
+ (container: string[]) =>
113
+ (from: string) =>
114
+ async (to: string) => {
115
+ if (from === props.output) return;
116
+ else if (fs.existsSync(to) === false) await fs.promises.mkdir(to);
117
+
118
+ for (const file of await fs.promises.readdir(from)) {
119
+ const next: string = path.join(from, file);
120
+ const stat: fs.Stats = await fs.promises.stat(next);
121
+
122
+ if (stat.isDirectory()) {
123
+ await gather(props)(container)(next)(path.join(to, file));
124
+ continue;
125
+ } else if (file.substring(file.length - 3) === ".ts")
126
+ container.push(next);
127
+ }
128
+ };
129
+ }
@@ -1,4 +1,4 @@
1
- export interface ICommentTag {
2
- name: string;
3
- value?: string;
4
- }
1
+ export interface ICommentTag {
2
+ name: string;
3
+ value?: string;
4
+ }
@@ -515,7 +515,7 @@ function getName(metadata: Metadata): string {
515
515
  elements.push(`Array<${array.getName()}>`);
516
516
 
517
517
  // OBJECT
518
- for (const object of metadata.objects) elements.push(`${object.name}`);
518
+ for (const object of metadata.objects) elements.push(object.name);
519
519
  if (metadata.resolved !== null) elements.push(metadata.resolved.getName());
520
520
 
521
521
  // RETURNS