Skip to content

Commit f549ab6

Browse files
committed
fix: Respect ignoreTrailingSlash.
Fixes #5
1 parent a8ade28 commit f549ab6

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/ui.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ import { resolve } from 'node:path'
77
import { getAbsoluteFSPath } from 'swagger-ui-dist'
88

99
export function addUI(instance: FastifyInstance, prefix: string): void {
10+
let indexUrl = `${prefix}/`
11+
12+
if (instance.initialConfig.ignoreTrailingSlash) {
13+
indexUrl += 'index.html'
14+
}
15+
1016
// Get the main index file and patch it
1117
const swaggerUIRoot = getAbsoluteFSPath()
1218
const swaggerUIInitializer = readFileSync(resolve(swaggerUIRoot, 'swagger-initializer.js'), 'utf8').replace(
@@ -19,7 +25,7 @@ export function addUI(instance: FastifyInstance, prefix: string): void {
1925
method: 'GET',
2026
url: prefix,
2127
handler(_: FastifyRequest, reply: FastifyReply): void {
22-
reply.redirect(301, `${prefix}/`)
28+
reply.redirect(301, indexUrl)
2329
}
2430
})
2531

test/ui.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,49 @@ t.test('UI serving', t => {
6969
t.ok(initializerBodyV2.indexOf('url: "/v2/openapi.json",') > 0)
7070
})
7171

72+
t.test('should respect ignoreTrailingSlash option', async t => {
73+
{
74+
const server = fastify({ ignoreTrailingSlash: false })
75+
76+
await server.register(fastifyOpenApiDocs, {})
77+
78+
const initialRequest = await server.inject('/docs')
79+
80+
t.equal(initialRequest.statusCode, 301)
81+
t.equal(initialRequest.body, '')
82+
t.equal(initialRequest.headers.location, '/docs/')
83+
84+
const redirectedRequest = await server.inject('/docs/')
85+
t.equal(redirectedRequest.statusCode, 200)
86+
}
87+
88+
{
89+
const server = fastify({ ignoreTrailingSlash: true })
90+
91+
await server.register(fastifyOpenApiDocs, {})
92+
93+
const initialRequest = await server.inject('/docs')
94+
95+
t.equal(initialRequest.statusCode, 301)
96+
t.equal(initialRequest.body, '')
97+
t.equal(initialRequest.headers.location, '/docs/index.html')
98+
}
99+
100+
{
101+
const server = fastify({ ignoreTrailingSlash: true })
102+
103+
await server.register(fastifyOpenApiDocs, {})
104+
105+
const initialRequest = await server.inject('/docs/')
106+
107+
t.equal(initialRequest.statusCode, 301)
108+
t.equal(initialRequest.body, '')
109+
t.equal(initialRequest.headers.location, '/docs/index.html')
110+
111+
const redirectedRequest = await server.inject('/docs/index.html')
112+
t.equal(redirectedRequest.statusCode, 200)
113+
}
114+
})
115+
72116
t.end()
73117
})

0 commit comments

Comments
 (0)