Skip to content
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@
"//": "Dependencies required at runtime",
"dependencies": {
"@graphile-contrib/pg-simplify-inflector": "6.1.0",
"@koa/router": "15.0.0",
"@koa/bodyparser": "6.0.0",
"@koa/router": "15.0.0",
"dotenv": "17.2.3",
"helmet": "8.1.0",
"koa": "3.1.1",
"koa-compress": "5.1.1",
"koa-helmet": "8.0.1",
"pg": "8.16.3",
"postgraphile": "4.14.1"
},
Expand Down
16 changes: 3 additions & 13 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 7 additions & 3 deletions src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ vi.mock('./config.js', () => ({
vi.mock('./middleware/index.js', () => ({
bodyParser: vi.fn().mockName('bodyParser'),
compress: vi.fn().mockName('compress'),
helmet: vi.fn().mockName('helmet'),
helmet: vi
.fn()
.mockName('helmet')
.mockReturnValue(vi.fn().mockName('helmet-middleware')),
postGraphile: vi.fn().mockName('postGraphile'),
}))
vi.mock('./router/index.js', () => ({
Expand All @@ -43,7 +46,7 @@ describe('index', () => {
})

it('should be tested', async () => {
expect.assertions(12)
expect.assertions(13)

await import('./index.js')

Expand All @@ -53,7 +56,8 @@ describe('index', () => {
expect.soft(mockKoaInstance.use).toHaveBeenCalledTimes(6)
expect.soft(mockKoaInstance.use).toHaveBeenCalledWith(bodyParser)
expect.soft(mockKoaInstance.use).toHaveBeenCalledWith(compress)
expect.soft(mockKoaInstance.use).toHaveBeenCalledWith(helmet)
expect.soft(helmet).toHaveBeenCalledWith()
expect.soft(mockKoaInstance.use).toHaveBeenCalledWith(helmet())
expect.soft(healthRouter.routes).toHaveBeenCalledOnce()
expect.soft(mockKoaInstance.use).toHaveBeenCalledWith(healthRouter.routes())
expect.soft(healthRouter.allowedMethods).toHaveBeenCalledOnce()
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ app
// register common middleware
.use(bodyParser)
.use(compress)
.use(helmet)
.use(helmet())
// register health router
.use(healthRouter.routes())
.use(healthRouter.allowedMethods())
Expand Down
8 changes: 4 additions & 4 deletions src/middleware/helmet.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import helmet from 'koa-helmet'
import helmet from 'helmet'
import { describe, expect, it, vi } from 'vitest'

vi.mock('koa-helmet')
vi.mock('helmet')

describe('helmet', () => {
it('should export helmet', async () => {
expect.assertions(2)

const { default: actual } = await import('./helmet.js')

expect(helmet.default).toHaveBeenCalledOnce()
expect(actual).toStrictEqual(helmet.default())
expect(helmet).toHaveBeenCalledOnce()
expect(actual).toStrictEqual(helmet)
})
})
20 changes: 18 additions & 2 deletions src/middleware/helmet.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
import helmet from 'koa-helmet'
import helmet, { type HelmetOptions } from 'helmet'
import type { Middleware } from 'koa'

export default helmet.default()
/**
* Koa-compatible Helmet middleware.
*
* Accepts the same options helmet() does.
*/
export default function (options?: HelmetOptions): Middleware {

Check warning on line 9 in src/middleware/helmet.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

The function should be named.

See more on https://sonarcloud.io/project/issues?id=BSStudio_bss-web-graphql-backend&issues=AZr5Cgz-mYQ2rrKlCw-w&open=AZr5Cgz-mYQ2rrKlCw-w&pullRequest=379
const expressHelmet = helmet(options)
return async (ctx, next) => {
return new Promise<void>((resolve, reject) => {
expressHelmet(ctx.req, ctx.res, (err) => {
if (err) return reject(err)
resolve(next())
})
})
}
}
Loading