fastify-no-additional-properties

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


Keywords
fastify, plugin, json, schema, additionalProperties, additional-pro, fastify-pl, json-sche
License
MIT
Install
npm install fastify-no-additional-properties@2.5.0

Documentation

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

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

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