@nestia/sdk 3.0.0-dev.20231209 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +1 @@
1
- {"version":3,"file":"NestiaConfigLoader.js","sourceRoot":"","sources":["../../../src/executable/internal/NestiaConfigLoader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,qCAAmC;AACnC,uCAAuC;AACvC,4DAA4B;AAC5B,kDAA0B;AAI1B,IAAiB,kBAAkB,CAyDlC;AAzDD,WAAiB,kBAAkB;IACpB,kCAAe,GAAG,CAC7B,OAAe,EACc,EAAE;QAC/B,MAAM,cAAc,GAAG,oBAAE,CAAC,cAAc,CACtC,OAAO,CAAC,GAAG,EAAE,EACb,oBAAE,CAAC,GAAG,CAAC,UAAU,EACjB,OAAO,CACR,CAAC;QACF,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,SAAS,CAAC,CAAC;QAE1E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,sBAAW,EAAC,cAAc,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAE,CAAC,yBAAyB,CAC7C,cAAc,EACd,cAAc,CACf,CAAC;QACF,MAAM,iBAAiB,GAAG,oBAAE,CAAC,0BAA0B,CACrD,MAAM,EACN,oBAAE,CAAC,GAAG,EACN,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAC7B,CAAC;QAEF,MAAM,KACJ,iBAAiB,CAAC,GAAG,CAAC,eAAe,EADjC,EAAE,gBAAgB,OACe,EADV,MAAM,cAA7B,oBAA+B,CACE,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAA,CAAC;IAEW,yBAAM,GAAG,CACpB,IAAY,EACZ,OAA2B,EACH,EAAE;QAC1B,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK;YAC7C,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,CAAC,CAAC;QAEpD,IAAA,kBAAQ,EAAC;YACP,IAAI,EAAE,KAAK;YACX,eAAe,EAAE,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAgD,yBAC1D,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uCACnB,CAAC;QACF,MAAM,MAAM,GACV,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;YAC5D,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,MAAM,CAAC;QAEb,IAAI,CAAC;YACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAAO,eAAK,CAAC,MAAM;sCAAZ,eAAK,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAC,MAAM,EAAE;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb;;;eAAmC,GAAG;gBACpC,GAAG,CAAC,OAAO,GAAG,YAAY,IAAI,SAAS,CAAC;YAC1C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,EAzDgB,kBAAkB,kCAAlB,kBAAkB,QAyDlC"}
1
+ {"version":3,"file":"NestiaConfigLoader.js","sourceRoot":"","sources":["../../../src/executable/internal/NestiaConfigLoader.ts"],"names":[],"mappings":"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"}
@@ -40,17 +40,17 @@ const child_process_1 = __importDefault(require("child_process"));
40
40
  const fs_1 = __importDefault(require("fs"));
41
41
  const process_1 = __importDefault(require("process"));
42
42
  const CommandParser_1 = require("./internal/CommandParser");
43
- const USAGE = `Wrong command has been detected. Use like below:
44
-
45
- npx @nestia/sdk [command] [options?]
46
-
47
- 1. npx @nestia/sdk dependencies --manager (npm|pnpm|yarn)
48
- - npx @nestia/sdk dependencies
49
- - npx @nestia/sdk dependencies --manager pnpm
50
- 2. npx @nestia/sdk init
51
- 3. npx @nestia/sdk sdk --config? [config file]
52
- 4. npx @nestia/sdk swagger --config? [config file]
53
- 5. npx @nestia/sdk e2e --config? [config file]
43
+ const USAGE = `Wrong command has been detected. Use like below:
44
+
45
+ npx @nestia/sdk [command] [options?]
46
+
47
+ 1. npx @nestia/sdk dependencies --manager (npm|pnpm|yarn)
48
+ - npx @nestia/sdk dependencies
49
+ - npx @nestia/sdk dependencies --manager pnpm
50
+ 2. npx @nestia/sdk init
51
+ 3. npx @nestia/sdk sdk --config? [config file]
52
+ 4. npx @nestia/sdk swagger --config? [config file]
53
+ 5. npx @nestia/sdk e2e --config? [config file]
54
54
  `;
55
55
  function halt(desc) {
56
56
  console.error(desc);
@@ -0,0 +1,6 @@
1
+ import ts from "typescript";
2
+ import { INestiaConfig } from "../INestiaConfig";
3
+ import { IRoute } from "../structures/IRoute";
4
+ export declare namespace CloneGenerator {
5
+ const write: (checker: ts.TypeChecker) => (config: INestiaConfig) => (routes: IRoute[]) => Promise<void>;
6
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CloneGenerator = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const typescript_1 = __importDefault(require("typescript"));
18
+ const FilePrinter_1 = require("./internal/FilePrinter");
19
+ const ImportDictionary_1 = require("./internal/ImportDictionary");
20
+ const SdkCloneProgrammer_1 = require("./internal/SdkCloneProgrammer");
21
+ var CloneGenerator;
22
+ (function (CloneGenerator) {
23
+ CloneGenerator.write = (checker) => (config) => (routes) => __awaiter(this, void 0, void 0, function* () {
24
+ const dict = SdkCloneProgrammer_1.SdkCloneProgrammer.write(checker)(config)(routes);
25
+ if (dict.size === 0)
26
+ return;
27
+ try {
28
+ yield fs_1.default.promises.mkdir(`${config.output}/structures`);
29
+ }
30
+ catch (_a) { }
31
+ for (const [key, value] of dict)
32
+ yield writeDtoFile(config)(key, value);
33
+ });
34
+ const writeDtoFile = (config) => (key, value) => __awaiter(this, void 0, void 0, function* () {
35
+ const location = `${config.output}/structures/${key}.ts`;
36
+ const importer = new ImportDictionary_1.ImportDictionary(location);
37
+ const statements = iterate(importer)(value);
38
+ if (statements.length === 0)
39
+ return;
40
+ yield FilePrinter_1.FilePrinter.write({
41
+ location,
42
+ statements: [
43
+ ...importer.toStatements(`${config.output}/structures`),
44
+ ...(importer.empty() ? [] : [FilePrinter_1.FilePrinter.enter()]),
45
+ ...statements,
46
+ ],
47
+ });
48
+ });
49
+ const iterate = (importer) => (modulo) => {
50
+ const output = [];
51
+ if (modulo.programmer !== null)
52
+ output.push(modulo.programmer(importer));
53
+ if (modulo.children.size) {
54
+ const internal = [];
55
+ for (const child of modulo.children.values())
56
+ internal.push(...iterate(importer)(child));
57
+ output.push(typescript_1.default.factory.createModuleDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(modulo.name), typescript_1.default.factory.createModuleBlock(internal), typescript_1.default.NodeFlags.Namespace));
58
+ }
59
+ return output;
60
+ };
61
+ })(CloneGenerator || (exports.CloneGenerator = CloneGenerator = {}));
62
+ //# sourceMappingURL=CloneGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloneGenerator.js","sourceRoot":"","sources":["../../src/generates/CloneGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,4DAA4B;AAI5B,wDAAqD;AACrD,kEAA+D;AAC/D,sEAAmE;AAEnE,IAAiB,cAAc,CAoD9B;AApDD,WAAiB,cAAc;IAChB,oBAAK,GAChB,CAAC,OAAuB,EAAE,EAAE,CAC5B,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,MAAgB,EAAiB,EAAE;QACxC,MAAM,IAAI,GACR,uCAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC5B,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QACzD,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;QACV,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI;YAAE,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC,CAAA,CAAC;IAEJ,MAAM,YAAY,GAChB,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,GAAW,EAAE,KAAiC,EAAiB,EAAE;QACtE,MAAM,QAAQ,GAAW,GAAG,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;QACjE,MAAM,QAAQ,GAAqB,IAAI,mCAAgB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAmB,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,yBAAW,CAAC,KAAK,CAAC;YACtB,QAAQ;YACR,UAAU,EAAE;gBACV,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC;gBACvD,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,GAAG,UAAU;aACd;SACF,CAAC,CAAC;IACL,CAAC,CAAA,CAAC;IAEJ,MAAM,OAAO,GACX,CAAC,QAA0B,EAAE,EAAE,CAC/B,CAAC,MAAkC,EAAkB,EAAE;QACrD,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAmB,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CACT,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EACxC,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EACtC,oBAAE,CAAC,SAAS,CAAC,SAAS,CACvB,CACF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACN,CAAC,EApDgB,cAAc,8BAAd,cAAc,QAoD9B"}
@@ -1,5 +1,6 @@
1
+ import ts from "typescript";
1
2
  import { INestiaConfig } from "../INestiaConfig";
2
3
  import { IRoute } from "../structures/IRoute";
3
4
  export declare namespace E2eGenerator {
4
- const generate: (config: INestiaConfig) => (routeList: IRoute[]) => Promise<void>;
5
+ const generate: (checker: ts.TypeChecker) => (config: INestiaConfig) => (routeList: IRoute[]) => Promise<void>;
5
6
  }
@@ -19,7 +19,7 @@ const ConfigAnalyzer_1 = require("../analyses/ConfigAnalyzer");
19
19
  const E2eFileProgrammer_1 = require("./internal/E2eFileProgrammer");
20
20
  var E2eGenerator;
21
21
  (function (E2eGenerator) {
22
- E2eGenerator.generate = (config) => (routeList) => __awaiter(this, void 0, void 0, function* () {
22
+ E2eGenerator.generate = (checker) => (config) => (routeList) => __awaiter(this, void 0, void 0, function* () {
23
23
  console.log("Generating E2E Test Functions");
24
24
  // PREPARE DIRECTORIES
25
25
  const output = path_1.default.resolve(config.e2e);
@@ -31,7 +31,7 @@ var E2eGenerator;
31
31
  yield index(config)(path_1.default.join(config.e2e, "index.ts"));
32
32
  // GENERATE EACH TEST FILES
33
33
  for (const route of routeList)
34
- yield E2eFileProgrammer_1.E2eFileProgrammer.generate(config)({
34
+ yield E2eFileProgrammer_1.E2eFileProgrammer.generate(checker)(config)({
35
35
  api: path_1.default.resolve(config.output),
36
36
  current: path_1.default.join(output, "features", "api", "automated"),
37
37
  })(route);
@@ -1 +1 @@
1
- {"version":3,"file":"E2eGenerator.js","sourceRoot":"","sources":["../../src/generates/E2eGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAGxB,+DAA4D;AAE5D,oEAAiE;AAEjE,IAAiB,YAAY,CAiD5B;AAjDD,WAAiB,YAAY;IACd,qBAAQ,GACnB,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,SAAmB,EAAiB,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,sBAAsB;QACtB,MAAM,MAAM,GAAW,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAI,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAE/D,2BAA2B;QAC3B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAExD,2BAA2B;QAC3B,KAAK,MAAM,KAAK,IAAI,SAAS;YAC3B,MAAM,qCAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACvC,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAO,CAAC;gBACjC,OAAO,EAAE,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC;aAC3D,CAAC,CAAC,KAAK,CAAC,CAAC;IACd,CAAC,CAAA,CAAC;IAEJ,MAAM,KAAK,GACT,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,MAAc,EAAiB,EAAE;QACtC,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAElC,MAAM,QAAQ,GAAW,cAAI,CAAC,IAAI,CAChC,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,UAAU,CACX,CAAC;QACF,MAAM,OAAO,GAAW,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAErE,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,MAAM,EACN,OAAO,CAAC,OAAO,CACb,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,MAAM,+BAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CACnD,EACD,MAAM,CACP,CAAC;IACJ,CAAC,CAAA,CAAC;AACN,CAAC,EAjDgB,YAAY,4BAAZ,YAAY,QAiD5B;AAED,MAAM,KAAK,GAAG,CAAO,QAAgB,EAAiB,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,WAAM,CAAC,CAAA,CAAC;AACZ,CAAC,CAAA,CAAC"}
1
+ {"version":3,"file":"E2eGenerator.js","sourceRoot":"","sources":["../../src/generates/E2eGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAIxB,+DAA4D;AAE5D,oEAAiE;AAEjE,IAAiB,YAAY,CAkD5B;AAlDD,WAAiB,YAAY;IACd,qBAAQ,GACnB,CAAC,OAAuB,EAAE,EAAE,CAC5B,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,SAAmB,EAAiB,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,sBAAsB;QACtB,MAAM,MAAM,GAAW,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAI,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAE/D,2BAA2B;QAC3B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAExD,2BAA2B;QAC3B,KAAK,MAAM,KAAK,IAAI,SAAS;YAC3B,MAAM,qCAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChD,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAO,CAAC;gBACjC,OAAO,EAAE,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC;aAC3D,CAAC,CAAC,KAAK,CAAC,CAAC;IACd,CAAC,CAAA,CAAC;IAEJ,MAAM,KAAK,GACT,CAAC,MAAqB,EAAE,EAAE,CAC1B,CAAO,MAAc,EAAiB,EAAE;QACtC,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAElC,MAAM,QAAQ,GAAW,cAAI,CAAC,IAAI,CAChC,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,UAAU,CACX,CAAC;QACF,MAAM,OAAO,GAAW,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAErE,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,MAAM,EACN,OAAO,CAAC,OAAO,CACb,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,MAAM,+BAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CACnD,EACD,MAAM,CACP,CAAC;IACJ,CAAC,CAAA,CAAC;AACN,CAAC,EAlDgB,YAAY,4BAAZ,YAAY,QAkD5B;AAED,MAAM,KAAK,GAAG,CAAO,QAAgB,EAAiB,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,WAAM,CAAC,CAAA,CAAC;AACZ,CAAC,CAAA,CAAC"}
@@ -15,8 +15,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SdkGenerator = void 0;
16
16
  const fs_1 = __importDefault(require("fs"));
17
17
  const path_1 = __importDefault(require("path"));
18
+ const CloneGenerator_1 = require("./CloneGenerator");
18
19
  const SdkDistributionComposer_1 = require("./internal/SdkDistributionComposer");
19
- const SdkDtoGenerator_1 = require("./internal/SdkDtoGenerator");
20
20
  const SdkFileProgrammer_1 = require("./internal/SdkFileProgrammer");
21
21
  var SdkGenerator;
22
22
  (function (SdkGenerator) {
@@ -47,19 +47,11 @@ var SdkGenerator;
47
47
  }
48
48
  }
49
49
  }
50
- if (config.simulate === true &&
51
- routes.some((r) => !!r.parameters.length)) {
52
- try {
53
- yield fs_1.default.promises.mkdir(`${config.output}/utils`);
54
- }
55
- catch (_b) { }
56
- yield fs_1.default.promises.copyFile(`${SdkGenerator.BUNDLE_PATH}/utils/NestiaSimulator.ts`, `${config.output}/utils/NestiaSimulator.ts`);
57
- }
58
50
  // STRUCTURES
59
51
  if (config.clone)
60
- yield SdkDtoGenerator_1.SdkDtoGenerator.generate(checker)(config)(routes);
52
+ yield CloneGenerator_1.CloneGenerator.write(checker)(config)(routes);
61
53
  // FUNCTIONAL
62
- yield SdkFileProgrammer_1.SdkFileProgrammer.generate(config)(routes);
54
+ yield SdkFileProgrammer_1.SdkFileProgrammer.generate(checker)(config)(routes);
63
55
  // DISTRIBUTION
64
56
  if (config.distribute !== undefined)
65
57
  yield SdkDistributionComposer_1.SdkDistributionComposer.compose(config);
@@ -1 +1 @@
1
- {"version":3,"file":"SdkGenerator.js","sourceRoot":"","sources":["../../src/generates/SdkGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SdkGenerator.js","sourceRoot":"","sources":["../../src/generates/SdkGenerator.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
  import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
3
  import { INestiaConfig } from "../INestiaConfig";
4
4
  import { IRoute } from "../structures/IRoute";
5
+ import { OpenApi } from "@samchon/openapi";
5
6
  import { ISwaggerError } from "../structures/ISwaggerError";
6
7
  import { ISwaggerLazyProperty } from "../structures/ISwaggerLazyProperty";
7
8
  import { ISwaggerLazySchema } from "../structures/ISwaggerLazySchema";
@@ -13,6 +14,7 @@ export declare namespace SwaggerGenerator {
13
14
  lazySchemas: Array<ISwaggerLazySchema>;
14
15
  lazyProperties: Array<ISwaggerLazyProperty>;
15
16
  errors: ISwaggerError[];
17
+ swagger: OpenApi.IDocument;
16
18
  }
17
19
  const generate: (checker: ts.TypeChecker) => (config: INestiaConfig.ISwaggerConfig) => (routeList: IRoute[]) => Promise<void>;
18
20
  }
@@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SwaggerGenerator = void 0;
16
16
  const fs_1 = __importDefault(require("fs"));
17
17
  const path_1 = __importDefault(require("path"));
18
- const Singleton_1 = require("tstl/thread/Singleton");
18
+ const tstl_1 = require("tstl");
19
19
  const typia_1 = __importDefault(require("typia"));
20
20
  const MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
21
21
  const JsonApplicationProgrammer_1 = require("typia/lib/programmers/json/JsonApplicationProgrammer");
@@ -25,7 +25,7 @@ const SwaggerSchemaGenerator_1 = require("./internal/SwaggerSchemaGenerator");
25
25
  var SwaggerGenerator;
26
26
  (function (SwaggerGenerator) {
27
27
  SwaggerGenerator.generate = (checker) => (config) => (routeList) => __awaiter(this, void 0, void 0, function* () {
28
- var _a, _b, _c, _d;
28
+ var _a, _b, _c, _d, _e, _f;
29
29
  console.log("Generating Swagger Documents");
30
30
  // VALIDATE SECURITY
31
31
  validate_security(config)(routeList);
@@ -36,7 +36,7 @@ var SwaggerGenerator;
36
36
  try {
37
37
  yield fs_1.default.promises.mkdir(directory);
38
38
  }
39
- catch (_e) { }
39
+ catch (_g) { }
40
40
  if (fs_1.default.existsSync(directory) === false)
41
41
  throw new Error(`Error on NestiaApplication.swagger(): failed to create output directory: ${directory}`);
42
42
  const location = !!parsed.ext
@@ -62,31 +62,76 @@ var SwaggerGenerator;
62
62
  lazySchemas,
63
63
  lazyProperties,
64
64
  errors,
65
+ swagger,
65
66
  })(route);
66
67
  }
67
68
  swagger.paths = {};
68
69
  for (const [path, routes] of pathDict)
69
70
  swagger.paths[path] = routes;
70
71
  // FILL JSON-SCHEMAS
71
- const application = JsonApplicationProgrammer_1.JsonApplicationProgrammer.write({
72
- purpose: "swagger",
73
- })(lazySchemas.map(({ metadata }) => metadata));
72
+ const application = JsonApplicationProgrammer_1.JsonApplicationProgrammer.write("3.1")(lazySchemas.map(({ metadata }) => metadata));
74
73
  swagger.components = Object.assign(Object.assign({}, ((_a = swagger.components) !== null && _a !== void 0 ? _a : {})), ((_b = application.components) !== null && _b !== void 0 ? _b : {}));
75
74
  lazySchemas.forEach(({ schema }, index) => {
76
75
  Object.assign(schema, application.schemas[index]);
77
76
  });
78
77
  for (const p of lazyProperties)
79
- Object.assign(p.schema, (_d = (_c = application.components.schemas) === null || _c === void 0 ? void 0 : _c[p.object]) === null || _d === void 0 ? void 0 : _d.properties[p.property]);
78
+ Object.assign(p.schema, (_f = (_e = (_d = (_c = application.components.schemas) === null || _c === void 0 ? void 0 : _c[p.object]) === null || _d === void 0 ? void 0 : _d.properties) === null || _e === void 0 ? void 0 : _e[p.property]) !== null && _f !== void 0 ? _f : {});
80
79
  // CONFIGURE SECURITY
81
80
  if (config.security)
82
81
  fill_security(config.security, swagger);
83
82
  // REPORT ERRORS
84
83
  if (errors.length) {
85
84
  for (const e of errors)
86
- console.error(`${path_1.default.relative(e.route.location, process.cwd())}:${e.route.symbol.class}.${e.route.symbol.function}:${e.from} - error TS(@nestia/sdk): invalid type detected.\n\n` +
85
+ console.error(`${path_1.default.relative(e.route.location, process.cwd())}:${e.route.target.class.name}.${e.route.target.function.name}:${e.from} - error TS(@nestia/sdk): invalid type detected.\n\n` +
87
86
  e.messages.map((m) => ` - ${m}`).join("\n"), "\n\n");
88
87
  throw new TypeError("Invalid type detected");
89
88
  }
89
+ // SWAGGER CUSTOMIZER
90
+ const customizer = {
91
+ at: new tstl_1.Singleton(() => {
92
+ const functor = new Map();
93
+ for (const route of routeList) {
94
+ const method = route.method.toLowerCase();
95
+ const path = get_path(route.path, route.parameters);
96
+ functor.set(route.target.function, {
97
+ method,
98
+ path,
99
+ route: swagger.paths[path][method],
100
+ });
101
+ }
102
+ return functor;
103
+ }),
104
+ get: new tstl_1.Singleton(() => (key) => {
105
+ var _a, _b;
106
+ const method = key.method.toLowerCase();
107
+ const path = "/" +
108
+ key.path
109
+ .split("/")
110
+ .filter((str) => !!str.length)
111
+ .map((str) => str.startsWith(":") ? `{${str.substring(1)}}` : str)
112
+ .join("/");
113
+ return (_b = (_a = swagger.paths) === null || _a === void 0 ? void 0 : _a[path]) === null || _b === void 0 ? void 0 : _b[method];
114
+ }),
115
+ };
116
+ for (const route of routeList) {
117
+ if (false ===
118
+ Reflect.hasMetadata("nestia/SwaggerCustomizer", route.controller.prototype, route.target.function.name))
119
+ continue;
120
+ const path = get_path(route.path, route.parameters);
121
+ const method = route.method.toLowerCase();
122
+ const target = swagger.paths[path][method];
123
+ const closure = Reflect.getMetadata("nestia/SwaggerCustomizer", route.controller.prototype, route.target.function.name);
124
+ const array = Array.isArray(closure) ? closure : [closure];
125
+ for (const fn of array)
126
+ fn({
127
+ route: target,
128
+ method,
129
+ path,
130
+ swagger,
131
+ at: (func) => customizer.at.get().get(func),
132
+ get: (accessor) => customizer.get.get()(accessor),
133
+ });
134
+ }
90
135
  // DO GENERATE
91
136
  yield fs_1.default.promises.writeFile(location, !config.beautify
92
137
  ? JSON.stringify(swagger)
@@ -123,7 +168,7 @@ var SwaggerGenerator;
123
168
  for (const route of routeList)
124
169
  for (const record of route.security)
125
170
  for (const [key, scopes] of Object.entries(record))
126
- validate((str) => violations.push(` - ${str} (${route.symbol} at "${route.location}")`))(key, scopes);
171
+ validate((str) => violations.push(` - ${str} (${route.target.class.name}.${route.target.function.name}() at "${route.location}")`))(key, scopes);
127
172
  if (violations.length)
128
173
  throw new Error(`Error on NestiaApplication.swagger(): invalid security specification. Check your "nestia.config.ts" file's "swagger.security" property, or each controller methods.\n` +
129
174
  `\n` +
@@ -134,17 +179,17 @@ var SwaggerGenerator;
134
179
  INITIALIZERS
135
180
  --------------------------------------------------------- */
136
181
  const initialize = (config) => __awaiter(this, void 0, void 0, function* () {
137
- var _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
138
- const pack = new Singleton_1.Singleton(() => __awaiter(this, void 0, void 0, function* () {
182
+ var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
183
+ const pack = new tstl_1.Singleton(() => __awaiter(this, void 0, void 0, function* () {
139
184
  const location = yield FileRetriever_1.FileRetriever.file("package.json")(process.cwd());
140
185
  if (location === null)
141
186
  return null;
142
187
  try {
143
188
  const content = yield fs_1.default.promises.readFile(location, "utf8");
144
- const data = (input => { const assert = input => {
189
+ const data = ((input, errorFactory) => { const assert = (input, errorFactory) => {
145
190
  const __is = input => {
146
191
  const $io0 = input => (undefined === input.name || "string" === typeof input.name) && (undefined === input.version || "string" === typeof input.version) && (undefined === input.description || "string" === typeof input.description) && (null !== input.license && (undefined === input.license || "string" === typeof input.license || "object" === typeof input.license && null !== input.license && $io1(input.license)));
147
- const $io1 = input => "string" === typeof input.type && ("string" === typeof input.url && /^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test(input.url));
192
+ const $io1 = input => "string" === typeof input.type && ("string" === typeof input.url && (/\/|:/.test(input.url) && /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test(input.url)));
148
193
  return "object" === typeof input && null !== input && false === Array.isArray(input) && $io0(input);
149
194
  };
150
195
  if (false === __is(input))
@@ -154,52 +199,52 @@ var SwaggerGenerator;
154
199
  path: _path + ".name",
155
200
  expected: "(string | undefined)",
156
201
  value: input.name
157
- })) && (undefined === input.version || "string" === typeof input.version || $guard(_exceptionable, {
202
+ }, errorFactory)) && (undefined === input.version || "string" === typeof input.version || $guard(_exceptionable, {
158
203
  path: _path + ".version",
159
204
  expected: "(string | undefined)",
160
205
  value: input.version
161
- })) && (undefined === input.description || "string" === typeof input.description || $guard(_exceptionable, {
206
+ }, errorFactory)) && (undefined === input.description || "string" === typeof input.description || $guard(_exceptionable, {
162
207
  path: _path + ".description",
163
208
  expected: "(string | undefined)",
164
209
  value: input.description
165
- })) && ((null !== input.license || $guard(_exceptionable, {
210
+ }, errorFactory)) && ((null !== input.license || $guard(_exceptionable, {
166
211
  path: _path + ".license",
167
212
  expected: "(__type.o1 | string | undefined)",
168
213
  value: input.license
169
- })) && (undefined === input.license || "string" === typeof input.license || ("object" === typeof input.license && null !== input.license || $guard(_exceptionable, {
214
+ }, errorFactory)) && (undefined === input.license || "string" === typeof input.license || ("object" === typeof input.license && null !== input.license || $guard(_exceptionable, {
170
215
  path: _path + ".license",
171
216
  expected: "(__type.o1 | string | undefined)",
172
217
  value: input.license
173
- })) && $ao1(input.license, _path + ".license", true && _exceptionable) || $guard(_exceptionable, {
218
+ }, errorFactory)) && $ao1(input.license, _path + ".license", true && _exceptionable) || $guard(_exceptionable, {
174
219
  path: _path + ".license",
175
220
  expected: "(__type.o1 | string | undefined)",
176
221
  value: input.license
177
- })));
222
+ }, errorFactory)));
178
223
  const $ao1 = (input, _path, _exceptionable = true) => ("string" === typeof input.type || $guard(_exceptionable, {
179
224
  path: _path + ".type",
180
225
  expected: "string",
181
226
  value: input.type
182
- })) && ("string" === typeof input.url && (/^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test(input.url) || $guard(_exceptionable, {
227
+ }, errorFactory)) && ("string" === typeof input.url && (/\/|:/.test(input.url) && /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test(input.url) || $guard(_exceptionable, {
183
228
  path: _path + ".url",
184
- expected: "string & Format<\"url\">",
229
+ expected: "string & Format<\"uri\">",
185
230
  value: input.url
186
- })) || $guard(_exceptionable, {
231
+ }, errorFactory)) || $guard(_exceptionable, {
187
232
  path: _path + ".url",
188
- expected: "(string & Format<\"url\">)",
233
+ expected: "(string & Format<\"uri\">)",
189
234
  value: input.url
190
- }));
235
+ }, errorFactory));
191
236
  return ("object" === typeof input && null !== input && false === Array.isArray(input) || $guard(true, {
192
237
  path: _path + "",
193
238
  expected: "__type",
194
239
  value: input
195
- })) && $ao0(input, _path + "", true) || $guard(true, {
240
+ }, errorFactory)) && $ao0(input, _path + "", true) || $guard(true, {
196
241
  path: _path + "",
197
242
  expected: "__type",
198
243
  value: input
199
- });
244
+ }, errorFactory);
200
245
  })(input, "$input", true);
201
246
  return input;
202
- }; input = JSON.parse(input); return assert(input); })(content);
247
+ }; input = JSON.parse(input); return assert(input, errorFactory); })(content);
203
248
  return {
204
249
  title: data.name,
205
250
  version: data.version,
@@ -216,21 +261,24 @@ var SwaggerGenerator;
216
261
  : undefined,
217
262
  };
218
263
  }
219
- catch (_y) {
264
+ catch (_1) {
220
265
  return null;
221
266
  }
222
267
  }));
223
268
  return {
224
- openapi: "3.0.1",
225
- servers: (_f = config.servers) !== null && _f !== void 0 ? _f : [
269
+ openapi: "3.1.0",
270
+ servers: (_h = config.servers) !== null && _h !== void 0 ? _h : [
226
271
  {
227
272
  url: "https://github.com/samchon/nestia",
228
273
  description: "insert your server url",
229
274
  },
230
275
  ],
231
- info: Object.assign(Object.assign({}, ((_g = config.info) !== null && _g !== void 0 ? _g : {})), { version: (_l = (_j = (_h = config.info) === null || _h === void 0 ? void 0 : _h.version) !== null && _j !== void 0 ? _j : (_k = (yield pack.get())) === null || _k === void 0 ? void 0 : _k.version) !== null && _l !== void 0 ? _l : "0.1.0", title: (_q = (_o = (_m = config.info) === null || _m === void 0 ? void 0 : _m.title) !== null && _o !== void 0 ? _o : (_p = (yield pack.get())) === null || _p === void 0 ? void 0 : _p.title) !== null && _q !== void 0 ? _q : "Swagger Documents", description: (_u = (_s = (_r = config.info) === null || _r === void 0 ? void 0 : _r.description) !== null && _s !== void 0 ? _s : (_t = (yield pack.get())) === null || _t === void 0 ? void 0 : _t.description) !== null && _u !== void 0 ? _u : "Generated by nestia - https://github.com/samchon/nestia", license: (_w = (_v = config.info) === null || _v === void 0 ? void 0 : _v.license) !== null && _w !== void 0 ? _w : (_x = (yield pack.get())) === null || _x === void 0 ? void 0 : _x.license }),
276
+ info: Object.assign(Object.assign({}, ((_j = config.info) !== null && _j !== void 0 ? _j : {})), { version: (_o = (_l = (_k = config.info) === null || _k === void 0 ? void 0 : _k.version) !== null && _l !== void 0 ? _l : (_m = (yield pack.get())) === null || _m === void 0 ? void 0 : _m.version) !== null && _o !== void 0 ? _o : "0.1.0", title: (_s = (_q = (_p = config.info) === null || _p === void 0 ? void 0 : _p.title) !== null && _q !== void 0 ? _q : (_r = (yield pack.get())) === null || _r === void 0 ? void 0 : _r.title) !== null && _s !== void 0 ? _s : "Swagger Documents", description: (_w = (_u = (_t = config.info) === null || _t === void 0 ? void 0 : _t.description) !== null && _u !== void 0 ? _u : (_v = (yield pack.get())) === null || _v === void 0 ? void 0 : _v.description) !== null && _w !== void 0 ? _w : "Generated by nestia - https://github.com/samchon/nestia", license: (_y = (_x = config.info) === null || _x === void 0 ? void 0 : _x.license) !== null && _y !== void 0 ? _y : (_z = (yield pack.get())) === null || _z === void 0 ? void 0 : _z.license }),
232
277
  paths: {},
233
- components: {},
278
+ components: {
279
+ schemas: {},
280
+ },
281
+ tags: (_0 = config.tags) !== null && _0 !== void 0 ? _0 : [],
234
282
  };
235
283
  });
236
284
  function get_path(path, parameters) {
@@ -240,8 +288,11 @@ var SwaggerGenerator;
240
288
  return path;
241
289
  }
242
290
  const generate_route = (props) => (route) => {
243
- var _a, _b, _c, _d;
291
+ var _a, _b, _c, _d, _e;
292
+ var _f;
293
+ // FIND REQUEST BODY
244
294
  const body = route.parameters.find((param) => param.category === "body");
295
+ // CONSTRUCT SUMMARY & DESCRIPTION
245
296
  const getJsDocTexts = (name) => route.jsDocTags
246
297
  .filter((tag) => tag.name === name &&
247
298
  tag.text &&
@@ -256,42 +307,48 @@ var SwaggerGenerator;
256
307
  const [explicit] = getJsDocTexts("summary");
257
308
  if (explicit === null || explicit === void 0 ? void 0 : explicit.length)
258
309
  return explicit;
259
- const index = description.indexOf(".");
260
- if (index <= 0)
261
- return undefined;
262
- const content = description.substring(0, index).trim();
263
- return content.length ? content : undefined;
310
+ const index = description.indexOf("\n");
311
+ const top = (index === -1 ? description : description.substring(0, index)).trim();
312
+ return top.endsWith(".") ? top.substring(0, top.length - 1) : undefined;
264
313
  })();
265
314
  const deprecated = route.jsDocTags.find((tag) => tag.name === "deprecated");
266
- return {
267
- deprecated: deprecated ? true : undefined,
268
- tags: [...route.swaggerTags, ...new Set([...getJsDocTexts("tag")])],
269
- operationId: (_b = route.operationId) !== null && _b !== void 0 ? _b : (_d = (_c = props.config).operationId) === null || _d === void 0 ? void 0 : _d.call(_c, {
270
- class: route.symbol.class,
271
- function: route.symbol.function,
315
+ // CONSTRUCT TAGS
316
+ const tagSet = new Set([
317
+ ...route.swaggerTags,
318
+ ...getJsDocTexts("tag").map((tag) => tag.split(" ")[0]),
319
+ ]);
320
+ for (const tag of tagSet)
321
+ if (props.swagger.tags.find((elem) => elem.name === tag) === undefined)
322
+ props.swagger.tags.push({ name: tag });
323
+ for (const texts of getJsDocTexts("tag")) {
324
+ const [name, ...description] = texts.split(" ");
325
+ if (description.length)
326
+ (_b = (_f = props.swagger.tags.find((elem) => elem.name === name)).description) !== null && _b !== void 0 ? _b : (_f.description = description.join(" "));
327
+ }
328
+ // FINALIZE
329
+ return Object.assign({ deprecated: deprecated ? true : undefined, tags: [...tagSet], operationId: (_c = route.operationId) !== null && _c !== void 0 ? _c : (_e = (_d = props.config).operationId) === null || _e === void 0 ? void 0 : _e.call(_d, {
330
+ class: route.target.class.name,
331
+ function: route.target.function.name,
272
332
  method: route.method,
273
333
  path: route.path,
274
- }),
275
- parameters: route.parameters
334
+ }), parameters: route.parameters
276
335
  .filter((param) => param.category !== "body")
277
336
  .map((param) => SwaggerSchemaGenerator_1.SwaggerSchemaGenerator.parameter(props)(route)(param))
278
- .flat(),
279
- requestBody: body
337
+ .flat(), requestBody: body
280
338
  ? SwaggerSchemaGenerator_1.SwaggerSchemaGenerator.body(props)(route)(body)
281
- : undefined,
282
- responses: SwaggerSchemaGenerator_1.SwaggerSchemaGenerator.response(props)(route),
283
- summary,
284
- description,
285
- security: route.security.length ? route.security : undefined,
286
- "x-nestia-namespace": [
287
- ...route.path
288
- .split("/")
289
- .filter((str) => str.length && str[0] !== ":"),
290
- route.name,
291
- ].join("."),
292
- "x-nestia-jsDocTags": route.jsDocTags,
293
- "x-nestia-method": route.method,
294
- };
339
+ : undefined, responses: SwaggerSchemaGenerator_1.SwaggerSchemaGenerator.response(props)(route), summary,
340
+ description, security: route.security.length ? route.security : undefined }, (props.config.additional === true
341
+ ? {
342
+ "x-nestia-namespace": [
343
+ ...route.path
344
+ .split("/")
345
+ .filter((str) => str.length && str[0] !== ":"),
346
+ route.name,
347
+ ].join("."),
348
+ "x-nestia-jsDocTags": route.jsDocTags,
349
+ "x-nestia-method": route.method,
350
+ }
351
+ : {}));
295
352
  };
296
353
  function fill_security(security, swagger) {
297
354
  swagger.components.securitySchemes = {};