@tsed/swagger 7.0.0-alpha.1 → 7.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/SwaggerModule.js +129 -0
- package/lib/cjs/SwaggerModule.js.map +1 -0
- package/lib/cjs/decorators/docs.js +18 -0
- package/lib/cjs/decorators/docs.js.map +1 -0
- package/lib/cjs/decorators/hidden.js +40 -0
- package/lib/cjs/decorators/hidden.js.map +1 -0
- package/lib/cjs/index.js +9 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/interfaces/SwaggerSettings.js +3 -0
- package/lib/cjs/interfaces/SwaggerSettings.js.map +1 -0
- package/lib/cjs/interfaces/index.js +5 -0
- package/lib/cjs/interfaces/index.js.map +1 -0
- package/lib/cjs/middlewares/cssMiddleware.js +23 -0
- package/lib/cjs/middlewares/cssMiddleware.js.map +1 -0
- package/lib/cjs/middlewares/indexMiddleware.js +24 -0
- package/lib/cjs/middlewares/indexMiddleware.js.map +1 -0
- package/lib/cjs/middlewares/jsMiddleware.js +18 -0
- package/lib/cjs/middlewares/jsMiddleware.js.map +1 -0
- package/lib/cjs/middlewares/redirectMiddleware.js +16 -0
- package/lib/cjs/middlewares/redirectMiddleware.js.map +1 -0
- package/lib/cjs/services/SwaggerService.js +105 -0
- package/lib/cjs/services/SwaggerService.js.map +1 -0
- package/lib/cjs/utils/includeRoute.js +20 -0
- package/lib/cjs/utils/includeRoute.js.map +1 -0
- package/lib/cjs/utils/index.js +9 -0
- package/lib/cjs/utils/index.js.map +1 -0
- package/lib/cjs/utils/mapOpenSpec.js +29 -0
- package/lib/cjs/utils/mapOpenSpec.js.map +1 -0
- package/lib/cjs/utils/mapOpenSpec3.js +26 -0
- package/lib/cjs/utils/mapOpenSpec3.js.map +1 -0
- package/lib/cjs/utils/mapOpenSpecInfo.js +21 -0
- package/lib/cjs/utils/mapOpenSpecInfo.js.map +1 -0
- package/lib/cjs/utils/matchPath.js +10 -0
- package/lib/cjs/utils/matchPath.js.map +1 -0
- package/lib/esm/SwaggerModule.js +126 -0
- package/lib/esm/SwaggerModule.js.map +1 -0
- package/lib/esm/decorators/docs.js +14 -0
- package/lib/esm/decorators/docs.js.map +1 -0
- package/lib/esm/decorators/hidden.js +36 -0
- package/lib/esm/decorators/hidden.js.map +1 -0
- package/lib/esm/index.js +6 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/interfaces/SwaggerSettings.js +2 -0
- package/lib/esm/interfaces/SwaggerSettings.js.map +1 -0
- package/lib/esm/interfaces/index.js +2 -0
- package/lib/esm/interfaces/index.js.map +1 -0
- package/lib/esm/middlewares/cssMiddleware.js +18 -0
- package/lib/esm/middlewares/cssMiddleware.js.map +1 -0
- package/lib/esm/middlewares/indexMiddleware.js +20 -0
- package/lib/esm/middlewares/indexMiddleware.js.map +1 -0
- package/lib/esm/middlewares/jsMiddleware.js +13 -0
- package/lib/esm/middlewares/jsMiddleware.js.map +1 -0
- package/lib/esm/middlewares/redirectMiddleware.js +12 -0
- package/lib/esm/middlewares/redirectMiddleware.js.map +1 -0
- package/lib/esm/services/SwaggerService.js +102 -0
- package/lib/esm/services/SwaggerService.js.map +1 -0
- package/lib/esm/utils/includeRoute.js +16 -0
- package/lib/esm/utils/includeRoute.js.map +1 -0
- package/lib/esm/utils/index.js +6 -0
- package/lib/esm/utils/index.js.map +1 -0
- package/lib/esm/utils/mapOpenSpec.js +25 -0
- package/lib/esm/utils/mapOpenSpec.js.map +1 -0
- package/lib/esm/utils/mapOpenSpec3.js +22 -0
- package/lib/esm/utils/mapOpenSpec3.js.map +1 -0
- package/lib/esm/utils/mapOpenSpecInfo.js +17 -0
- package/lib/esm/utils/mapOpenSpecInfo.js.map +1 -0
- package/lib/esm/utils/matchPath.js +5 -0
- package/lib/esm/utils/matchPath.js.map +1 -0
- package/lib/{SwaggerModule.d.ts → types/SwaggerModule.d.ts} +6 -5
- package/lib/{decorators → types/decorators}/docs.d.ts +0 -0
- package/lib/{decorators → types/decorators}/hidden.d.ts +0 -0
- package/lib/{index.d.ts → types/index.d.ts} +0 -0
- package/lib/{interfaces → types/interfaces}/SwaggerSettings.d.ts +2 -12
- package/lib/{interfaces → types/interfaces}/index.d.ts +0 -0
- package/lib/{middlewares → types/middlewares}/cssMiddleware.d.ts +0 -0
- package/lib/{middlewares → types/middlewares}/indexMiddleware.d.ts +0 -0
- package/lib/{middlewares → types/middlewares}/jsMiddleware.d.ts +0 -0
- package/lib/{middlewares → types/middlewares}/redirectMiddleware.d.ts +0 -0
- package/lib/{services → types/services}/SwaggerService.d.ts +5 -7
- package/lib/{utils → types/utils}/includeRoute.d.ts +0 -0
- package/lib/{utils → types/utils}/index.d.ts +0 -2
- package/lib/{utils → types/utils}/mapOpenSpec.d.ts +2 -2
- package/lib/{utils → types/utils}/mapOpenSpec3.d.ts +0 -0
- package/lib/{utils → types/utils}/mapOpenSpecInfo.d.ts +0 -0
- package/lib/{utils → types/utils}/matchPath.d.ts +0 -0
- package/lib/views/index.ejs +145 -0
- package/lib/views/index.html +144 -0
- package/package.json +23 -19
- package/tsconfig.compile.esm.json +24 -0
- package/lib/index.js +0 -629
- package/lib/index.js.map +0 -1
- package/lib/index.modern.js +0 -626
- package/lib/index.modern.js.map +0 -1
- package/lib/utils/getSpecType.d.ts +0 -12
- package/lib/utils/mapOpenSpec2.d.ts +0 -9
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwaggerModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const cssMiddleware_1 = require("./middlewares/cssMiddleware");
|
|
9
|
+
const indexMiddleware_1 = require("./middlewares/indexMiddleware");
|
|
10
|
+
const jsMiddleware_1 = require("./middlewares/jsMiddleware");
|
|
11
|
+
const redirectMiddleware_1 = require("./middlewares/redirectMiddleware");
|
|
12
|
+
const SwaggerService_1 = require("./services/SwaggerService");
|
|
13
|
+
const core_1 = require("@tsed/core");
|
|
14
|
+
const swaggerUiPath = require("swagger-ui-dist").absolutePath();
|
|
15
|
+
/**
|
|
16
|
+
* @ignore
|
|
17
|
+
*/
|
|
18
|
+
let SwaggerModule = class SwaggerModule {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.loaded = false;
|
|
21
|
+
}
|
|
22
|
+
get settings() {
|
|
23
|
+
return [].concat(this.configuration.get("swagger")).filter((o) => !!o);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
$onRoutesInit() {
|
|
29
|
+
if (this.loaded) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const urls = this.getUrls();
|
|
33
|
+
this.settings.forEach((conf) => {
|
|
34
|
+
const { path = "/" } = conf;
|
|
35
|
+
this.app.get(path, (0, common_1.useCtxHandler)((0, redirectMiddleware_1.redirectMiddleware)(path)));
|
|
36
|
+
this.app.use(path, this.createRouter(conf, urls));
|
|
37
|
+
});
|
|
38
|
+
this.loaded = true;
|
|
39
|
+
}
|
|
40
|
+
$onReady() {
|
|
41
|
+
// istanbul ignore next
|
|
42
|
+
if (this.configuration.getBestHost) {
|
|
43
|
+
const host = this.configuration.getBestHost();
|
|
44
|
+
const url = host.toString();
|
|
45
|
+
const displayLog = (conf) => {
|
|
46
|
+
const { path = "/", fileName = "swagger.json", doc } = conf;
|
|
47
|
+
this.injector.logger.info(`[${doc || "default"}] Swagger JSON is available on ${url}${(0, common_1.normalizePath)(path, fileName)}`);
|
|
48
|
+
this.injector.logger.info(`[${doc || "default"}] Swagger UI is available on ${url}${path}/`);
|
|
49
|
+
};
|
|
50
|
+
this.settings.forEach((conf) => {
|
|
51
|
+
displayLog(conf);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
this.generateSpecFiles();
|
|
55
|
+
}
|
|
56
|
+
generateSpecFiles() {
|
|
57
|
+
return Promise.all(this.settings.map((conf) => {
|
|
58
|
+
const { outFile } = conf;
|
|
59
|
+
if (this.env === core_1.Env.PROD || outFile) {
|
|
60
|
+
const spec = this.swaggerService.getOpenAPISpec(conf);
|
|
61
|
+
if (outFile) {
|
|
62
|
+
return fs_1.default.writeFile(outFile, JSON.stringify(spec, null, 2), { encoding: "utf8" }, () => { });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
getUrls() {
|
|
68
|
+
return this.settings.reduce((acc, conf) => {
|
|
69
|
+
const { path = "/", fileName = "swagger.json", doc, hidden } = conf;
|
|
70
|
+
if (!hidden) {
|
|
71
|
+
acc.push({ url: (0, common_1.normalizePath)(path, fileName), name: doc || path });
|
|
72
|
+
}
|
|
73
|
+
return acc;
|
|
74
|
+
}, []);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param conf
|
|
79
|
+
* @param urls
|
|
80
|
+
*/
|
|
81
|
+
createRouter(conf, urls) {
|
|
82
|
+
const { disableSpec = false, fileName = "swagger.json", cssPath, jsPath, viewPath = (0, path_1.join)(__dirname, "../views/index.ejs") } = conf;
|
|
83
|
+
const router = common_1.PlatformRouter.create(this.injector);
|
|
84
|
+
if (!disableSpec) {
|
|
85
|
+
router.get((0, common_1.normalizePath)("/", fileName), (0, common_1.useCtxHandler)(this.middlewareSwaggerJson(conf)));
|
|
86
|
+
}
|
|
87
|
+
if (viewPath) {
|
|
88
|
+
if (cssPath) {
|
|
89
|
+
router.get("/main.css", (0, common_1.useCtxHandler)((0, cssMiddleware_1.cssMiddleware)(cssPath)));
|
|
90
|
+
}
|
|
91
|
+
if (jsPath) {
|
|
92
|
+
router.get("/main.js", (0, common_1.useCtxHandler)((0, jsMiddleware_1.jsMiddleware)(jsPath)));
|
|
93
|
+
}
|
|
94
|
+
router.get("/", (0, common_1.useCtxHandler)((0, indexMiddleware_1.indexMiddleware)(viewPath, { urls, ...conf })));
|
|
95
|
+
router.statics("/", { root: swaggerUiPath });
|
|
96
|
+
}
|
|
97
|
+
return router;
|
|
98
|
+
}
|
|
99
|
+
middlewareSwaggerJson(conf) {
|
|
100
|
+
return (ctx) => {
|
|
101
|
+
ctx.response.status(200).body(this.swaggerService.getOpenAPISpec(conf));
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
(0, tslib_1.__decorate)([
|
|
106
|
+
(0, common_1.Inject)(),
|
|
107
|
+
(0, tslib_1.__metadata)("design:type", common_1.InjectorService)
|
|
108
|
+
], SwaggerModule.prototype, "injector", void 0);
|
|
109
|
+
(0, tslib_1.__decorate)([
|
|
110
|
+
(0, common_1.Inject)(),
|
|
111
|
+
(0, tslib_1.__metadata)("design:type", common_1.PlatformApplication)
|
|
112
|
+
], SwaggerModule.prototype, "app", void 0);
|
|
113
|
+
(0, tslib_1.__decorate)([
|
|
114
|
+
(0, common_1.Configuration)(),
|
|
115
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
116
|
+
], SwaggerModule.prototype, "configuration", void 0);
|
|
117
|
+
(0, tslib_1.__decorate)([
|
|
118
|
+
(0, common_1.Inject)(),
|
|
119
|
+
(0, tslib_1.__metadata)("design:type", SwaggerService_1.SwaggerService)
|
|
120
|
+
], SwaggerModule.prototype, "swaggerService", void 0);
|
|
121
|
+
(0, tslib_1.__decorate)([
|
|
122
|
+
(0, common_1.Constant)("env"),
|
|
123
|
+
(0, tslib_1.__metadata)("design:type", String)
|
|
124
|
+
], SwaggerModule.prototype, "env", void 0);
|
|
125
|
+
SwaggerModule = (0, tslib_1.__decorate)([
|
|
126
|
+
(0, common_1.Module)()
|
|
127
|
+
], SwaggerModule);
|
|
128
|
+
exports.SwaggerModule = SwaggerModule;
|
|
129
|
+
//# sourceMappingURL=SwaggerModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerModule.js","sourceRoot":"","sources":["../../src/SwaggerModule.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OnRoutesInit,\n Configuration,\n Constant,\n Inject,\n InjectorService,\n Module,\n normalizePath,\n OnReady,\n PlatformApplication,\n PlatformContext,\n PlatformRouter,\n useCtxHandler\n} from \"@tsed/common\";\nimport Fs from \"fs\";\nimport {join} from \"path\";\nimport {SwaggerSettings} from \"./interfaces\";\nimport {cssMiddleware} from \"./middlewares/cssMiddleware\";\nimport {indexMiddleware} from \"./middlewares/indexMiddleware\";\nimport {jsMiddleware} from \"./middlewares/jsMiddleware\";\nimport {redirectMiddleware} from \"./middlewares/redirectMiddleware\";\nimport {SwaggerService} from \"./services/SwaggerService\";\nimport {Env} from \"@tsed/core\";\n\nconst swaggerUiPath = require(\"swagger-ui-dist\").absolutePath();\n\n/**\n * @ignore\n */\n@Module()\nexport class SwaggerModule implements OnRoutesInit, OnReady {\n @Inject()\n injector: InjectorService;\n\n @Inject()\n app: PlatformApplication;\n\n @Configuration()\n configuration: Configuration;\n\n @Inject()\n swaggerService: SwaggerService;\n\n @Constant(\"env\")\n env: Env;\n\n private loaded = false;\n\n get settings() {\n return ([] as SwaggerSettings[]).concat(this.configuration.get<SwaggerSettings[]>(\"swagger\")).filter((o) => !!o);\n }\n\n /**\n *\n */\n $onRoutesInit() {\n if (this.loaded) {\n return;\n }\n\n const urls: any[] = this.getUrls();\n\n this.settings.forEach((conf: SwaggerSettings) => {\n const {path = \"/\"} = conf;\n\n this.app.get(path, useCtxHandler(redirectMiddleware(path)));\n this.app.use(path, this.createRouter(conf, urls));\n });\n\n this.loaded = true;\n }\n\n $onReady() {\n // istanbul ignore next\n if (this.configuration.getBestHost) {\n const host = this.configuration.getBestHost();\n const url = host.toString();\n\n const displayLog = (conf: SwaggerSettings) => {\n const {path = \"/\", fileName = \"swagger.json\", doc} = conf;\n\n this.injector.logger.info(`[${doc || \"default\"}] Swagger JSON is available on ${url}${normalizePath(path, fileName)}`);\n this.injector.logger.info(`[${doc || \"default\"}] Swagger UI is available on ${url}${path}/`);\n };\n\n this.settings.forEach((conf) => {\n displayLog(conf);\n });\n }\n\n this.generateSpecFiles();\n }\n\n generateSpecFiles() {\n return Promise.all(\n this.settings.map((conf) => {\n const {outFile} = conf;\n\n if (this.env === Env.PROD || outFile) {\n const spec = this.swaggerService.getOpenAPISpec(conf);\n\n if (outFile) {\n return Fs.writeFile(outFile, JSON.stringify(spec, null, 2), {encoding: \"utf8\"}, () => {});\n }\n }\n })\n );\n }\n\n private getUrls() {\n return this.settings.reduce((acc: any[], conf) => {\n const {path = \"/\", fileName = \"swagger.json\", doc, hidden} = conf;\n\n if (!hidden) {\n acc.push({url: normalizePath(path, fileName), name: doc || path});\n }\n\n return acc;\n }, []);\n }\n\n /**\n *\n * @param conf\n * @param urls\n */\n private createRouter(conf: SwaggerSettings, urls: string[]) {\n const {disableSpec = false, fileName = \"swagger.json\", cssPath, jsPath, viewPath = join(__dirname, \"../views/index.ejs\")} = conf;\n const router = PlatformRouter.create(this.injector);\n\n if (!disableSpec) {\n router.get(normalizePath(\"/\", fileName), useCtxHandler(this.middlewareSwaggerJson(conf)));\n }\n\n if (viewPath) {\n if (cssPath) {\n router.get(\"/main.css\", useCtxHandler(cssMiddleware(cssPath)));\n }\n\n if (jsPath) {\n router.get(\"/main.js\", useCtxHandler(jsMiddleware(jsPath)));\n }\n\n router.get(\"/\", useCtxHandler(indexMiddleware(viewPath, {urls, ...conf})));\n router.statics(\"/\", {root: swaggerUiPath});\n }\n\n return router;\n }\n\n private middlewareSwaggerJson(conf: SwaggerSettings) {\n return (ctx: PlatformContext) => {\n ctx.response.status(200).body(this.swaggerService.getOpenAPISpec(conf));\n };\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Docs = void 0;
|
|
4
|
+
const core_1 = require("@tsed/core");
|
|
5
|
+
/**
|
|
6
|
+
* Set the type documentation for this class.
|
|
7
|
+
*
|
|
8
|
+
* See [swagger documentation](/tutorials/swagger.html)
|
|
9
|
+
*
|
|
10
|
+
* @decorator
|
|
11
|
+
* @swagger
|
|
12
|
+
* @param docs
|
|
13
|
+
*/
|
|
14
|
+
function Docs(...docs) {
|
|
15
|
+
return (0, core_1.StoreMerge)("docs", docs);
|
|
16
|
+
}
|
|
17
|
+
exports.Docs = Docs;
|
|
18
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/decorators/docs.ts"],"names":[],"mappings":";;;AAAA,qCAAsC;AAEtC;;;;;;;;GAQG;AACH,SAAgB,IAAI,CAAC,GAAG,IAAc;IACpC,OAAO,IAAA,iBAAU,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAFD,oBAEC","sourcesContent":["import {StoreMerge} from \"@tsed/core\";\n\n/**\n * Set the type documentation for this class.\n *\n * See [swagger documentation](/tutorials/swagger.html)\n *\n * @decorator\n * @swagger\n * @param docs\n */\nexport function Docs(...docs: string[]) {\n return StoreMerge(\"docs\", docs);\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Hidden = void 0;
|
|
4
|
+
const schema_1 = require("@tsed/schema");
|
|
5
|
+
/**
|
|
6
|
+
* Disable documentation for the class and his endpoint.
|
|
7
|
+
*
|
|
8
|
+
* ````typescript
|
|
9
|
+
* @Controller('/')
|
|
10
|
+
* export class Ctrl {
|
|
11
|
+
*
|
|
12
|
+
* @Get('/')
|
|
13
|
+
* @Hidden()
|
|
14
|
+
* hiddenRoute(){
|
|
15
|
+
*
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* @Controller('/')
|
|
20
|
+
* @Hidden()
|
|
21
|
+
* export class Ctrl {
|
|
22
|
+
* @Get('/')
|
|
23
|
+
* hiddenRoute() {
|
|
24
|
+
*
|
|
25
|
+
* }
|
|
26
|
+
* @Get('/2')
|
|
27
|
+
* hiddenRoute2() {
|
|
28
|
+
*
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @decorator
|
|
34
|
+
* @swagger
|
|
35
|
+
*/
|
|
36
|
+
function Hidden() {
|
|
37
|
+
return (0, schema_1.Hidden)();
|
|
38
|
+
}
|
|
39
|
+
exports.Hidden = Hidden;
|
|
40
|
+
//# sourceMappingURL=hidden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hidden.js","sourceRoot":"","sources":["../../../src/decorators/hidden.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAgB,MAAM;IACpB,OAAO,IAAA,eAAC,GAAE,CAAC;AACb,CAAC;AAFD,wBAEC","sourcesContent":["import {Hidden as H} from \"@tsed/schema\";\n\n/**\n * Disable documentation for the class and his endpoint.\n *\n * ````typescript\n * @Controller('/')\n * export class Ctrl {\n *\n * @Get('/')\n * @Hidden()\n * hiddenRoute(){\n *\n * }\n * }\n *\n * @Controller('/')\n * @Hidden()\n * export class Ctrl {\n * @Get('/')\n * hiddenRoute() {\n *\n * }\n * @Get('/2')\n * hiddenRoute2() {\n *\n * }\n * }\n * ```\n *\n * @decorator\n * @swagger\n */\nexport function Hidden() {\n return H();\n}\n"]}
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./services/SwaggerService"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./SwaggerModule"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./interfaces"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./decorators/docs"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./decorators/hidden"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yEAA0C;AAC1C,+DAAgC;AAChC,4DAA6B;AAC7B,iEAAkC;AAClC,mEAAoC","sourcesContent":["export * from \"./services/SwaggerService\";\nexport * from \"./SwaggerModule\";\nexport * from \"./interfaces\";\nexport * from \"./decorators/docs\";\nexport * from \"./decorators/hidden\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerSettings.js","sourceRoot":"","sources":["../../../src/interfaces/SwaggerSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {OpenSpec3, OpenSpecVersions, OS3Versions} from \"@tsed/openspec\";\n\nexport interface SwaggerUIOptions {\n configUrl?: string;\n url?: string;\n urls?: {url: string; name: string; primaryName?: string}[];\n layout?: string;\n validatorUrl?: string;\n oauth?: any;\n authorize?: any;\n\n [key: string]: any;\n}\n\nexport interface SwaggerSettingsBase {\n /**\n * The url subpath to access to the documentation.\n */\n path: string;\n /**\n * Specify the spec version you want to generate.\n */\n specVersion?: OpenSpecVersions;\n /**\n * Swagger file name. By default swagger.json\n */\n fileName?: string;\n /**\n * Hidden documentation. Use this to hide documentation link in the dropdown.\n */\n hidden?: string;\n /**\n * The documentation key used by `@Docs` decorator to create several swagger documentations.\n */\n doc?: string;\n /**\n * The path to the CSS file.\n */\n cssPath?: string;\n /**\n * The path to the JS file.\n */\n jsPath?: string;\n /**\n * The path to the ejs file to create html page.\n */\n viewPath?: string | false;\n /**\n * SwaggerUI options. See (https://github.com/swagger-api/swagger-ui/blob/HEAD/docs/usage/configuration.md)\n */\n options?: SwaggerUIOptions;\n /**\n * Display the search field in the navbar.\n */\n showExplorer?: boolean;\n /**\n * Load the base spec documentation from the specified path.\n */\n specPath?: string;\n /**\n * Write the `swagger.json` spec documentation on the specified path.\n */\n outFile?: string;\n /**\n * A function to generate the operationId.\n */\n operationIdFormatter?: (name: string, propertyKey: string, path: string) => string;\n /**\n * A pattern to generate the operationId. Format of operationId field (%c: class name, %m: method name).\n */\n operationIdPattern?: string;\n /**\n *\n */\n disableSpec?: boolean;\n /**\n * Include only controllers whose paths match the pattern list provided.\n */\n pathPatterns?: string[];\n}\n\nexport interface SwaggerOS3Settings extends SwaggerSettingsBase {\n specVersion?: OS3Versions;\n /**\n * OpenSpec 3\n */\n spec?: Partial<OpenSpec3>;\n}\n\nexport type SwaggerSettings = SwaggerOS3Settings;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":";;;AAUA,iEAAkC","sourcesContent":["import {SwaggerSettings} from \"./SwaggerSettings\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n swagger: SwaggerSettings[];\n }\n }\n}\n\nexport * from \"./SwaggerSettings\";\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cssMiddleware = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
/**
|
|
8
|
+
* @ignore
|
|
9
|
+
* @param path
|
|
10
|
+
*/
|
|
11
|
+
function cssMiddleware(path) {
|
|
12
|
+
return (ctx) => {
|
|
13
|
+
const content = fs_1.default.readFileSync((0, path_1.resolve)(path), { encoding: "utf8" });
|
|
14
|
+
ctx.response
|
|
15
|
+
.setHeaders({
|
|
16
|
+
"Content-Type": "text/css"
|
|
17
|
+
})
|
|
18
|
+
.status(200)
|
|
19
|
+
.body(content);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.cssMiddleware = cssMiddleware;
|
|
23
|
+
//# sourceMappingURL=cssMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cssMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/cssMiddleware.ts"],"names":[],"mappings":";;;;AACA,yDAAoB;AACpB,+BAA6B;AAE7B;;;GAGG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,GAAoB,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;QACnE,GAAG,CAAC,QAAQ;aACT,UAAU,CAAC;YACV,cAAc,EAAE,UAAU;SAC3B,CAAC;aACD,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAVD,sCAUC","sourcesContent":["import {PlatformContext} from \"@tsed/common\";\nimport Fs from \"fs\";\nimport {resolve} from \"path\";\n\n/**\n * @ignore\n * @param path\n */\nexport function cssMiddleware(path: string) {\n return (ctx: PlatformContext) => {\n const content = Fs.readFileSync(resolve(path), {encoding: \"utf8\"});\n ctx.response\n .setHeaders({\n \"Content-Type\": \"text/css\"\n })\n .status(200)\n .body(content);\n };\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.indexMiddleware = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @ignore
|
|
6
|
+
* @param viewPath
|
|
7
|
+
* @param conf
|
|
8
|
+
*/
|
|
9
|
+
function indexMiddleware(viewPath, conf) {
|
|
10
|
+
return async (ctx) => {
|
|
11
|
+
const { path = "/", options = {}, showExplorer, cssPath, jsPath, urls } = conf;
|
|
12
|
+
ctx.response.body(await ctx.response.render(viewPath, {
|
|
13
|
+
spec: {},
|
|
14
|
+
url: `${path}/swagger.json`,
|
|
15
|
+
urls,
|
|
16
|
+
showExplorer,
|
|
17
|
+
cssPath,
|
|
18
|
+
jsPath,
|
|
19
|
+
swaggerOptions: options
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
exports.indexMiddleware = indexMiddleware;
|
|
24
|
+
//# sourceMappingURL=indexMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/indexMiddleware.ts"],"names":[],"mappings":";;;AAGA;;;;GAIG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,IAAwC;IACxF,OAAO,KAAK,EAAE,GAAoB,EAAE,EAAE;QACpC,MAAM,EAAC,IAAI,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;QAE7E,GAAG,CAAC,QAAQ,CAAC,IAAI,CACf,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,GAAG,IAAI,eAAe;YAC3B,IAAI;YACJ,YAAY;YACZ,OAAO;YACP,MAAM;YACN,cAAc,EAAE,OAAO;SACxB,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAhBD,0CAgBC","sourcesContent":["import {PlatformContext} from \"@tsed/common\";\nimport {SwaggerSettings} from \"../interfaces/SwaggerSettings\";\n\n/**\n * @ignore\n * @param viewPath\n * @param conf\n */\nexport function indexMiddleware(viewPath: string, conf: SwaggerSettings & {urls: string[]}) {\n return async (ctx: PlatformContext) => {\n const {path = \"/\", options = {}, showExplorer, cssPath, jsPath, urls} = conf;\n\n ctx.response.body(\n await ctx.response.render(viewPath, {\n spec: {},\n url: `${path}/swagger.json`,\n urls,\n showExplorer,\n cssPath,\n jsPath,\n swaggerOptions: options\n })\n );\n };\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsMiddleware = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
/**
|
|
8
|
+
* @ignore
|
|
9
|
+
* @param path
|
|
10
|
+
*/
|
|
11
|
+
function jsMiddleware(path) {
|
|
12
|
+
return (ctx) => {
|
|
13
|
+
const content = fs_1.default.readFileSync((0, path_1.resolve)(path), { encoding: "utf8" });
|
|
14
|
+
ctx.response.setHeaders({ "Content-Type": "application/javascript" }).status(200).body(content);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.jsMiddleware = jsMiddleware;
|
|
18
|
+
//# sourceMappingURL=jsMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/jsMiddleware.ts"],"names":[],"mappings":";;;;AACA,yDAAoB;AACpB,+BAA6B;AAE7B;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,CAAC,GAAoB,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;QACnE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAC,cAAc,EAAE,wBAAwB,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChG,CAAC,CAAC;AACJ,CAAC;AALD,oCAKC","sourcesContent":["import {PlatformContext} from \"@tsed/common\";\nimport Fs from \"fs\";\nimport {resolve} from \"path\";\n\n/**\n * @ignore\n * @param path\n */\nexport function jsMiddleware(path: string) {\n return (ctx: PlatformContext) => {\n const content = Fs.readFileSync(resolve(path), {encoding: \"utf8\"});\n ctx.response.setHeaders({\"Content-Type\": \"application/javascript\"}).status(200).body(content);\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redirectMiddleware = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @ignore
|
|
6
|
+
* @param path
|
|
7
|
+
*/
|
|
8
|
+
function redirectMiddleware(path) {
|
|
9
|
+
return (ctx) => {
|
|
10
|
+
if (ctx.request.url === path && !ctx.request.url.match(/\/$/)) {
|
|
11
|
+
ctx.response.redirect(302, `${path}/`);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.redirectMiddleware = redirectMiddleware;
|
|
16
|
+
//# sourceMappingURL=redirectMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirectMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/redirectMiddleware.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,CAAC,GAAoB,EAAE,EAAE;QAC9B,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC7D,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;SACxC;IACH,CAAC,CAAC;AACJ,CAAC;AAND,gDAMC","sourcesContent":["import {PlatformContext} from \"@tsed/common\";\n\n/**\n * @ignore\n * @param path\n */\nexport function redirectMiddleware(path: string) {\n return (ctx: PlatformContext) => {\n if (ctx.request.url === path && !ctx.request.url.match(/\\/$/)) {\n ctx.response.redirect(302, `${path}/`);\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _SwaggerService_specs;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SwaggerService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@tsed/common");
|
|
7
|
+
const core_1 = require("@tsed/core");
|
|
8
|
+
const schema_1 = require("@tsed/schema");
|
|
9
|
+
const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
10
|
+
const includeRoute_1 = require("../utils/includeRoute");
|
|
11
|
+
const mapOpenSpec_1 = require("../utils/mapOpenSpec");
|
|
12
|
+
let SwaggerService = class SwaggerService {
|
|
13
|
+
constructor(injectorService, platform, configuration) {
|
|
14
|
+
this.injectorService = injectorService;
|
|
15
|
+
this.platform = platform;
|
|
16
|
+
this.configuration = configuration;
|
|
17
|
+
_SwaggerService_specs.set(this, new Map());
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate Spec for the given configuration
|
|
21
|
+
* @returns {Spec}
|
|
22
|
+
*/
|
|
23
|
+
getOpenAPISpec(conf) {
|
|
24
|
+
if (!(0, tslib_1.__classPrivateFieldGet)(this, _SwaggerService_specs, "f").has(conf.path)) {
|
|
25
|
+
const defaultSpec = this.getDefaultSpec(conf);
|
|
26
|
+
let finalSpec = {};
|
|
27
|
+
const options = {
|
|
28
|
+
paths: {},
|
|
29
|
+
tags: [],
|
|
30
|
+
schemas: {},
|
|
31
|
+
specType: schema_1.SpecTypes.OPENAPI,
|
|
32
|
+
operationIdFormatter: conf.operationIdFormatter,
|
|
33
|
+
operationIdPattern: conf.operationIdPattern,
|
|
34
|
+
append(spec) {
|
|
35
|
+
finalSpec = (0, schema_1.mergeSpec)(finalSpec, spec);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
this.platform.getMountedControllers().forEach(({ route, provider }) => {
|
|
39
|
+
if ((0, includeRoute_1.includeRoute)(route, provider, conf)) {
|
|
40
|
+
const spec = this.buildRoutes(provider, {
|
|
41
|
+
...options,
|
|
42
|
+
rootPath: route.replace(provider.path, "")
|
|
43
|
+
});
|
|
44
|
+
options.append(spec);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
(0, tslib_1.__classPrivateFieldGet)(this, _SwaggerService_specs, "f").set(conf.path, (0, schema_1.mergeSpec)(defaultSpec, finalSpec));
|
|
48
|
+
}
|
|
49
|
+
return (0, tslib_1.__classPrivateFieldGet)(this, _SwaggerService_specs, "f").get(conf.path);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Return the global api information.
|
|
53
|
+
*/
|
|
54
|
+
getDefaultSpec(conf) {
|
|
55
|
+
const { version = "1.0.0", acceptMimes } = this.configuration;
|
|
56
|
+
const { specPath, specVersion } = conf;
|
|
57
|
+
const fileSpec = specPath ? this.readSpecPath(specPath) : {};
|
|
58
|
+
return (0, mapOpenSpec_1.mapOpenSpec)((0, core_1.getValue)(conf, "spec", {}), {
|
|
59
|
+
fileSpec,
|
|
60
|
+
version,
|
|
61
|
+
specVersion,
|
|
62
|
+
acceptMimes
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
readSpecPath(path) {
|
|
66
|
+
path = this.configuration.resolve(path);
|
|
67
|
+
if (fs_1.default.existsSync(path)) {
|
|
68
|
+
const json = fs_1.default.readFileSync(path, { encoding: "utf8" });
|
|
69
|
+
/* istanbul ignore else */
|
|
70
|
+
if (json !== "") {
|
|
71
|
+
return JSON.parse(json);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param ctrl
|
|
79
|
+
* @param options
|
|
80
|
+
*/
|
|
81
|
+
buildRoutes(ctrl, options) {
|
|
82
|
+
const rootPath = options.rootPath + ctrl.path;
|
|
83
|
+
ctrl.children
|
|
84
|
+
.map((ctrl) => this.injectorService.getProvider(ctrl))
|
|
85
|
+
.forEach((provider) => {
|
|
86
|
+
if (!provider.store.get("hidden")) {
|
|
87
|
+
const spec = this.buildRoutes(provider, {
|
|
88
|
+
...options,
|
|
89
|
+
rootPath
|
|
90
|
+
});
|
|
91
|
+
options.append(spec);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return (0, schema_1.getSpec)(ctrl.token, options);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
_SwaggerService_specs = new WeakMap();
|
|
98
|
+
SwaggerService = (0, tslib_1.__decorate)([
|
|
99
|
+
(0, common_1.Injectable)(),
|
|
100
|
+
(0, tslib_1.__param)(2, (0, common_1.Configuration)()),
|
|
101
|
+
(0, tslib_1.__metadata)("design:paramtypes", [common_1.InjectorService,
|
|
102
|
+
common_1.Platform, Object])
|
|
103
|
+
], SwaggerService);
|
|
104
|
+
exports.SwaggerService = SwaggerService;
|
|
105
|
+
//# sourceMappingURL=SwaggerService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerService.js","sourceRoot":"","sources":["../../../src/services/SwaggerService.ts"],"names":[],"mappings":"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","sourcesContent":["import {Configuration, ControllerProvider, Injectable, InjectorService, Platform} from \"@tsed/common\";\nimport {getValue} from \"@tsed/core\";\nimport {OpenSpec3} from \"@tsed/openspec\";\nimport {getSpec, mergeSpec, SpecSerializerOptions, SpecTypes} from \"@tsed/schema\";\nimport Fs from \"fs\";\nimport {SwaggerSettings} from \"../interfaces/SwaggerSettings\";\nimport {includeRoute} from \"../utils/includeRoute\";\nimport {mapOpenSpec} from \"../utils/mapOpenSpec\";\n\n@Injectable()\nexport class SwaggerService {\n #specs: Map<string, OpenSpec3> = new Map();\n\n constructor(\n private injectorService: InjectorService,\n private platform: Platform,\n @Configuration() private configuration: Configuration\n ) {}\n\n /**\n * Generate Spec for the given configuration\n * @returns {Spec}\n */\n public getOpenAPISpec(conf: SwaggerSettings) {\n if (!this.#specs.has(conf.path)) {\n const defaultSpec: any = this.getDefaultSpec(conf);\n let finalSpec: any = {};\n\n const options: SpecSerializerOptions = {\n paths: {},\n tags: [],\n schemas: {},\n specType: SpecTypes.OPENAPI,\n operationIdFormatter: conf.operationIdFormatter,\n operationIdPattern: conf.operationIdPattern,\n append(spec: any) {\n finalSpec = mergeSpec(finalSpec, spec);\n }\n };\n\n this.platform.getMountedControllers().forEach(({route, provider}) => {\n if (includeRoute(route, provider, conf)) {\n const spec = this.buildRoutes(provider, {\n ...options,\n rootPath: route.replace(provider.path, \"\")\n });\n\n options.append(spec);\n }\n });\n\n this.#specs.set(conf.path, mergeSpec(defaultSpec, finalSpec) as any);\n }\n\n return this.#specs.get(conf.path);\n }\n\n /**\n * Return the global api information.\n */\n protected getDefaultSpec(conf: Partial<SwaggerSettings>): Partial<OpenSpec3> {\n const {version = \"1.0.0\", acceptMimes} = this.configuration;\n const {specPath, specVersion} = conf;\n const fileSpec: Partial<OpenSpec3> = specPath ? this.readSpecPath(specPath) : {};\n\n return mapOpenSpec(getValue(conf, \"spec\", {}), {\n fileSpec,\n version,\n specVersion,\n acceptMimes\n });\n }\n\n protected readSpecPath(path: string) {\n path = this.configuration.resolve(path);\n if (Fs.existsSync(path)) {\n const json = Fs.readFileSync(path, {encoding: \"utf8\"});\n /* istanbul ignore else */\n if (json !== \"\") {\n return JSON.parse(json);\n }\n }\n\n return {};\n }\n\n /**\n *\n * @param ctrl\n * @param options\n */\n protected buildRoutes(ctrl: ControllerProvider, options: SpecSerializerOptions) {\n const rootPath = options.rootPath + ctrl.path;\n\n ctrl.children\n .map((ctrl) => this.injectorService.getProvider(ctrl))\n .forEach((provider: ControllerProvider) => {\n if (!provider.store.get(\"hidden\")) {\n const spec = this.buildRoutes(provider, {\n ...options,\n rootPath\n });\n\n options.append(spec);\n }\n });\n\n return getSpec(ctrl.token, options);\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.includeRoute = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
function includeRoute(route, provider, conf) {
|
|
6
|
+
const hidden = provider.store.get("hidden");
|
|
7
|
+
const docs = provider.store.get("docs") || [];
|
|
8
|
+
const { doc, pathPatterns } = conf;
|
|
9
|
+
const inDoc = doc && docs.indexOf(doc) > -1;
|
|
10
|
+
const pathPatternMatch = pathPatterns && (0, _1.matchPath)(route, pathPatterns);
|
|
11
|
+
if (hidden) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (!doc && !pathPatterns) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return !!(inDoc || pathPatternMatch);
|
|
18
|
+
}
|
|
19
|
+
exports.includeRoute = includeRoute;
|
|
20
|
+
//# sourceMappingURL=includeRoute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"includeRoute.js","sourceRoot":"","sources":["../../../src/utils/includeRoute.ts"],"names":[],"mappings":";;;AACA,wBAA4B;AAG5B,SAAgB,YAAY,CAAC,KAAa,EAAE,QAA4B,EAAE,IAAqB;IAC7F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,EAAC,GAAG,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,YAAY,IAAI,IAAA,YAAS,EAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAExE,IAAI,MAAM,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC;AACvC,CAAC;AAhBD,oCAgBC","sourcesContent":["import {ControllerProvider} from \"@tsed/common\";\nimport {matchPath} from \".\";\nimport {SwaggerSettings} from \"..\";\n\nexport function includeRoute(route: string, provider: ControllerProvider, conf: SwaggerSettings): boolean {\n const hidden = provider.store.get(\"hidden\");\n const docs = provider.store.get(\"docs\") || [];\n const {doc, pathPatterns} = conf;\n const inDoc = doc && docs.indexOf(doc) > -1;\n const pathPatternMatch = pathPatterns && matchPath(route, pathPatterns);\n\n if (hidden) {\n return false;\n }\n\n if (!doc && !pathPatterns) {\n return true;\n }\n\n return !!(inDoc || pathPatternMatch);\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./mapOpenSpec"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./mapOpenSpec3"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./mapOpenSpecInfo"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./mapOpenSpecInfo"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./matchPath"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,6DAA8B;AAC9B,8DAA+B;AAC/B,iEAAkC;AAClC,iEAAkC;AAClC,2DAA4B","sourcesContent":["export * from \"./mapOpenSpec\";\nexport * from \"./mapOpenSpec3\";\nexport * from \"./mapOpenSpecInfo\";\nexport * from \"./mapOpenSpecInfo\";\nexport * from \"./matchPath\";\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapOpenSpec = void 0;
|
|
4
|
+
const core_1 = require("@tsed/core");
|
|
5
|
+
const schema_1 = require("@tsed/schema");
|
|
6
|
+
const mapOpenSpec3_1 = require("./mapOpenSpec3");
|
|
7
|
+
/**
|
|
8
|
+
* @ignore
|
|
9
|
+
* @param spec
|
|
10
|
+
* @param fileSpec
|
|
11
|
+
* @param version
|
|
12
|
+
* @param acceptMimes
|
|
13
|
+
* @param specVersion
|
|
14
|
+
*/
|
|
15
|
+
function mapOpenSpec(spec, { fileSpec, acceptMimes, specVersion, version }) {
|
|
16
|
+
specVersion = specVersion || (0, core_1.getValue)(spec, "openapi", "3.0.1");
|
|
17
|
+
const options = {
|
|
18
|
+
specVersion,
|
|
19
|
+
acceptMimes
|
|
20
|
+
};
|
|
21
|
+
spec = (0, mapOpenSpec3_1.mapOpenSpec3)(spec, options);
|
|
22
|
+
fileSpec = fileSpec ? (0, mapOpenSpec3_1.mapOpenSpec3)(fileSpec, options) : fileSpec;
|
|
23
|
+
spec = (0, schema_1.mergeSpec)(spec, fileSpec);
|
|
24
|
+
(0, core_1.setValue)(spec, "info.title", (0, core_1.getValue)(spec, "info.title", "Api documentation"));
|
|
25
|
+
(0, core_1.setValue)(spec, "info.version", (0, core_1.getValue)(spec, "info.version", version));
|
|
26
|
+
return spec;
|
|
27
|
+
}
|
|
28
|
+
exports.mapOpenSpec = mapOpenSpec;
|
|
29
|
+
//# sourceMappingURL=mapOpenSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOpenSpec.js","sourceRoot":"","sources":["../../../src/utils/mapOpenSpec.ts"],"names":[],"mappings":";;;AAAA,qCAA8C;AAE9C,yCAAuC;AACvC,iDAA4C;AAE5C;;;;;;;GAOG;AACH,SAAgB,WAAW,CAAC,IAAS,EAAE,EAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAM;IACvF,WAAW,GAAG,WAAW,IAAI,IAAA,eAAQ,EAAmB,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAElF,MAAM,OAAO,GAAG;QACd,WAAW;QACX,WAAW;KACZ,CAAC;IAEF,IAAI,GAAG,IAAA,2BAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,2BAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEjE,IAAI,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjC,IAAA,eAAQ,EAAC,IAAI,EAAE,YAAY,EAAE,IAAA,eAAQ,EAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAChF,IAAA,eAAQ,EAAC,IAAI,EAAE,cAAc,EAAE,IAAA,eAAQ,EAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAExE,OAAO,IAAI,CAAC;AACd,CAAC;AAjBD,kCAiBC","sourcesContent":["import {getValue, setValue} from \"@tsed/core\";\nimport {OpenSpec3, OpenSpecVersions} from \"@tsed/openspec\";\nimport {mergeSpec} from \"@tsed/schema\";\nimport {mapOpenSpec3} from \"./mapOpenSpec3\";\n\n/**\n * @ignore\n * @param spec\n * @param fileSpec\n * @param version\n * @param acceptMimes\n * @param specVersion\n */\nexport function mapOpenSpec(spec: any, {fileSpec, acceptMimes, specVersion, version}: any): Partial<OpenSpec3> {\n specVersion = specVersion || getValue<OpenSpecVersions>(spec, \"openapi\", \"3.0.1\");\n\n const options = {\n specVersion,\n acceptMimes\n };\n\n spec = mapOpenSpec3(spec, options);\n fileSpec = fileSpec ? mapOpenSpec3(fileSpec, options) : fileSpec;\n\n spec = mergeSpec(spec, fileSpec);\n\n setValue(spec, \"info.title\", getValue(spec, \"info.title\", \"Api documentation\"));\n setValue(spec, \"info.version\", getValue(spec, \"info.version\", version));\n\n return spec;\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapOpenSpec3 = void 0;
|
|
4
|
+
const core_1 = require("@tsed/core");
|
|
5
|
+
const mapOpenSpecInfo_1 = require("./mapOpenSpecInfo");
|
|
6
|
+
/**
|
|
7
|
+
* @ignore
|
|
8
|
+
* @param spec
|
|
9
|
+
* @param version
|
|
10
|
+
* @param specVersion
|
|
11
|
+
*/
|
|
12
|
+
function mapOpenSpec3(spec, { specVersion }) {
|
|
13
|
+
const { servers, paths, components, security, tags, externalDocs } = spec;
|
|
14
|
+
return {
|
|
15
|
+
openapi: specVersion,
|
|
16
|
+
info: (0, mapOpenSpecInfo_1.mapOpenSpecInfo)((0, core_1.getValue)(spec, "info", {})),
|
|
17
|
+
servers,
|
|
18
|
+
paths,
|
|
19
|
+
components,
|
|
20
|
+
security,
|
|
21
|
+
tags,
|
|
22
|
+
externalDocs
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.mapOpenSpec3 = mapOpenSpec3;
|
|
26
|
+
//# sourceMappingURL=mapOpenSpec3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOpenSpec3.js","sourceRoot":"","sources":["../../../src/utils/mapOpenSpec3.ts"],"names":[],"mappings":";;;AAAA,qCAAoC;AAEpC,uDAAkD;AAElD;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,IAAS,EAAE,EAAC,WAAW,EAAM;IACxD,MAAM,EAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC;IAExE,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,IAAA,iCAAe,EAAC,IAAA,eAAQ,EAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO;QACP,KAAK;QACL,UAAU;QACV,QAAQ;QACR,IAAI;QACJ,YAAY;KACb,CAAC;AACJ,CAAC;AAbD,oCAaC","sourcesContent":["import {getValue} from \"@tsed/core\";\nimport {OpenSpec3} from \"@tsed/openspec\";\nimport {mapOpenSpecInfo} from \"./mapOpenSpecInfo\";\n\n/**\n * @ignore\n * @param spec\n * @param version\n * @param specVersion\n */\nexport function mapOpenSpec3(spec: any, {specVersion}: any): Partial<OpenSpec3> {\n const {servers, paths, components, security, tags, externalDocs} = spec;\n\n return {\n openapi: specVersion,\n info: mapOpenSpecInfo(getValue(spec, \"info\", {})),\n servers,\n paths,\n components,\n security,\n tags,\n externalDocs\n };\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapOpenSpecInfo = void 0;
|
|
4
|
+
const core_1 = require("@tsed/core");
|
|
5
|
+
/**
|
|
6
|
+
* @ignore
|
|
7
|
+
* @param info
|
|
8
|
+
*/
|
|
9
|
+
function mapOpenSpecInfo(info) {
|
|
10
|
+
const { title, description, version, termsOfService, contact, license } = info;
|
|
11
|
+
return (0, core_1.cleanObject)({
|
|
12
|
+
version,
|
|
13
|
+
title,
|
|
14
|
+
description,
|
|
15
|
+
termsOfService,
|
|
16
|
+
contact,
|
|
17
|
+
license
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
exports.mapOpenSpecInfo = mapOpenSpecInfo;
|
|
21
|
+
//# sourceMappingURL=mapOpenSpecInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOpenSpecInfo.js","sourceRoot":"","sources":["../../../src/utils/mapOpenSpecInfo.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAGvC;;;GAGG;AACH,SAAgB,eAAe,CAAC,IAA2B;IACzD,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC;IAE7E,OAAO,IAAA,kBAAW,EAAC;QACjB,OAAO;QACP,KAAK;QACL,WAAW;QACX,cAAc;QACd,OAAO;QACP,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAXD,0CAWC","sourcesContent":["import {cleanObject} from \"@tsed/core\";\nimport {OpenSpecInfo} from \"@tsed/openspec\";\n\n/**\n * @ignore\n * @param info\n */\nexport function mapOpenSpecInfo(info: Partial<OpenSpecInfo>): OpenSpecInfo {\n const {title, description, version, termsOfService, contact, license} = info;\n\n return cleanObject({\n version,\n title,\n description,\n termsOfService,\n contact,\n license\n });\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchPath = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const micromatch_1 = (0, tslib_1.__importDefault)(require("micromatch"));
|
|
6
|
+
function matchPath(path, patterns) {
|
|
7
|
+
return patterns && patterns.length ? micromatch_1.default.isMatch(path, patterns) : true;
|
|
8
|
+
}
|
|
9
|
+
exports.matchPath = matchPath;
|
|
10
|
+
//# sourceMappingURL=matchPath.js.map
|