fast-json-stringify 5.9.2 → 5.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -590,6 +590,8 @@ Otherwise, instead of raising an error, null values will be coerced as follows:
590
590
  - `number` -> `0`
591
591
  - `string` -> `""`
592
592
  - `boolean` -> `false`
593
+ - `object` -> `{}`
594
+ - `array` -> `[]`
593
595
 
594
596
  <a name="largearrays"></a>
595
597
  #### Large Arrays
package/index.js CHANGED
@@ -560,10 +560,13 @@ function buildObject (context, location) {
560
560
  let functionCode = `
561
561
  `
562
562
 
563
+ const nullable = schema.nullable === true
563
564
  functionCode += `
564
565
  // ${schemaRef}
565
566
  function ${functionName} (input) {
566
567
  const obj = ${toJSON('input')}
568
+ ${!nullable ? 'if (obj === null) return \'{}\'' : ''}
569
+
567
570
  ${buildInnerObject(context, location)}
568
571
  }
569
572
  `
@@ -601,7 +604,9 @@ function buildArray (context, location) {
601
604
  // ${schemaRef}
602
605
  `
603
606
 
607
+ const nullable = schema.nullable === true
604
608
  functionCode += `
609
+ ${!nullable ? 'if (obj === null) return \'[]\'' : ''}
605
610
  if (!Array.isArray(obj)) {
606
611
  throw new TypeError(\`The value of '${schemaRef}' does not match schema definition.\`)
607
612
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-json-stringify",
3
- "version": "5.9.2",
3
+ "version": "5.10.0",
4
4
  "description": "Stringify your JSON at max speed",
5
5
  "main": "index.js",
6
6
  "type": "commonjs",
@@ -127,7 +127,7 @@ test('not fail on null sub-object declared nullable', (t) => {
127
127
  t.equal('{"product":null}', stringify(object))
128
128
  })
129
129
 
130
- test('throw an error on non nullable null sub-object', (t) => {
130
+ test('on non nullable null sub-object it should coerce to {}', (t) => {
131
131
  t.plan(1)
132
132
 
133
133
  const stringify = build({
@@ -148,10 +148,12 @@ test('throw an error on non nullable null sub-object', (t) => {
148
148
  const object = {
149
149
  product: null
150
150
  }
151
- t.throws(() => { stringify(object) })
151
+
152
+ const result = stringify(object)
153
+ t.equal(result, JSON.stringify({ product: {} }))
152
154
  })
153
155
 
154
- test('throw an error on non nullable null object', (t) => {
156
+ test('on non nullable null object it should coerce to {}', (t) => {
155
157
  t.plan(1)
156
158
 
157
159
  const stringify = build({
@@ -170,5 +172,32 @@ test('throw an error on non nullable null object', (t) => {
170
172
  }
171
173
  }
172
174
  })
173
- t.throws(() => { stringify(null) })
175
+
176
+ const result = stringify(null)
177
+ t.equal(result, '{}')
178
+ })
179
+
180
+ test('on non-nullable null object it should skip rendering, skipping required fields checks', (t) => {
181
+ t.plan(1)
182
+
183
+ const stringify = build({
184
+ title: 'simple object',
185
+ nullable: false,
186
+ type: 'object',
187
+ properties: {
188
+ product: {
189
+ nullable: false,
190
+ type: 'object',
191
+ properties: {
192
+ name: {
193
+ type: 'string'
194
+ }
195
+ }
196
+ }
197
+ },
198
+ required: ['product']
199
+ })
200
+
201
+ const result = stringify(null)
202
+ t.equal(result, '{}')
174
203
  })
@@ -467,7 +467,7 @@ test('class instance that is simultaneously a string and a json', (t) => {
467
467
  t.equal(valueObj, '{"simultaneously":{"foo":"hello"}}')
468
468
  })
469
469
 
470
- test('should throw an error when type is array and object is null', (t) => {
470
+ test('should not throw an error when type is array and object is null, it should instead coerce to []', (t) => {
471
471
  t.plan(1)
472
472
  const schema = {
473
473
  type: 'object',
@@ -482,7 +482,8 @@ test('should throw an error when type is array and object is null', (t) => {
482
482
  }
483
483
 
484
484
  const stringify = build(schema)
485
- t.throws(() => stringify({ arr: null }), new TypeError('The value of \'#/properties/arr\' does not match schema definition.'))
485
+ const result = stringify({ arr: null })
486
+ t.equal(result, JSON.stringify({ arr: [] }))
486
487
  })
487
488
 
488
489
  test('should throw an error when type is array and object is not an array', (t) => {