UNPKG

deepkit-openapi

Version:

[![deepkit-openapi](https://img.shields.io/badge/-deepkit--openapi-green)](https://www.npmjs.com/package/deepkit-openapi) [![npm](https://img.shields.io/npm/v/deepkit-openapi)](https://www.npmjs.com/package/deepkit-openapi) [![deepkit-openapi](https://img

161 lines (160 loc) 7.93 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAPIModule = void 0; /*@ts-ignore*/ const { __ΩOpenAPI } = require("deepkit-openapi-core"); function __assignType(fn, args) { fn.__type = args; return fn; } const app_1 = require("@deepkit/app"); const http_1 = require("@deepkit/http"); const core_1 = require("@deepkit/core"); const module_config_1 = require("./module.config"); const service_1 = require("./service"); const path_1 = require("path"); const yaml_1 = require("yaml"); const event_1 = require("@deepkit/event"); const send_1 = __importDefault(require("send")); const promises_1 = require("fs/promises"); class OpenAPIModule extends (0, app_1.createModuleClass)({ config: module_config_1.OpenAPIConfig, providers: [service_1.OpenAPIService], exports: [service_1.OpenAPIService], }) { constructor() { super(...arguments); this.routeFilter = new http_1.HttpRouteFilter().excludeRoutes({ group: "app-static", }); this.configureOpenApiFunction = () => { }; } configureOpenApi(c) { this.configureOpenApiFunction = c; return this; } configureHttpRouteFilter(c) { c(this.routeFilter); return this; } ; process() { this.addProvider({ provide: http_1.HttpRouteFilter, useValue: this.routeFilter }); const module = this; // Need to overwrite some static files provided by swagger-ui-dist class OpenApiStaticRewritingListener { constructor(openApi, config) { this.openApi = openApi; this.config = config; } serialize() { const openApi = this.openApi.serialize(); openApi.info.title = this.config.title; openApi.info.description = this.config.description; openApi.info.version = this.config.version; module.configureOpenApiFunction(openApi); return openApi; } get staticDirectory() { return (0, path_1.dirname)(require.resolve("swagger-ui-dist")); } get prefix() { return (0, http_1.normalizeDirectory)(this.config.prefix); } get swaggerInitializer() { return ` window.onload = function() { window.ui = SwaggerUIBundle({ url: ${JSON.stringify(this.prefix + "openapi.yml")}, dom_id: '#swagger-ui', deepLinking: true, presets: [ SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset ], plugins: [ SwaggerUIBundle.plugins.DownloadUrl ], layout: "StandaloneLayout" }); }; `; } serve(path, request, response) { if (path.endsWith("/swagger-initializer.js")) { response.setHeader("content-type", "application/javascript; charset=utf-8"); response.end(this.swaggerInitializer); } else if (path.endsWith("/openapi.json")) { const s = JSON.stringify(this.serialize(), undefined, 2); response.setHeader("content-type", "application/json; charset=utf-8"); response.end(s); } else if (path.endsWith("/openapi.yaml") || path.endsWith("/openapi.yml")) { const s = (0, yaml_1.stringify)(this.serialize(), { aliasDuplicateObjects: false, }); response.setHeader("content-type", "text/yaml; charset=utf-8"); response.end(s); } else { return new Promise(__assignType(async (resolve, reject) => { const relativePath = (0, core_1.urlJoin)("/", request.url.substring(this.prefix.length)); if (relativePath === "") { response.setHeader("location", this.prefix + "index.html"); response.status(301); return; } const finalLocalPath = (0, path_1.join)(this.staticDirectory, relativePath); const statResult = await (0, promises_1.stat)(finalLocalPath); if (statResult.isFile()) { const res = (0, send_1.default)(request, path, { root: this.staticDirectory }); res.pipe(response); res.on("end", resolve); } else { response.write(`The static path ${request.url} is not found.`); response.status(404); } }, ['resolve', 'reject', '', 'P"2!"2""/#'])); } } onRoute(event) { var _a; if (event.sent) return; if (event.route) return; if (!((_a = event.request.url) === null || _a === void 0 ? void 0 : _a.startsWith(this.prefix))) return; const relativePath = (0, core_1.urlJoin)("/", event.url.substring(this.prefix.length)); event.routeFound(new http_1.RouteConfig("static", ["GET"], event.url, { type: 'controller', controller: OpenApiStaticRewritingListener, module, methodName: "serve", }), () => ({ arguments: [relativePath, event.request, event.response], parameters: {} })); } } OpenApiStaticRewritingListener.__type = [() => service_1.OpenAPIService, 'openApi', () => module_config_1.OpenAPIConfig, 'config', 'constructor', 'serialize', 'path', () => http_1.HttpRequest, 'request', () => http_1.HttpResponse, 'response', 'serve', () => http_1.httpWorkflow.onRoute.event, 'event', 'onRoute', 'OpenApiStaticRewritingListener', 'PP7!2";P7#2$;"0%P"0&!!!P&2\'P7(2)P7*2+"0,Pi-2."0/5w0']; __decorate([ event_1.eventDispatcher.listen(http_1.httpWorkflow.onRoute, 101) ], OpenApiStaticRewritingListener.prototype, "onRoute", null); this.addListener(OpenApiStaticRewritingListener); } } exports.OpenAPIModule = OpenAPIModule; OpenAPIModule.__type = [() => (0, app_1.createModuleClass)({ config: module_config_1.OpenAPIConfig, providers: [service_1.OpenAPIService], exports: [service_1.OpenAPIService] }), 'routeFilter', function () { return new http_1.HttpRouteFilter().excludeRoutes({ group: "app-static", }); }, () => __ΩOpenAPI, 'openApi', '', 'configureOpenApiFunction', function () { return () => { }; }, () => __ΩOpenAPI, 'c', 'configureOpenApi', () => http_1.HttpRouteFilter, 'filter', 'configureHttpRouteFilter', 'process', 'OpenAPIModule', 'P7!!3"<>#Pn$2%$/&3\'<>(PPn)2%$/&2*"0+PPP7,2-$/&2*"0.!P"0/5w0']; //# sourceMappingURL=module.js.map