@nestjsvn/swagger-sse
Version:
OpenAPI documentation and interactive Swagger UI for NestJS Server-Sent Events endpoints
84 lines (83 loc) • 3.32 kB
JavaScript
;
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);
}