UNPKG

@nestjsvn/swagger-sse

Version:

OpenAPI documentation and interactive Swagger UI for NestJS Server-Sent Events endpoints

84 lines (83 loc) 3.32 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupSsePlugin = setupSsePlugin; exports.setupSsePluginAdvanced = setupSsePluginAdvanced; const swagger_1 = require("@nestjs/swagger"); const node_path_1 = __importDefault(require("node:path")); const plugin_1 = require("./plugin"); // eslint-disable-next-line @typescript-eslint/no-var-requires const express = require('express'); /** * Setup SSE plugin for Swagger UI * * This function configures Swagger UI with SSE support by: * - Adding the SwaggerSsePlugin to the plugins array * - Including custom JS and CSS assets * - Setting up the Swagger UI with enhanced SSE capabilities * * @param app NestJS application instance * @param document OpenAPI document * @param path Swagger UI path * @param options Additional Swagger options * * @example * ```typescript * const document = SwaggerModule.createDocument(app, config); * setupSsePlugin(app, document, 'api-docs'); * ``` */ function setupSsePlugin(app, document, swaggerPath, options) { app.use('/swagger-sse-assets', express.static(node_path_1.default.join(__dirname, 'assets'))); const sseOptions = { ...options, swaggerOptions: { ...options?.swaggerOptions, plugins: [...(options?.swaggerOptions?.plugins || []), plugin_1.SwaggerSsePlugin], }, customJs: [...(options?.customJs ?? []), '/swagger-sse-assets/sse-plugin.js'], customCssUrl: [...(options?.customCssUrl ?? []), '/swagger-sse-assets/sse-plugin.css'], }; swagger_1.SwaggerModule.setup(swaggerPath, app, document, sseOptions); } /** * Advanced setup with custom configuration */ function setupSsePluginAdvanced(app, document, swaggerPath, options) { // Serve SSE plugin assets with configuration app.use('/swagger-sse-assets', express.static(node_path_1.default.join(__dirname, 'assets'))); // Inject SSE configuration const sseConfig = { enableEventFiltering: true, enableEventSearch: true, maxEventLogSize: 1000, enableExport: true, enableReconnection: true, reconnectionDelay: 3000, ...options?.sseConfig, }; const configScript = ` <script> window.SSE_PLUGIN_CONFIG = ${JSON.stringify(sseConfig)}; </script> `; const sseOptions = { ...options, swaggerOptions: { ...options?.swaggerOptions, plugins: [...(options?.swaggerOptions?.plugins ?? []), plugin_1.SwaggerSsePlugin], }, customJs: [...(options?.customJs ?? []), '/swagger-sse-assets/sse-plugin.js'], customCssUrl: [...(options?.customCssUrl ?? []), '/swagger-sse-assets/sse-plugin.css'], customSiteTitle: options?.customSiteTitle ?? 'API Documentation with SSE Support', customfavIcon: options?.customfavIcon, swaggerUrl: options?.swaggerUrl, explorer: options?.explorer !== false, }; // Inject SSE configuration script const existingCustomJs = sseOptions.customJs ?? []; sseOptions.customJs = [...existingCustomJs, configScript]; swagger_1.SwaggerModule.setup(swaggerPath, app, document, sseOptions); }