You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have searched existing issues to ensure the bug has not already been reported
Fastify version
4.15.0
Plugin version
No response
Node.js version
18.12.1
Operating system
Linux
Operating system version (i.e. 20.04, 11.3, 10)
Ubuntu 22.10
Description
toJSON() is not called on objects before attempting to match a schema in oneOf, resulting in an error "does not match schema definition". When oneOf is not used, the same schema matches, works, and serializes.
Steps to Reproduce
constfastJson=require('fast-json-stringify');// schema using oneOfconststringifyOneOf=fastJson({description: 'transfer failed.',oneOf: [{type: 'object',description: 'Invalid withdrawal address provided.',properties: {error: {type: 'string',const: 'INVALID_ADDRESS'},},required: ['error'],additionalProperties: false,},{type: 'object',description: 'Cannot afford this transfer + fee.',properties: {error: {type: 'string',const: 'INSUFFICIENT_ACCOUNT_BALANCE'},balance: {type: 'object',description: 'Available balance for this currency.',properties: {value: {type: 'string'},currency: {type: 'string'},},additionalProperties: false,required: ['value','currency'],},},required: ['error','balance'],additionalProperties: false,},],});// schema with no oneOfconststringify=fastJson({type: 'object',description: 'Cannot afford this transfer + fee.',properties: {error: {type: 'string',const: 'INSUFFICIENT_ACCOUNT_BALANCE'},balance: {type: 'object',description: 'Available balance for this currency.',properties: {value: {type: 'string'},currency: {type: 'string'},},additionalProperties: false,required: ['value','currency'],},},required: ['error','balance'],additionalProperties: false,});// custom class with toJSON() methodclassBalance{constructor(value,currency){this._value=value;this._currency=currency;}toJSON(){return{value: this._value,currency: this._currency,};}}constbalance=newBalance(100,'USD');// will throw 'The value of '#' does not match schema definition.'console.log(stringifyOneOf({error: 'INSUFFICIENT_ACCOUNT_BALANCE',
balance,}));// stringifies as expectedconsole.log(stringify({error: 'INSUFFICIENT_ACCOUNT_BALANCE',
balance,}));
Expected Behavior
the schema inside oneOf should match as it is the same schema that works when used outside of oneOf - toJSON() not called on objects before matching?
The text was updated successfully, but these errors were encountered:
@unek Hi, when you add the oneOf, anyOf or if/then keywords to the schema, FJS validates your input data to match it with one of the options. It validates it before the toJSONcall happens, so it seems like an expected behavior for me.
Prerequisites
Fastify version
4.15.0
Plugin version
No response
Node.js version
18.12.1
Operating system
Linux
Operating system version (i.e. 20.04, 11.3, 10)
Ubuntu 22.10
Description
toJSON()
is not called on objects before attempting to match a schema inoneOf
, resulting in an error "does not match schema definition". When oneOf is not used, the same schema matches, works, and serializes.Steps to Reproduce
Expected Behavior
the schema inside
oneOf
should match as it is the same schema that works when used outside ofoneOf
-toJSON()
not called on objects before matching?The text was updated successfully, but these errors were encountered: