@prauga/flexdoc-backend 2.1.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +227 -227
- package/dist/auth.d.ts +11 -0
- package/dist/auth.js +99 -0
- package/dist/auth.js.map +1 -0
- package/dist/auth.test.d.ts +1 -0
- package/dist/auth.test.js +57 -0
- package/dist/auth.test.js.map +1 -0
- package/dist/flexdoc.module.test.js +9 -0
- package/dist/flexdoc.module.test.js.map +1 -1
- package/dist/framework-adapters.d.ts +3 -0
- package/dist/framework-adapters.js +34 -3
- package/dist/framework-adapters.js.map +1 -1
- package/dist/framework-adapters.test.js +44 -13
- package/dist/framework-adapters.test.js.map +1 -1
- package/dist/hono-adapter.d.ts +12 -0
- package/dist/hono-adapter.js +63 -0
- package/dist/hono-adapter.js.map +1 -0
- package/dist/hono-adapter.test.d.ts +1 -0
- package/dist/hono-adapter.test.js +82 -0
- package/dist/hono-adapter.test.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +5 -0
- package/dist/renderer/flexdoc.standalone.css +1 -1
- package/dist/renderer/flexdoc.standalone.js +49 -197
- package/dist/renderer-assets.d.ts +1 -0
- package/dist/renderer-assets.js +6 -2
- package/dist/renderer-assets.js.map +1 -1
- package/dist/setup.js +10 -62
- package/dist/setup.js.map +1 -1
- package/dist/setup.test.js +6 -1
- package/dist/setup.test.js.map +1 -1
- package/dist/template.d.ts +1 -0
- package/dist/template.js +44 -43
- package/dist/template.js.map +1 -1
- package/dist/template.test.js +8 -0
- package/dist/template.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +34 -34
- package/dist/templates/code-examples.njk +0 -106
- package/dist/templates/content.njk +0 -272
- package/dist/templates/footer.njk +0 -38
- package/dist/templates/header.njk +0 -57
- package/dist/templates/layout.njk +0 -647
- package/dist/templates/parameters.njk +0 -64
- package/dist/templates/request-body.njk +0 -63
- package/dist/templates/responses.njk +0 -78
- package/dist/templates/sidebar.njk +0 -117
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flexdoc.module.test.js","sourceRoot":"","sources":["../src/flexdoc.module.test.ts"],"names":[],"mappings":";;AAAA,qDAAiD;AACjD,mCAAuC;
|
|
1
|
+
{"version":3,"file":"flexdoc.module.test.js","sourceRoot":"","sources":["../src/flexdoc.module.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export interface FastifyLikeRequest {
|
|
|
13
13
|
}
|
|
14
14
|
export interface FastifyLikeApplication {
|
|
15
15
|
get(path: string, options: Record<string, unknown>, handler: (req: FastifyLikeRequest, reply: FastifyLikeReply) => any | Promise<any>): void;
|
|
16
|
+
ready?: () => Promise<unknown>;
|
|
17
|
+
swagger?: () => Record<string, unknown>;
|
|
16
18
|
}
|
|
17
19
|
export interface NestLikeApplication {
|
|
18
20
|
getHttpAdapter(): {
|
|
@@ -22,4 +24,5 @@ export interface NestLikeApplication {
|
|
|
22
24
|
}
|
|
23
25
|
export declare function setupExpressFlexDoc(app: ExpressLikeApplication, path: string, options: Omit<FlexDocModuleOptions, 'path'>): void;
|
|
24
26
|
export declare function setupFastifyFlexDoc(app: FastifyLikeApplication, path: string, options: Omit<FlexDocModuleOptions, 'path'>): void;
|
|
27
|
+
export declare function setupFastifySwaggerFlexDoc(app: FastifyLikeApplication, path: string, options?: Omit<FlexDocModuleOptions, 'path' | 'spec' | 'specUrl'>): void;
|
|
25
28
|
export declare function setupNestFlexDoc(app: NestLikeApplication, path: string, swaggerDocumentOptions: Record<string, unknown>, options?: Omit<FlexDocModuleOptions, 'path' | 'spec' | 'specUrl'>): void;
|
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.setupExpressFlexDoc = setupExpressFlexDoc;
|
|
37
37
|
exports.setupFastifyFlexDoc = setupFastifyFlexDoc;
|
|
38
|
+
exports.setupFastifySwaggerFlexDoc = setupFastifySwaggerFlexDoc;
|
|
38
39
|
exports.setupNestFlexDoc = setupNestFlexDoc;
|
|
39
40
|
const crypto = __importStar(require("crypto"));
|
|
40
41
|
const jwt = __importStar(require("jsonwebtoken"));
|
|
@@ -98,11 +99,12 @@ async function loadRemoteSpec(url) {
|
|
|
98
99
|
throw new Error(`Failed to load OpenAPI spec: HTTP ${response.status}`);
|
|
99
100
|
return response.json();
|
|
100
101
|
}
|
|
101
|
-
function
|
|
102
|
+
function setupFastifyFlexDocInternal(app, path, options, specProvider) {
|
|
102
103
|
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
103
104
|
const rendererBasePath = `${normalizedPath}/__flexdoc`;
|
|
104
105
|
const auth = options.options?.auth;
|
|
105
106
|
let remoteSpecPromise = null;
|
|
107
|
+
let generatedSpecPromise = null;
|
|
106
108
|
const routeOptions = auth ? {
|
|
107
109
|
preHandler: async (request, reply) => {
|
|
108
110
|
if (!authorize(request.headers, auth)) {
|
|
@@ -112,6 +114,14 @@ function setupFastifyFlexDoc(app, path, options) {
|
|
|
112
114
|
},
|
|
113
115
|
} : {};
|
|
114
116
|
const resolvedSpec = async () => {
|
|
117
|
+
if (specProvider) {
|
|
118
|
+
if (!generatedSpecPromise)
|
|
119
|
+
generatedSpecPromise = Promise.resolve(specProvider()).catch((error) => {
|
|
120
|
+
generatedSpecPromise = null;
|
|
121
|
+
throw error;
|
|
122
|
+
});
|
|
123
|
+
return generatedSpecPromise;
|
|
124
|
+
}
|
|
115
125
|
if (options.spec)
|
|
116
126
|
return options.spec;
|
|
117
127
|
if (!options.specUrl)
|
|
@@ -133,14 +143,35 @@ function setupFastifyFlexDoc(app, path, options) {
|
|
|
133
143
|
});
|
|
134
144
|
app.get(normalizedPath, routeOptions, async (_request, reply) => {
|
|
135
145
|
try {
|
|
136
|
-
const
|
|
137
|
-
|
|
146
|
+
const assets = (0, renderer_assets_1.getRendererAssets)();
|
|
147
|
+
const html = (0, template_1.generateFlexDocHTML)(await resolvedSpec(), {
|
|
148
|
+
...(options.options || {}),
|
|
149
|
+
rendererBasePath,
|
|
150
|
+
rendererVersion: assets.version,
|
|
151
|
+
});
|
|
152
|
+
return reply
|
|
153
|
+
.type('text/html; charset=utf-8')
|
|
154
|
+
.header('Cache-Control', 'no-cache')
|
|
155
|
+
.send(html);
|
|
138
156
|
}
|
|
139
157
|
catch (error) {
|
|
140
158
|
return reply.code(502).type('text/plain; charset=utf-8').send(`Unable to load OpenAPI specification: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
141
159
|
}
|
|
142
160
|
});
|
|
143
161
|
}
|
|
162
|
+
function setupFastifyFlexDoc(app, path, options) {
|
|
163
|
+
setupFastifyFlexDocInternal(app, path, options);
|
|
164
|
+
}
|
|
165
|
+
function setupFastifySwaggerFlexDoc(app, path, options = {}) {
|
|
166
|
+
setupFastifyFlexDocInternal(app, path, options, async () => {
|
|
167
|
+
if (typeof app.ready === 'function')
|
|
168
|
+
await app.ready();
|
|
169
|
+
if (typeof app.swagger !== 'function') {
|
|
170
|
+
throw new Error('setupFastifySwaggerFlexDoc requires @fastify/swagger to be registered before FlexDoc');
|
|
171
|
+
}
|
|
172
|
+
return app.swagger();
|
|
173
|
+
});
|
|
174
|
+
}
|
|
144
175
|
function setupNestFlexDoc(app, path, swaggerDocumentOptions, options = {}) {
|
|
145
176
|
let SwaggerModule;
|
|
146
177
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-adapters.js","sourceRoot":"","sources":["../src/framework-adapters.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"framework-adapters.js","sourceRoot":"","sources":["../src/framework-adapters.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,kDAEC;AA4GD,kDAEC;AAGD,gEAYC;AAMD,4CAqBC;AA1LD,+CAAiC;AACjC,kDAAoC;AAEpC,uDAAsD;AACtD,mCAAuC;AACvC,yCAAiD;AA2BjD,SAAgB,mBAAmB,CAAC,GAA2B,EAAE,IAAY,EAAE,OAA2C;IACxH,IAAA,oBAAY,EAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,MAAc;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,QAAQ,IAAI,GAAG,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,QAAQ,IAAI,GAAG,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,QAAQ,IAAI,GAAG,CAAC;IAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,QAAQ,IAAI,GAAG,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,OAAsC,EAAE,IAAsD;IAC/G,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,QAAQ,KAAK,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAyB,CAAC;IAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACnD,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,SAAS,IAAI,CAAC;YAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,2BAA2B,CAClC,GAA2B,EAC3B,IAAY,EACZ,OAA2C,EAC3C,YAAuC;IAEvC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChE,MAAM,gBAAgB,GAAG,GAAG,cAAc,YAAY,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;IACnC,IAAI,iBAAiB,GAAwB,IAAI,CAAC;IAClD,IAAI,oBAAoB,GAAwB,IAAI,CAAC;IAErD,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,KAAK,EAAE,OAA2B,EAAE,KAAuB,EAAE,EAAE;YACzE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,oBAAoB;gBAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAChG,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,MAAM,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC;YACH,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,iBAAiB;YAAE,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1F,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QACjF,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAClF,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/H,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAA,8BAAmB,EAAC,MAAM,YAAY,EAAE,EAAE;gBACrD,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,gBAAgB;gBAChB,eAAe,EAAE,MAAM,CAAC,OAAO;aAChC,CAAC,CAAC;YACH,OAAO,KAAK;iBACT,IAAI,CAAC,0BAA0B,CAAC;iBAChC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;iBACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACrK,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAA2B,EAAE,IAAY,EAAE,OAA2C;IACxH,2BAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAGD,SAAgB,0BAA0B,CACxC,GAA2B,EAC3B,IAAY,EACZ,UAAmE,EAAE;IAErE,2BAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;QACzD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU;YAAE,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACvD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAMD,SAAgB,gBAAgB,CAC9B,GAAwB,EACxB,IAAY,EACZ,sBAA+C,EAC/C,UAAmE,EAAE;IAErE,IAAI,aAAkB,CAAC;IACvB,IAAI,CAAC;QACH,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC,EAAE,CAAC;QAChF,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -1,37 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
jest.mock('./renderer-assets', () => ({
|
|
3
|
+
jest.mock('./renderer-assets', () => ({
|
|
4
|
+
getRendererAssets: () => ({
|
|
5
|
+
javascript: 'renderer-js',
|
|
6
|
+
css: 'renderer-css',
|
|
7
|
+
version: 'test-renderer-version',
|
|
8
|
+
}),
|
|
9
|
+
}));
|
|
4
10
|
jest.mock('./template', () => ({ generateFlexDocHTML: jest.fn(() => '<html>docs</html>') }));
|
|
5
11
|
const framework_adapters_1 = require("./framework-adapters");
|
|
6
12
|
const template_1 = require("./template");
|
|
13
|
+
function replyState() {
|
|
14
|
+
const state = { headers: {} };
|
|
15
|
+
const reply = {
|
|
16
|
+
type(value) { state.type = value; return this; },
|
|
17
|
+
header(name, value) { state.headers[name] = value; return this; },
|
|
18
|
+
code(value) { state.code = value; return this; },
|
|
19
|
+
send(value) { state.body = value; return value; },
|
|
20
|
+
};
|
|
21
|
+
return { state, reply };
|
|
22
|
+
}
|
|
7
23
|
describe('setupFastifyFlexDoc', () => {
|
|
24
|
+
beforeEach(() => jest.clearAllMocks());
|
|
8
25
|
it('registers native Fastify docs and renderer routes', async () => {
|
|
9
26
|
const routes = new Map();
|
|
10
27
|
const app = { get: (path, options, handler) => routes.set(path, { options, handler }) };
|
|
11
28
|
(0, framework_adapters_1.setupFastifyFlexDoc)(app, '/docs', { spec: { openapi: '3.1.0', info: { title: 'T', version: '1' }, paths: {} } });
|
|
12
29
|
expect([...routes.keys()]).toEqual(['/docs/__flexdoc/renderer.js', '/docs/__flexdoc/renderer.css', '/docs']);
|
|
13
|
-
const state
|
|
14
|
-
const reply = {
|
|
15
|
-
type(value) { state.type = value; return this; },
|
|
16
|
-
header(name, value) { state.headers[name] = value; return this; },
|
|
17
|
-
code(value) { state.code = value; return this; },
|
|
18
|
-
send(value) { state.body = value; return value; },
|
|
19
|
-
};
|
|
30
|
+
const { state, reply } = replyState();
|
|
20
31
|
await routes.get('/docs').handler({ headers: {} }, reply);
|
|
21
32
|
expect(state.body).toBe('<html>docs</html>');
|
|
22
|
-
expect(template_1.generateFlexDocHTML).
|
|
33
|
+
expect(template_1.generateFlexDocHTML).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({ rendererVersion: 'test-renderer-version' }));
|
|
23
34
|
});
|
|
24
35
|
it('protects Fastify routes when docs auth is configured', async () => {
|
|
25
36
|
const routes = new Map();
|
|
26
37
|
const app = { get: (path, options, handler) => routes.set(path, { options, handler }) };
|
|
27
38
|
(0, framework_adapters_1.setupFastifyFlexDoc)(app, '/docs', { spec: {}, options: { auth: { type: 'basic', secretKey: 'secret' } } });
|
|
28
39
|
const preHandler = routes.get('/docs').options.preHandler;
|
|
29
|
-
const state =
|
|
30
|
-
const reply = {
|
|
31
|
-
header() { return this; }, code(value) { state.code = value; return this; }, send(value) { state.body = value; return value; },
|
|
32
|
-
};
|
|
40
|
+
const { state, reply } = replyState();
|
|
33
41
|
await preHandler({ headers: {} }, reply);
|
|
34
42
|
expect(state.code).toBe(401);
|
|
35
43
|
});
|
|
44
|
+
it('resolves @fastify/swagger only after Fastify is ready', async () => {
|
|
45
|
+
const routes = new Map();
|
|
46
|
+
let ready = false;
|
|
47
|
+
const spec = { openapi: '3.1.0', info: { title: 'Generated', version: '1' }, paths: {} };
|
|
48
|
+
const swagger = jest.fn(() => {
|
|
49
|
+
if (!ready)
|
|
50
|
+
throw new Error('swagger called before ready');
|
|
51
|
+
return spec;
|
|
52
|
+
});
|
|
53
|
+
const app = {
|
|
54
|
+
get: (path, options, handler) => routes.set(path, { options, handler }),
|
|
55
|
+
ready: jest.fn(async () => { ready = true; }),
|
|
56
|
+
swagger,
|
|
57
|
+
};
|
|
58
|
+
(0, framework_adapters_1.setupFastifySwaggerFlexDoc)(app, '/docs');
|
|
59
|
+
expect(app.ready).not.toHaveBeenCalled();
|
|
60
|
+
expect(swagger).not.toHaveBeenCalled();
|
|
61
|
+
const { reply } = replyState();
|
|
62
|
+
await routes.get('/docs').handler({ headers: {} }, reply);
|
|
63
|
+
expect(app.ready).toHaveBeenCalledTimes(1);
|
|
64
|
+
expect(swagger).toHaveBeenCalledTimes(1);
|
|
65
|
+
expect(template_1.generateFlexDocHTML).toHaveBeenCalledWith(spec, expect.any(Object));
|
|
66
|
+
});
|
|
36
67
|
});
|
|
37
68
|
//# sourceMappingURL=framework-adapters.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-adapters.test.js","sourceRoot":"","sources":["../src/framework-adapters.test.ts"],"names":[],"mappings":";;AAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"framework-adapters.test.js","sourceRoot":"","sources":["../src/framework-adapters.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FlexDocModuleOptions } from './interfaces';
|
|
2
|
+
export interface HonoLikeRequest {
|
|
3
|
+
header(name: string): string | undefined;
|
|
4
|
+
}
|
|
5
|
+
export interface HonoLikeContext {
|
|
6
|
+
req: HonoLikeRequest;
|
|
7
|
+
body(body: string | Uint8Array, status?: number, headers?: Record<string, string>): unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface HonoLikeApplication {
|
|
10
|
+
get(path: string, handler: (context: HonoLikeContext) => unknown | Promise<unknown>): unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare function setupHonoFlexDoc(app: HonoLikeApplication, path: string, options: Omit<FlexDocModuleOptions, 'path'>): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupHonoFlexDoc = setupHonoFlexDoc;
|
|
4
|
+
const auth_1 = require("./auth");
|
|
5
|
+
const renderer_assets_1 = require("./renderer-assets");
|
|
6
|
+
const template_1 = require("./template");
|
|
7
|
+
function setupHonoFlexDoc(app, path, options) {
|
|
8
|
+
const normalizedPath = `/${path.trim().replace(/^\/+|\/+$/g, '')}` || '/docs';
|
|
9
|
+
const base = normalizedPath === '/' ? '/docs' : normalizedPath;
|
|
10
|
+
const rendererBasePath = `${base}/__flexdoc`;
|
|
11
|
+
const auth = options.options?.auth;
|
|
12
|
+
const denyUnauthorized = (context) => {
|
|
13
|
+
if (!auth)
|
|
14
|
+
return undefined;
|
|
15
|
+
const decision = (0, auth_1.authorizeFlexDocRequest)(context.req.header('Authorization'), auth);
|
|
16
|
+
if (decision.authorized)
|
|
17
|
+
return undefined;
|
|
18
|
+
return context.body(decision.message || 'Authentication required', 401, {
|
|
19
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
20
|
+
...(decision.challenge ? { 'WWW-Authenticate': decision.challenge } : {}),
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const page = (context) => {
|
|
24
|
+
const denied = denyUnauthorized(context);
|
|
25
|
+
if (denied !== undefined)
|
|
26
|
+
return denied;
|
|
27
|
+
const assets = (0, renderer_assets_1.getRendererAssets)();
|
|
28
|
+
const spec = (options.spec || null);
|
|
29
|
+
const html = (0, template_1.generateFlexDocHTML)(spec, {
|
|
30
|
+
...(options.options || {}),
|
|
31
|
+
specUrl: options.specUrl,
|
|
32
|
+
rendererBasePath,
|
|
33
|
+
rendererVersion: assets.version,
|
|
34
|
+
});
|
|
35
|
+
return context.body(html, 200, {
|
|
36
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
37
|
+
'Cache-Control': 'no-cache',
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
app.get(base, page);
|
|
41
|
+
app.get(`${base}/`, page);
|
|
42
|
+
app.get(`${rendererBasePath}/renderer.js`, (context) => {
|
|
43
|
+
const denied = denyUnauthorized(context);
|
|
44
|
+
if (denied !== undefined)
|
|
45
|
+
return denied;
|
|
46
|
+
const assets = (0, renderer_assets_1.getRendererAssets)();
|
|
47
|
+
return context.body(assets.javascript, 200, {
|
|
48
|
+
'Content-Type': 'application/javascript; charset=utf-8',
|
|
49
|
+
'Cache-Control': 'public, max-age=31536000, immutable',
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
app.get(`${rendererBasePath}/renderer.css`, (context) => {
|
|
53
|
+
const denied = denyUnauthorized(context);
|
|
54
|
+
if (denied !== undefined)
|
|
55
|
+
return denied;
|
|
56
|
+
const assets = (0, renderer_assets_1.getRendererAssets)();
|
|
57
|
+
return context.body(assets.css, 200, {
|
|
58
|
+
'Content-Type': 'text/css; charset=utf-8',
|
|
59
|
+
'Cache-Control': 'public, max-age=31536000, immutable',
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=hono-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono-adapter.js","sourceRoot":"","sources":["../src/hono-adapter.ts"],"names":[],"mappings":";;AAmBA,4CA6DC;AAhFD,iCAAiD;AAEjD,uDAAsD;AACtD,yCAAiD;AAgBjD,SAAgB,gBAAgB,CAC9B,GAAwB,EACxB,IAAY,EACZ,OAA2C;IAE3C,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC;IAC9E,MAAM,IAAI,GAAG,cAAc,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/D,MAAM,gBAAgB,GAAG,GAAG,IAAI,YAAY,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;IAEnC,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAuB,EAAE;QACzE,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAA,8BAAuB,EAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,QAAQ,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAE1C,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,yBAAyB,EAAE,GAAG,EAAE;YACtE,cAAc,EAAE,2BAA2B;YAC3C,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,OAAwB,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAA8C,CAAC;QACjF,MAAM,IAAI,GAAG,IAAA,8BAAmB,EAAC,IAAI,EAAE;YACrC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB;YAChB,eAAe,EAAE,MAAM,CAAC,OAAO;SAChC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAC7B,cAAc,EAAE,0BAA0B;YAC1C,eAAe,EAAE,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;QACnC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;YAC1C,cAAc,EAAE,uCAAuC;YACvD,eAAe,EAAE,qCAAqC;SACvD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;QACnC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;YACnC,cAAc,EAAE,yBAAyB;YACzC,eAAe,EAAE,qCAAqC;SACvD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const auth_1 = require("./auth");
|
|
4
|
+
const hono_adapter_1 = require("./hono-adapter");
|
|
5
|
+
const template_1 = require("./template");
|
|
6
|
+
jest.mock('./template', () => ({
|
|
7
|
+
generateFlexDocHTML: jest.fn().mockReturnValue('<html>Hono docs</html>'),
|
|
8
|
+
}));
|
|
9
|
+
jest.mock('./renderer-assets', () => ({
|
|
10
|
+
getRendererAssets: jest.fn().mockReturnValue({
|
|
11
|
+
javascript: 'window.renderer = true;',
|
|
12
|
+
css: '.renderer { display: block; }',
|
|
13
|
+
version: 'hono-test-version',
|
|
14
|
+
}),
|
|
15
|
+
}));
|
|
16
|
+
function createContext(authorization) {
|
|
17
|
+
return {
|
|
18
|
+
req: {
|
|
19
|
+
header: (name) => name.toLowerCase() === 'authorization' ? authorization : undefined,
|
|
20
|
+
},
|
|
21
|
+
body: (body, status = 200, headers = {}) => ({ body, status, headers }),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
describe('setupHonoFlexDoc', () => {
|
|
25
|
+
let handlers;
|
|
26
|
+
let app;
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
jest.clearAllMocks();
|
|
29
|
+
handlers = new Map();
|
|
30
|
+
app = {
|
|
31
|
+
get: jest.fn((path, handler) => {
|
|
32
|
+
handlers.set(path, handler);
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
it('registers docs, trailing slash, and immutable renderer routes', () => {
|
|
37
|
+
(0, hono_adapter_1.setupHonoFlexDoc)(app, '/docs', { spec: { openapi: '3.0.0' } });
|
|
38
|
+
expect(handlers.has('/docs')).toBe(true);
|
|
39
|
+
expect(handlers.has('/docs/')).toBe(true);
|
|
40
|
+
expect(handlers.has('/docs/__flexdoc/renderer.js')).toBe(true);
|
|
41
|
+
expect(handlers.has('/docs/__flexdoc/renderer.css')).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('passes the shared renderer host options to the page', async () => {
|
|
44
|
+
(0, hono_adapter_1.setupHonoFlexDoc)(app, '/docs', {
|
|
45
|
+
spec: { openapi: '3.0.0' },
|
|
46
|
+
options: { theme: 'dark' },
|
|
47
|
+
});
|
|
48
|
+
const result = await handlers.get('/docs')(createContext());
|
|
49
|
+
expect(result.status).toBe(200);
|
|
50
|
+
expect(result.headers['Cache-Control']).toBe('no-cache');
|
|
51
|
+
expect(template_1.generateFlexDocHTML).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
|
|
52
|
+
theme: 'dark',
|
|
53
|
+
rendererBasePath: '/docs/__flexdoc',
|
|
54
|
+
rendererVersion: 'hono-test-version',
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
it('protects docs and assets with the same basic auth contract as setupFlexDoc', async () => {
|
|
58
|
+
const secretKey = 'hono-secret';
|
|
59
|
+
(0, hono_adapter_1.setupHonoFlexDoc)(app, '/docs', {
|
|
60
|
+
spec: { openapi: '3.0.0' },
|
|
61
|
+
options: { auth: { type: 'basic', secretKey } },
|
|
62
|
+
});
|
|
63
|
+
const deniedDocs = await handlers.get('/docs')(createContext());
|
|
64
|
+
const deniedAsset = await handlers.get('/docs/__flexdoc/renderer.js')(createContext());
|
|
65
|
+
expect(deniedDocs.status).toBe(401);
|
|
66
|
+
expect(deniedDocs.headers['WWW-Authenticate']).toBe('Basic');
|
|
67
|
+
expect(deniedAsset.status).toBe(401);
|
|
68
|
+
const username = 'alice';
|
|
69
|
+
const password = (0, auth_1.generateFlexDocPassword)(username, secretKey);
|
|
70
|
+
const authorization = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;
|
|
71
|
+
const allowed = await handlers.get('/docs')(createContext(authorization));
|
|
72
|
+
expect(allowed.status).toBe(200);
|
|
73
|
+
});
|
|
74
|
+
it('serves renderer assets with immutable caching', async () => {
|
|
75
|
+
(0, hono_adapter_1.setupHonoFlexDoc)(app, '/docs', { spec: { openapi: '3.0.0' } });
|
|
76
|
+
const result = await handlers.get('/docs/__flexdoc/renderer.css')(createContext());
|
|
77
|
+
expect(result.status).toBe(200);
|
|
78
|
+
expect(result.headers['Cache-Control']).toContain('immutable');
|
|
79
|
+
expect(result.body).toBe('.renderer { display: block; }');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=hono-adapter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono-adapter.test.js","sourceRoot":"","sources":["../src/hono-adapter.test.ts"],"names":[],"mappings":";;AAAA,iCAAiD;AACjD,iDAAmE;AACnE,yCAAiD;AAEjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,wBAAwB,CAAC;CACzE,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;QAC3C,UAAU,EAAE,yBAAyB;QACrC,GAAG,EAAE,+BAA+B;QACpC,OAAO,EAAE,mBAAmB;KAC7B,CAAC;CACH,CAAC,CAAC,CAAC;AAQJ,SAAS,aAAa,CAAC,aAAsB;IAC3C,OAAO;QACL,GAAG,EAAE;YACH,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SAC7F;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,QAA+E,CAAC;IACpF,IAAI,GAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,GAAG,GAAG;YACJ,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC7B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,IAAA,+BAAgB,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,IAAA,+BAAgB,EAAC,GAAG,EAAE,OAAO,EAAE;YAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SAC3B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,aAAa,EAAE,CAAe,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,8BAAmB,CAAC,CAAC,oBAAoB,CAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,MAAM,CAAC,gBAAgB,CAAC;YACtB,KAAK,EAAE,MAAM;YACb,gBAAgB,EAAE,iBAAiB;YACnC,eAAe,EAAE,mBAAmB;SACrC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,IAAA,+BAAgB,EAAC,GAAG,EAAE,OAAO,EAAE;YAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;SAChD,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,aAAa,EAAE,CAAe,CAAC;QAC/E,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,6BAA6B,CAAE,CAAC,aAAa,EAAE,CAAe,CAAC;QACtG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,OAAO,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAA,8BAAuB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3F,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAe,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,IAAA,+BAAgB,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,8BAA8B,CAAE,CAAC,aAAa,EAAE,CAAe,CAAC;QAElG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,7 @@ export { FlexDocModule } from './flexdoc.module';
|
|
|
2
2
|
export { FlexDocService } from './flexdoc.service';
|
|
3
3
|
export { FlexDocOptions, FlexDocModuleOptions } from './interfaces';
|
|
4
4
|
export { setupFlexDoc } from './setup';
|
|
5
|
-
export { setupExpressFlexDoc, setupFastifyFlexDoc, setupNestFlexDoc } from './framework-adapters';
|
|
5
|
+
export { setupExpressFlexDoc, setupFastifyFlexDoc, setupFastifySwaggerFlexDoc, setupNestFlexDoc } from './framework-adapters';
|
|
6
6
|
export type { ExpressLikeApplication, FastifyLikeApplication, FastifyLikeReply, FastifyLikeRequest, NestLikeApplication } from './framework-adapters';
|
|
7
|
+
export { setupHonoFlexDoc } from './hono-adapter';
|
|
8
|
+
export type { HonoLikeApplication, HonoLikeContext } from './hono-adapter';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupNestFlexDoc = exports.setupFastifyFlexDoc = exports.setupExpressFlexDoc = exports.setupFlexDoc = exports.FlexDocService = exports.FlexDocModule = void 0;
|
|
3
|
+
exports.setupHonoFlexDoc = exports.setupNestFlexDoc = exports.setupFastifySwaggerFlexDoc = exports.setupFastifyFlexDoc = exports.setupExpressFlexDoc = exports.setupFlexDoc = exports.FlexDocService = exports.FlexDocModule = void 0;
|
|
4
4
|
var flexdoc_module_1 = require("./flexdoc.module");
|
|
5
5
|
Object.defineProperty(exports, "FlexDocModule", { enumerable: true, get: function () { return flexdoc_module_1.FlexDocModule; } });
|
|
6
6
|
var flexdoc_service_1 = require("./flexdoc.service");
|
|
@@ -10,5 +10,8 @@ Object.defineProperty(exports, "setupFlexDoc", { enumerable: true, get: function
|
|
|
10
10
|
var framework_adapters_1 = require("./framework-adapters");
|
|
11
11
|
Object.defineProperty(exports, "setupExpressFlexDoc", { enumerable: true, get: function () { return framework_adapters_1.setupExpressFlexDoc; } });
|
|
12
12
|
Object.defineProperty(exports, "setupFastifyFlexDoc", { enumerable: true, get: function () { return framework_adapters_1.setupFastifyFlexDoc; } });
|
|
13
|
+
Object.defineProperty(exports, "setupFastifySwaggerFlexDoc", { enumerable: true, get: function () { return framework_adapters_1.setupFastifySwaggerFlexDoc; } });
|
|
13
14
|
Object.defineProperty(exports, "setupNestFlexDoc", { enumerable: true, get: function () { return framework_adapters_1.setupNestFlexDoc; } });
|
|
15
|
+
var hono_adapter_1 = require("./hono-adapter");
|
|
16
|
+
Object.defineProperty(exports, "setupHonoFlexDoc", { enumerable: true, get: function () { return hono_adapter_1.setupHonoFlexDoc; } });
|
|
14
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAEvB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAEvB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,2DAA8H;AAArH,yHAAA,mBAAmB,OAAA;AAAE,yHAAA,mBAAmB,OAAA;AAAE,gIAAA,0BAA0B,OAAA;AAAE,sHAAA,gBAAgB,OAAA;AAE/F,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA"}
|
package/dist/interfaces.d.ts
CHANGED
|
@@ -106,6 +106,9 @@ export interface ThemeConfig {
|
|
|
106
106
|
sidebar?: ThemeSidebar;
|
|
107
107
|
methodColors?: MethodColors;
|
|
108
108
|
}
|
|
109
|
+
export type ExpandSection = 'parameters' | 'requestBody' | 'responses' | 'tryIt' | 'codeSamples';
|
|
110
|
+
export type ExpandPreset = 'all' | 'none' | 'minimal' | 'documentation' | 'interactive';
|
|
111
|
+
export type ExpandOption = ExpandPreset | Array<ExpandSection | Exclude<ExpandPreset, 'all' | 'none'>>;
|
|
109
112
|
export interface FlexDocOptions {
|
|
110
113
|
contractVersion?: '1';
|
|
111
114
|
title?: string;
|
|
@@ -123,6 +126,7 @@ export interface FlexDocOptions {
|
|
|
123
126
|
logo?: string | LogoOptions;
|
|
124
127
|
hideDownloadButton?: boolean;
|
|
125
128
|
hideTopbar?: boolean;
|
|
129
|
+
expand?: ExpandOption;
|
|
126
130
|
expandResponses?: string;
|
|
127
131
|
defaultModelsExpandDepth?: number;
|
|
128
132
|
showExtensions?: boolean;
|
|
@@ -147,6 +151,7 @@ export interface FlexDocOptions {
|
|
|
147
151
|
enabled?: boolean;
|
|
148
152
|
defaultServer?: string;
|
|
149
153
|
credentials?: 'omit' | 'same-origin' | 'include';
|
|
154
|
+
apiClientPersistenceKey?: string | false;
|
|
150
155
|
};
|
|
151
156
|
codeSamples?: {
|
|
152
157
|
enabled?: boolean;
|