-
-
Notifications
You must be signed in to change notification settings - Fork 209
Open
Description
Prerequisites
- I have written a descriptive issue title
- I have searched existing issues to ensure the regression has not already been reported
Last working version
5.11.1
Stopped working in version
5.12.0
Node.js version
21.x
Operating system
macOS
Operating system version (i.e. 20.04, 11.3, 10)
14.2
💥 Regression Report
allOf schema stringify doesn't work as expected. See details below.
Steps to Reproduce
Here is example:
import FJS from 'fast-json-stringify';
import util from 'util';
const AJV_CONFIG = { removeAdditional: 'all', allErrors: true, coerceTypes: true, strictTypes: false };
const schema = {
allOf: [
{
type: 'object',
properties: {
id: {
type: 'integer'
},
parent_id: {
type: ['null', 'integer'],
default: null
},
name: {
type: 'string'
}
},
required: ['id', 'name']
},
{
type: 'object',
properties: {
integrations: {
type: 'array',
items: {
type: 'object',
properties: {
id: {
type: 'integer'
},
domain: {
type: 'string'
},
is_enabled: {
type: 'boolean'
}
},
required: ['id', 'domain', 'is_enabled']
}
}
},
required: ['integrations']
},
{
type: 'object',
properties: {
parent: {
oneOf: [
{
type: 'object',
properties: {
id: {
type: 'integer'
},
name: {
type: 'string'
}
},
required: ['id', 'name']
},
{
type: 'null'
}
],
default: null
}
}
}
]
};
const s = FJS({ additionalProperties: false, ...schema }, { ajv: AJV_CONFIG });
const input = {
id: 1,
name: 'Name',
integrations: [
{
id: 1,
domain: 'example.com',
is_enabled: 1
}
],
parent_id: 1,
parent: {
id: 1,
name: 'Name'
}
};
console.log(util.inspect(JSON.parse(s(input)), false, null, true));
Expected Behavior
Version 5.11.1
Expected result:
{
id: 1,
parent_id: 1,
name: 'Name',
integrations: [{ id: 1, domain: 'example.com', is_enabled: true }],
parent: { id: 1, name: 'Name' }
}
Next, if i comment down integrations.domain
inside input object i should receive error:
Error: "domain" is required!
Version 5.12.0
Next in version 5.12.0 result will be following:
{
id: 1,
name: 'Name',
integrations: [ { id: 1, domain: 'example.com', is_enabled: 1 } ],
parent_id: 1,
parent: { id: 1, name: 'Name' }
}
We can see that integrations.is_enabled
has wrong type.
Next, if i comment down integrations.domain
inside input object i should receive error, but got this:
{
id: 1,
name: 'Name',
integrations: [ { id: 1, is_enabled: 1 } ],
parent_id: 1,
parent: { id: 1, name: 'Name' }
}
No error fired and domain property is missed. Remove additional props is not working as well.
Thank you for attention.
Cheers.
Metadata
Metadata
Assignees
Labels
No labels