grantila / suretype

Typesafe JSON (Schema) validator
508 stars 9 forks source link

JSON schema does not explicitly add "additionProperties: false" #41

Open crobinson42 opened 1 year ago

crobinson42 commented 1 year ago

This validator:

v
  .object({
    id: v.string().required(),
    username: v.string(),
    nested: v.object({
      email: v.string(),
    }),
  })

Will produce this json-schema:

{
  type: 'object',
  properties: {
    id: { type: 'string' },
    username: { type: 'string' },
    nested: { type: 'object', properties: [Object] }
  },
  required: [ 'id' ]
}

The problem here is that JSON-schema validators like ajv infer if there is no additionalProperties: false then additional properties are allowed. This conflicts with the implementation of the ObjectValidator because if you want to allow additional properties you are required to chain .additional({ ... }) which should imply to the developer that when .additional({...}) is not used then to expect _additionalProperties: false_ in the json-schema output.