UNPKG

@sigiljs-community/swagger-ui-plugin

Version:

Plugin for SigilJS framework, that generates and serves Swagger UI at a configurable endpoint

2 lines (1 loc) 1.18 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("@sigiljs-community/openapi-plugin"),o=require("@sigiljs/sigil"),u=require("node:path"),g=require("./gen/generateHtml.js"),p=t=>t&&t.__esModule?t:{default:t},c=p(u);class d extends o.SigilPlugin{static name="SwaggerUiPlugin";#t;#e;#i="";constructor(){super(),this.#e=require("swagger-ui-dist"),this.#t=(this.$pluginConfig.path??"/docs/").trim(),this.#t.endsWith("/")||(this.#t+="/")}onInitialize(){if(!this.#e)return;const n=this.#e.absolutePath();this.sigil.addMiddleware(async(i,e,a)=>{if(i.path.startsWith(this.#t.slice(0,-1))){if([".js",".css"].some(s=>i.path.endsWith(s))){const s=e.fileResponse(c.default.join(n,i.path.slice(this.#t.length)));return a.headers&&Object.entries(a.headers).forEach(([r,l])=>{s.headers.set(r,l)}),s}return e.rawResponse(this.#i,{...a.headers||{},"content-type":"text/html"})}})}async onUpdateCallback(){const n=this.sigil.plugin(h.OpenApiPlugin),{path:i,...e}=this.$pluginConfig;this.#i=await g.default({...e,base:this.#t,swaggerInitOptions:{...e.swaggerInitOptions,swaggerDoc:n.openApiDefinition}})}}exports.default=d;