Add additionalProperties: false
by default to your JSON Schemas.
Under Fastify, when a JSON schema is defined without the additionalProperties
field, the output will be the same as defining It as true
. I think that this is somehow counterintuitive.
This plugin will default that field to false
by default. It's also possible to configure which schema needs to be updated.
All schemas are updated by copying the entire definition, so the source objects are left untouched.
- Zero dependencies: small footprint (ignoring
fastify-plugin
). - ESM: future proof for the next Node.js releases.
- Common.js support: still compatible with older runtimes.
- Sane defaults: I suppose.
- TypeScript: types declaration included.
npm install --save fastify-no-additional-properties
This plugin now targets Fastify v5.
Use npm install fastify-no-additional-properties@^2.5.0
for Fastify v4.
import Fastify from 'fastify'
import noAdditionalProperties from 'fastify-no-additional-properties'
const fastify = Fastify({
logger: true
})
fastify.register(noAdditionalProperties, {
/**
* If true, update the request body schema.
* @default true
*/
body: true,
/**
* If true, update the request headers schema.
* @default false
*/
headers: false,
/**
* If true, update the URL parameters schema.
* @default false
*/
params: false,
/**
* If true, update the URL querystring schema.
* @default true
*/
query: true,
/**
* If true, update all response schemas.
* @default false
*/
response: false,
/**
* If true, update schemas registered **AFTER** this plugin registration.
* @default false
*/
ref: false
})
// From now on, all registered routes will have additionalProperties: false by default.
fastify.listen({ port: 3000 }, (err, address) => {
if (err) {
fastify.log.fatal({ err }, 'bootstrap failed')
process.exit(1)
}
// Server is now listening on ${address}
})