Skip to content

Add `additionalProperties: false` by default to your JSON Schemas

License

Notifications You must be signed in to change notification settings

greguz/fastify-no-additional-properties

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fastify-no-additional-properties

npm version Libraries.io dependency status for latest release ci Coverage Status JavaScript Style Guide

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.

Features

  • 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.

Install

npm install --save fastify-no-additional-properties

Fastify version support

This plugin now targets Fastify v5.

Use npm install fastify-no-additional-properties@^2.5.0 for Fastify v4.

Usage

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}
})