@@ -6,38 +6,29 @@ import { ScalarRender } from './scalar'
66import { toOpenAPISchema } from './openapi'
77
88import type { OpenAPIV3 } from 'openapi-types'
9- import type { ReferenceConfiguration } from '@scalar/types'
9+ import type { ApiReferenceConfiguration } from '@scalar/types'
1010import type { ElysiaOpenAPIConfig , OpenAPIProvider } from './types'
1111
1212/**
13- * Plugin for [elysia](https://github.com/elysiajs/elysia) that auto-generate Swagger page.
13+ * Plugin for [elysia](https://github.com/elysiajs/elysia) that auto-generate OpenAPI documentation page.
1414 *
1515 * @see https://github.com/elysiajs/elysia-swagger
1616 */
1717export const openapi = <
18+ const Enabled extends boolean = true ,
1819 const Path extends string = '/openapi' ,
1920 const Provider extends OpenAPIProvider = 'scalar'
2021> ( {
21- provider = 'scalar' ,
22+ enabled = true as Enabled ,
2223 path = '/openapi' as Path ,
24+ provider = 'scalar' as Provider ,
2325 specPath = `${ path } /json` ,
2426 documentation = { } ,
2527 exclude,
2628 swagger,
2729 scalar
28- } : ElysiaOpenAPIConfig < Path , Provider > = { } ) => {
29- const {
30- version : swaggerVersion = '5.9.0' ,
31- theme : swaggerTheme = `https://unpkg.com/swagger-ui-dist@${ swaggerVersion } /swagger-ui.css` ,
32- autoDarkMode = true ,
33- ...swaggerOptions
34- } = swagger ?? { }
35-
36- const {
37- version : scalarVersion = 'latest' ,
38- cdn : scalarCDN = '' ,
39- ...scalarConfig
40- } = scalar ?? { }
30+ } : ElysiaOpenAPIConfig < Enabled , Path , Provider > = { } ) => {
31+ if ( ! enabled ) return new Elysia ( { name : '@elysiajs/openapi' } )
4132
4233 const info = {
4334 title : 'Elysia Documentation' ,
@@ -51,46 +42,28 @@ export const openapi = <
5142 let totalRoutes = 0
5243 let cachedSchema : OpenAPIV3 . Document | undefined
5344
54- const app = new Elysia ( { name : '@elysiajs/swagger ' } )
45+ const app = new Elysia ( { name : '@elysiajs/openapi ' } )
5546 . use ( ( app ) => {
5647 if ( provider === null ) return app
5748
5849 return app . get (
5950 path ,
6051 new Response (
6152 provider === 'swagger-ui'
62- ? SwaggerUIRender (
63- info ,
64- swaggerVersion ,
65- swaggerTheme ,
66- JSON . stringify (
67- {
68- url : relativePath ,
69- dom_id : '#swagger-ui' ,
70- ...swaggerOptions
71- } ,
72- ( _ , value ) =>
73- typeof value === 'function'
74- ? undefined
75- : value
76- ) ,
77- autoDarkMode
78- )
79- : ScalarRender (
80- info ,
81- scalarVersion ,
82- {
83- spec : {
84- url : relativePath ,
85- ...scalarConfig . spec
86- } ,
87- ...scalarConfig ,
88- // so we can showcase the elysia theme
89- // @ts -expect-error
90- _integration : 'elysiajs'
91- } satisfies ReferenceConfiguration ,
92- scalarCDN
93- ) ,
53+ ? SwaggerUIRender ( info , {
54+ url : relativePath ,
55+ dom_id : '#swagger-ui' ,
56+ version : 'latest' ,
57+ autoDarkMode : true ,
58+ ...swagger
59+ } )
60+ : ScalarRender ( info , {
61+ url : relativePath ,
62+ version : 'latest' ,
63+ cdn : `https://cdn.jsdelivr.net/npm/@scalar/api-reference@${ scalar ?. version ?? 'latest' } /dist/browser/standalone.min.js` ,
64+ ...( scalar as ApiReferenceConfiguration ) ,
65+ _integration : 'elysiajs'
66+ } ) ,
9467 {
9568 headers : {
9669 'content-type' : 'text/html; charset=utf8'
@@ -155,4 +128,5 @@ export const openapi = <
155128
156129export { toOpenAPISchema , withHeaders } from './openapi'
157130export type { ElysiaOpenAPIConfig }
131+
158132export default openapi
0 commit comments