deepkit-openapi
Version:
[](https://www.npmjs.com/package/deepkit-openapi) [](https://www.npmjs.com/package/deepkit-openapi) [ • 7.93 kB
JavaScript
;
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