fireschema icon indicating copy to clipboard operation
fireschema copied to clipboard

Check keys().hasOnly() for nested object

Open PegasisForever opened this issue 3 years ago • 0 comments

For type definition:

const DBData = z.object({
  nested: z.object({
    a: z.string(),
    b: z.string(),
  }),
})

The following validator is generated:

function __validator_0__(data) {
  return (__validator_meta__(data) && (
    __validator_keys__(data, ['nested'])
      && (data.nested.a is string && data.nested.b is string)
  ));
}

However the validator doesn't check if there's extra keys in data.nested, so the following data would be allowed:

{
  nested: {
    a: '',
    b: '',
    other: 'hey!',
  },
}

Fireschema should generate something like:

function __validator_0__(data) {
  return (__validator_meta__(data) && (
    __validator_keys__(data, ['nested'])
      && (data.nested.a is string && data.nested.b is string && data.nested.keys().hasOnly(['a', 'b']))
  ));
}

PegasisForever avatar Jan 20 '22 21:01 PegasisForever