TezXTezX
Examples

Swagger UI

Serve interactive Swagger UI for your API directly from a TezX route.


/**
 * Serves Swagger UI at the specified route using an HTML template.
 * 
 * @param jsonPath - The relative or absolute path to the OpenAPI JSON file (default: "docs.json").
 * @param swaggerVersion - The Swagger UI distribution version to use (default: "5.11.0").
 * @param meta - Optional metadata to customize the Swagger UI HTML page.
 * @param meta.title - The title to display in the browser tab (default: "SwaggerUI").
 * @param meta.metaDescription - A short description for the page (used in <meta> tag).
 * 
 * @returns A middleware function that returns Swagger UI HTML when invoked with a context object.
 * 
 * @example
 * app.get('/docs', swaggerUI('openapi.json'));
 */
export function swaggerUI(
  jsonPath: string = "docs.json",
  swaggerVersion: string = "5.11.0",
  meta?: {
    title?: string;
    metaDescription?: string;
  }
) {
  return (ctx: any) => {
    return ctx.html(`
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>${meta?.title || "SwaggerUI"}</title>
  <meta name="description" content="${meta?.metaDescription || "SwaggerUI Documentation"}" />
  <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@${swaggerVersion}/swagger-ui.css" />
</head>
<body>
  <div id="swagger-ui"></div>
  <script src="https://unpkg.com/swagger-ui-dist@${swaggerVersion}/swagger-ui-bundle.js" crossorigin></script>
  <script src="https://unpkg.com/swagger-ui-dist@${swaggerVersion}/swagger-ui-standalone-preset.js" crossorigin></script>
  <script>
   window.onload = () => {
      window.ui = SwaggerUIBundle({
        url: "${jsonPath}",
        dom_id: '#swagger-ui',
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        layout: "StandaloneLayout",
      });
    };
  </script>
</body>
</html>
`);
  };
}