@nestia/sdk 3.0.0-dev.20231209 → 3.0.0-dev.20240412

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 (168) hide show
  1. package/README.md +12 -9
  2. package/assets/config/nestia.config.ts +82 -79
  3. package/lib/INestiaConfig.d.ts +28 -6
  4. package/lib/NestiaSdkApplication.js +12 -10
  5. package/lib/NestiaSdkApplication.js.map +1 -1
  6. package/lib/analyses/ConfigAnalyzer.js +1 -1
  7. package/lib/analyses/ConfigAnalyzer.js.map +1 -1
  8. package/lib/analyses/ControllerAnalyzer.js +30 -15
  9. package/lib/analyses/ControllerAnalyzer.js.map +1 -1
  10. package/lib/analyses/ExceptionAnalyzer.js +35 -6
  11. package/lib/analyses/ExceptionAnalyzer.js.map +1 -1
  12. package/lib/analyses/ImportAnalyzer.d.ts +1 -2
  13. package/lib/analyses/ImportAnalyzer.js +2 -2
  14. package/lib/analyses/ImportAnalyzer.js.map +1 -1
  15. package/lib/analyses/PathAnalyzer.d.ts +2 -4
  16. package/lib/analyses/PathAnalyzer.js +27 -11
  17. package/lib/analyses/PathAnalyzer.js.map +1 -1
  18. package/lib/analyses/ReflectAnalyzer.js +34 -22
  19. package/lib/analyses/ReflectAnalyzer.js.map +1 -1
  20. package/lib/analyses/SecurityAnalyzer.js +13 -8
  21. package/lib/analyses/SecurityAnalyzer.js.map +1 -1
  22. package/lib/executable/internal/NestiaConfigLoader.js +300 -220
  23. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  24. package/lib/executable/sdk.js +11 -11
  25. package/lib/generates/CloneGenerator.d.ts +6 -0
  26. package/lib/generates/CloneGenerator.js +62 -0
  27. package/lib/generates/CloneGenerator.js.map +1 -0
  28. package/lib/generates/E2eGenerator.d.ts +2 -1
  29. package/lib/generates/E2eGenerator.js +2 -2
  30. package/lib/generates/E2eGenerator.js.map +1 -1
  31. package/lib/generates/SdkGenerator.js +3 -11
  32. package/lib/generates/SdkGenerator.js.map +1 -1
  33. package/lib/generates/SwaggerGenerator.d.ts +2 -0
  34. package/lib/generates/SwaggerGenerator.js +119 -62
  35. package/lib/generates/SwaggerGenerator.js.map +1 -1
  36. package/lib/generates/internal/E2eFileProgrammer.d.ts +2 -1
  37. package/lib/generates/internal/E2eFileProgrammer.js +49 -53
  38. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  39. package/lib/generates/internal/FilePrinter.d.ts +10 -0
  40. package/lib/generates/internal/FilePrinter.js +46 -0
  41. package/lib/generates/internal/FilePrinter.js.map +1 -0
  42. package/lib/{utils → generates/internal}/ImportDictionary.d.ts +2 -1
  43. package/lib/{utils → generates/internal}/ImportDictionary.js +20 -14
  44. package/lib/generates/internal/ImportDictionary.js.map +1 -0
  45. package/lib/generates/internal/SdkAliasCollection.d.ts +12 -0
  46. package/lib/generates/internal/SdkAliasCollection.js +97 -0
  47. package/lib/generates/internal/SdkAliasCollection.js.map +1 -0
  48. package/lib/generates/internal/SdkCloneProgrammer.d.ts +12 -0
  49. package/lib/generates/internal/SdkCloneProgrammer.js +99 -0
  50. package/lib/generates/internal/SdkCloneProgrammer.js.map +1 -0
  51. package/lib/generates/internal/SdkFileProgrammer.d.ts +2 -1
  52. package/lib/generates/internal/SdkFileProgrammer.js +27 -28
  53. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  54. package/lib/generates/internal/SdkFunctionProgrammer.d.ts +7 -2
  55. package/lib/generates/internal/SdkFunctionProgrammer.js +115 -322
  56. package/lib/generates/internal/SdkFunctionProgrammer.js.map +1 -1
  57. package/lib/generates/internal/SdkImportWizard.d.ts +1 -1
  58. package/lib/generates/internal/SdkNamespaceProgrammer.d.ts +11 -0
  59. package/lib/generates/internal/SdkNamespaceProgrammer.js +180 -0
  60. package/lib/generates/internal/SdkNamespaceProgrammer.js.map +1 -0
  61. package/lib/generates/internal/SdkRouteProgrammer.d.ts +7 -0
  62. package/lib/generates/internal/SdkRouteProgrammer.js +55 -0
  63. package/lib/generates/internal/SdkRouteProgrammer.js.map +1 -0
  64. package/lib/generates/internal/SdkSimulationProgrammer.d.ts +8 -2
  65. package/lib/generates/internal/SdkSimulationProgrammer.js +103 -89
  66. package/lib/generates/internal/SdkSimulationProgrammer.js.map +1 -1
  67. package/lib/generates/internal/SdkTypeProgrammer.d.ts +9 -0
  68. package/lib/generates/internal/SdkTypeProgrammer.js +228 -0
  69. package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -0
  70. package/lib/generates/internal/SwaggerSchemaGenerator.d.ts +4 -4
  71. package/lib/generates/internal/SwaggerSchemaGenerator.js +30 -28
  72. package/lib/generates/internal/SwaggerSchemaGenerator.js.map +1 -1
  73. package/lib/structures/IController.d.ts +4 -2
  74. package/lib/structures/IRoute.d.ts +5 -4
  75. package/lib/structures/ISwaggerLazyProperty.d.ts +2 -2
  76. package/lib/structures/ISwaggerLazySchema.d.ts +2 -2
  77. package/lib/structures/ParamCategory.d.ts +1 -1
  78. package/lib/structures/TypeEntry.js +2 -2
  79. package/lib/structures/TypeEntry.js.map +1 -1
  80. package/lib/utils/StringUtil.d.ts +3 -0
  81. package/lib/utils/StringUtil.js +8 -0
  82. package/lib/utils/StringUtil.js.map +1 -0
  83. package/package.json +12 -16
  84. package/src/INestiaConfig.ts +30 -6
  85. package/src/NestiaSdkApplication.ts +255 -253
  86. package/src/analyses/AccessorAnalyzer.ts +60 -60
  87. package/src/analyses/ConfigAnalyzer.ts +147 -147
  88. package/src/analyses/ControllerAnalyzer.ts +42 -19
  89. package/src/analyses/ExceptionAnalyzer.ts +148 -115
  90. package/src/analyses/GenericAnalyzer.ts +51 -51
  91. package/src/analyses/ImportAnalyzer.ts +1 -2
  92. package/src/analyses/PathAnalyzer.ts +110 -98
  93. package/src/analyses/ReflectAnalyzer.ts +39 -35
  94. package/src/analyses/SecurityAnalyzer.ts +24 -20
  95. package/src/executable/internal/CommandParser.ts +15 -15
  96. package/src/executable/internal/NestiaConfigLoader.ts +67 -67
  97. package/src/executable/internal/NestiaSdkCommand.ts +60 -60
  98. package/src/executable/sdk.ts +73 -73
  99. package/src/generates/CloneGenerator.ts +62 -0
  100. package/src/generates/E2eGenerator.ts +66 -64
  101. package/src/generates/SdkGenerator.ts +84 -96
  102. package/src/generates/SwaggerGenerator.ts +145 -53
  103. package/src/generates/internal/E2eFileProgrammer.ts +182 -123
  104. package/src/generates/internal/FilePrinter.ts +53 -0
  105. package/src/{utils → generates/internal}/ImportDictionary.ts +35 -13
  106. package/src/generates/internal/SdkAliasCollection.ts +152 -0
  107. package/src/generates/internal/SdkCloneProgrammer.ts +155 -0
  108. package/src/generates/internal/SdkDistributionComposer.ts +91 -91
  109. package/src/generates/internal/SdkFileProgrammer.ts +115 -106
  110. package/src/generates/internal/SdkFunctionProgrammer.ts +298 -518
  111. package/src/generates/internal/SdkImportWizard.ts +55 -55
  112. package/src/generates/internal/SdkNamespaceProgrammer.ts +510 -0
  113. package/src/generates/internal/SdkRouteDirectory.ts +17 -17
  114. package/src/generates/internal/SdkRouteProgrammer.ts +83 -0
  115. package/src/generates/internal/SdkSimulationProgrammer.ts +365 -133
  116. package/src/generates/internal/SdkTypeProgrammer.ts +386 -0
  117. package/src/generates/internal/SwaggerSchemaGenerator.ts +437 -427
  118. package/src/generates/internal/SwaggerSchemaValidator.ts +198 -198
  119. package/src/index.ts +4 -4
  120. package/src/module.ts +2 -2
  121. package/src/structures/IController.ts +94 -95
  122. package/src/structures/IErrorReport.ts +6 -6
  123. package/src/structures/INestiaProject.ts +13 -13
  124. package/src/structures/INormalizedInput.ts +20 -20
  125. package/src/structures/IRoute.ts +53 -53
  126. package/src/structures/ISwaggerLazyProperty.ts +2 -2
  127. package/src/structures/ISwaggerLazySchema.ts +2 -2
  128. package/src/structures/ITypeTuple.ts +6 -6
  129. package/src/structures/MethodType.ts +5 -5
  130. package/src/structures/ParamCategory.ts +1 -1
  131. package/src/structures/TypeEntry.ts +1 -1
  132. package/src/utils/ArrayUtil.ts +26 -26
  133. package/src/utils/FileRetriever.ts +22 -22
  134. package/src/utils/MapUtil.ts +14 -14
  135. package/src/utils/PathUtil.ts +10 -10
  136. package/src/utils/SourceFinder.ts +66 -66
  137. package/src/utils/StringUtil.ts +6 -0
  138. package/src/utils/StripEnums.ts +5 -5
  139. package/assets/bundle/api/utils/NestiaSimulator.ts +0 -70
  140. package/lib/generates/internal/SdkDtoGenerator.d.ts +0 -9
  141. package/lib/generates/internal/SdkDtoGenerator.js +0 -294
  142. package/lib/generates/internal/SdkDtoGenerator.js.map +0 -1
  143. package/lib/generates/internal/SdkTypeDefiner.d.ts +0 -11
  144. package/lib/generates/internal/SdkTypeDefiner.js +0 -82
  145. package/lib/generates/internal/SdkTypeDefiner.js.map +0 -1
  146. package/lib/structures/ISwagger.d.ts +0 -72
  147. package/lib/structures/ISwagger.js +0 -3
  148. package/lib/structures/ISwagger.js.map +0 -1
  149. package/lib/structures/ISwaggerComponents.d.ts +0 -26
  150. package/lib/structures/ISwaggerComponents.js +0 -3
  151. package/lib/structures/ISwaggerComponents.js.map +0 -1
  152. package/lib/structures/ISwaggerInfo.d.ts +0 -71
  153. package/lib/structures/ISwaggerInfo.js +0 -3
  154. package/lib/structures/ISwaggerInfo.js.map +0 -1
  155. package/lib/structures/ISwaggerRoute.d.ts +0 -47
  156. package/lib/structures/ISwaggerRoute.js +0 -3
  157. package/lib/structures/ISwaggerRoute.js.map +0 -1
  158. package/lib/structures/ISwaggerSecurityScheme.d.ts +0 -56
  159. package/lib/structures/ISwaggerSecurityScheme.js +0 -3
  160. package/lib/structures/ISwaggerSecurityScheme.js.map +0 -1
  161. package/lib/utils/ImportDictionary.js.map +0 -1
  162. package/src/generates/internal/SdkDtoGenerator.ts +0 -424
  163. package/src/generates/internal/SdkTypeDefiner.ts +0 -119
  164. package/src/structures/ISwagger.ts +0 -91
  165. package/src/structures/ISwaggerComponents.ts +0 -29
  166. package/src/structures/ISwaggerInfo.ts +0 -80
  167. package/src/structures/ISwaggerRoute.ts +0 -51
  168. package/src/structures/ISwaggerSecurityScheme.ts +0 -65
@@ -1,106 +1,115 @@
1
- import fs from "fs";
2
-
3
- import { INestiaConfig } from "../../INestiaConfig";
4
- import { IRoute } from "../../structures/IRoute";
5
- import { ImportDictionary } from "../../utils/ImportDictionary";
6
- import { MapUtil } from "../../utils/MapUtil";
7
- import { SdkFunctionProgrammer } from "./SdkFunctionProgrammer";
8
- import { SdkRouteDirectory } from "./SdkRouteDirectory";
9
-
10
- export namespace SdkFileProgrammer {
11
- /* ---------------------------------------------------------
12
- CONSTRUCTOR
13
- --------------------------------------------------------- */
14
- export const generate =
15
- (config: INestiaConfig) =>
16
- async (routeList: IRoute[]): Promise<void> => {
17
- // CONSTRUCT FOLDER TREE
18
- const root: SdkRouteDirectory = new SdkRouteDirectory(null, "functional");
19
- for (const route of routeList) emplace(root)(route);
20
-
21
- // ITERATE FILES
22
- await iterate(config)(root)(config.output + "/functional");
23
- };
24
-
25
- const emplace =
26
- (directory: SdkRouteDirectory) =>
27
- (route: IRoute): void => {
28
- // OPEN DIRECTORIES
29
- for (const key of route.accessors.slice(0, -1)) {
30
- directory = MapUtil.take(
31
- directory.children,
32
- key,
33
- () => new SdkRouteDirectory(directory, key),
34
- );
35
- }
36
-
37
- // ADD ROUTE
38
- directory.routes.push(route);
39
- };
40
-
41
- /* ---------------------------------------------------------
42
- FILE ITERATOR
43
- --------------------------------------------------------- */
44
- const iterate =
45
- (config: INestiaConfig) =>
46
- (directory: SdkRouteDirectory) =>
47
- async (outDir: string): Promise<void> => {
48
- // CREATE A NEW DIRECTORY
49
- try {
50
- await fs.promises.mkdir(outDir);
51
- } catch {}
52
-
53
- // ITERATE CHILDREN
54
- const content: string[] = [];
55
- for (const [key, value] of directory.children) {
56
- await iterate(config)(value)(`${outDir}/${key}`);
57
- content.push(`export * as ${key} from "./${key}";`);
58
- }
59
- if (content.length && directory.routes.length) content.push("");
60
-
61
- // ITERATE ROUTES
62
- const importer: ImportDictionary = new ImportDictionary(
63
- `${outDir}/index.ts`,
64
- );
65
- if (
66
- config.simulate === true &&
67
- directory.routes.some((r) => !!r.parameters.length)
68
- )
69
- importer.internal({
70
- file: `${config.output}/utils/NestiaSimulator.ts`,
71
- instance: "NestiaSimulator",
72
- type: false,
73
- });
74
- directory.routes.forEach((route, i) => {
75
- if (config.clone !== true)
76
- for (const tuple of route.imports)
77
- for (const instance of tuple[1])
78
- importer.internal({
79
- file: tuple[0],
80
- instance,
81
- type: true,
82
- });
83
-
84
- content.push(SdkFunctionProgrammer.generate(config)(importer)(route));
85
- if (i !== directory.routes.length - 1) content.push("");
86
- });
87
-
88
- // FINALIZE THE CONTENT
89
- if (directory.routes.length !== 0)
90
- content.push(
91
- importer.toScript(outDir),
92
- "",
93
- ...content.splice(0, content.length),
94
- );
95
-
96
- const script: string =
97
- "/**\n" +
98
- " * @packageDocumentation\n" +
99
- ` * @module ${directory.module}\n` +
100
- " * @nestia Generated by Nestia - https://github.com/samchon/nestia \n" +
101
- " */\n" +
102
- "//================================================================\n" +
103
- content.join("\n");
104
- await fs.promises.writeFile(importer.file, script, "utf8");
105
- };
106
- }
1
+ import fs from "fs";
2
+ import ts from "typescript";
3
+
4
+ import { INestiaConfig } from "../../INestiaConfig";
5
+ import { IRoute } from "../../structures/IRoute";
6
+ import { MapUtil } from "../../utils/MapUtil";
7
+ import { FilePrinter } from "./FilePrinter";
8
+ import { ImportDictionary } from "./ImportDictionary";
9
+ import { SdkRouteDirectory } from "./SdkRouteDirectory";
10
+ import { SdkRouteProgrammer } from "./SdkRouteProgrammer";
11
+
12
+ export namespace SdkFileProgrammer {
13
+ /* ---------------------------------------------------------
14
+ CONSTRUCTOR
15
+ --------------------------------------------------------- */
16
+ export const generate =
17
+ (checker: ts.TypeChecker) =>
18
+ (config: INestiaConfig) =>
19
+ async (routeList: IRoute[]): Promise<void> => {
20
+ // CONSTRUCT FOLDER TREE
21
+ const root: SdkRouteDirectory = new SdkRouteDirectory(null, "functional");
22
+ for (const route of routeList) emplace(root)(route);
23
+
24
+ // ITERATE FILES
25
+ await iterate(checker)(config)(root)(config.output + "/functional");
26
+ };
27
+
28
+ const emplace =
29
+ (directory: SdkRouteDirectory) =>
30
+ (route: IRoute): void => {
31
+ // OPEN DIRECTORIES
32
+ for (const key of route.accessors.slice(0, -1)) {
33
+ directory = MapUtil.take(
34
+ directory.children,
35
+ key,
36
+ () => new SdkRouteDirectory(directory, key),
37
+ );
38
+ }
39
+
40
+ // ADD ROUTE
41
+ directory.routes.push(route);
42
+ };
43
+
44
+ /* ---------------------------------------------------------
45
+ FILE ITERATOR
46
+ --------------------------------------------------------- */
47
+ const iterate =
48
+ (checker: ts.TypeChecker) =>
49
+ (config: INestiaConfig) =>
50
+ (directory: SdkRouteDirectory) =>
51
+ async (outDir: string): Promise<void> => {
52
+ // CREATE A NEW DIRECTORY
53
+ try {
54
+ await fs.promises.mkdir(outDir);
55
+ } catch {}
56
+
57
+ // ITERATE CHILDREN
58
+ const statements: ts.Statement[] = [];
59
+ for (const [key, value] of directory.children) {
60
+ await iterate(checker)(config)(value)(`${outDir}/${key}`);
61
+ statements.push(
62
+ ts.factory.createExportDeclaration(
63
+ undefined,
64
+ false,
65
+ ts.factory.createNamespaceExport(ts.factory.createIdentifier(key)),
66
+ ts.factory.createStringLiteral(`./${key}`),
67
+ undefined,
68
+ ),
69
+ );
70
+ }
71
+ if (statements.length && directory.routes.length)
72
+ statements.push(FilePrinter.enter());
73
+
74
+ // ITERATE ROUTES
75
+ const importer: ImportDictionary = new ImportDictionary(
76
+ `${outDir}/index.ts`,
77
+ );
78
+ directory.routes.forEach((route, i) => {
79
+ if (config.clone !== true)
80
+ for (const tuple of route.imports)
81
+ for (const instance of tuple[1])
82
+ importer.internal({
83
+ file: tuple[0],
84
+ instance,
85
+ type: true,
86
+ });
87
+ statements.push(
88
+ ...SdkRouteProgrammer.generate(checker)(config)(importer)(route),
89
+ );
90
+ if (i !== directory.routes.length - 1)
91
+ statements.push(FilePrinter.enter());
92
+ });
93
+
94
+ // FINALIZE THE CONTENT
95
+ if (directory.routes.length !== 0)
96
+ statements.push(
97
+ ...importer.toStatements(outDir),
98
+ ...(!importer.empty() && statements.length
99
+ ? [FilePrinter.enter()]
100
+ : []),
101
+ ...statements.splice(0, statements.length),
102
+ );
103
+ await FilePrinter.write({
104
+ location: importer.file,
105
+ statements,
106
+ top:
107
+ "/**\n" +
108
+ " * @packageDocumentation\n" +
109
+ ` * @module ${directory.module}\n` +
110
+ " * @nestia Generated by Nestia - https://github.com/samchon/nestia \n" +
111
+ " */\n" +
112
+ "//================================================================\n",
113
+ });
114
+ };
115
+ }