Skip to content

Commit 188ab59

Browse files
committed
feat: add a trailing slash redirect in docs path
use "joi" package instead of deprecated "@hapi/joi"
1 parent e57d37b commit 188ab59

File tree

4 files changed

+239
-182
lines changed

4 files changed

+239
-182
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"reflect-metadata": "^0.1.12"
2929
},
3030
"dependencies": {
31-
"@hapi/joi": "^17.1.1",
31+
"joi": "^17.4.2",
3232
"@nestjs/common": "^8.0.0",
3333
"@nestjs/swagger": "^5.0.0",
3434
"express-basic-auth": "^1.2.0",
@@ -43,7 +43,7 @@
4343
"@nestjs/testing": "^8.0.0",
4444
"@types/express": "^4.17.8",
4545
"@types/express-handlebars": "^3.1.0",
46-
"@types/hapi__joi": "^17.1.6",
46+
"@types/joi": "^17.2.3",
4747
"@types/jest": "^26.0.15",
4848
"@types/node": "^14.14.6",
4949
"@types/supertest": "^2.0.10",

src/model/options.model.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Joi = require('@hapi/joi');
1+
import Joi = require('joi');
22
import { OpenAPIObject } from '@nestjs/swagger';
33

44
export const schema = (document: OpenAPIObject) =>

src/redoc-module.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import handlebars from 'express-handlebars';
77
import pathModule from 'path';
88
import { resolve } from 'url';
99
import { LogoOptions, RedocDocument, RedocOptions } from './interfaces';
10-
import { schema } from './model/options.model';
10+
import { schema } from './model';
1111

1212
export class RedocModule {
1313
/**
@@ -121,10 +121,16 @@ export class RedocModule {
121121
'views',
122122
'redoc.handlebars'
123123
);
124+
124125
// get handlebars rendered HTML
125126
const redocHTML = await hbs.render(redocFilePath, renderData);
126127
// Serve ReDoc Frontend
127128
httpAdapter.get(finalPath, async (req: Request, res: Response) => {
129+
if (!req.url.endsWith('/')) {
130+
res.redirect(301, req.url + '/');
131+
return;
132+
}
133+
128134
const sendPage = () => {
129135
// Content-Security-Policy: worker-src 'self' blob:
130136
res.setHeader(
@@ -147,6 +153,7 @@ export class RedocModule {
147153
sendPage();
148154
}
149155
});
156+
150157
// Serve swagger spec json
151158
httpAdapter.get(docUrl, (req: Request, res: Response) => {
152159
res.setHeader('Content-Type', 'application/json');

0 commit comments

Comments
 (0)