Skip to content

Commit b362254

Browse files
committed
Change default maxSize to 1e7
1 parent 6d7ceac commit b362254

File tree

5 files changed

+30
-13
lines changed

5 files changed

+30
-13
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ Object with the following properties.
7575
#### maxSize
7676

7777
_Type_: `number`\
78-
_Default_: `Number.POSITIVE_INFINITY` (no maximum size)
78+
_Default_: `1e7`
7979

8080
Big JSON strings can make a process, filesystem operation or network request
8181
crash. `maxSize` prevents it by setting a maximum

src/main.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export interface Options {
1010
* Additional properties beyond the size limit are omitted.
1111
* They are completely removed, not truncated (including strings).
1212
*
13-
* @default Number.POSITIVE_INFINITY (no maximum size)
13+
* @default 1e7
1414
*
1515
* @example
1616
* ```js

src/size.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ export const addSize = function ({
5454

5555
// Skip checking for size when `maxSize` option equals this value
5656
const SKIP_MAX_SIZE = Number.POSITIVE_INFINITY
57-
// Default value for `maxSize` option
58-
export const DEFAULT_MAX_SIZE = SKIP_MAX_SIZE
57+
58+
// Default value for `maxSize` option.
59+
// Chosen based on v8 max string length, which is ~5e8.
60+
export const DEFAULT_MAX_SIZE = 1e7
5961

6062
const SIZED_TYPES = {
6163
value: {

test/size/large.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import test from 'ava'
22
import safeJsonValue from 'safe-json-value'
3+
import { each } from 'test-each'
34

45
const V8_MAX_STRING_LENGTH = 5e8
56
const largeString = '\n'.repeat(V8_MAX_STRING_LENGTH)
@@ -32,3 +33,26 @@ test('Handles very large object properties', (t) => {
3233
],
3334
})
3435
})
36+
37+
test('Does not apply options.maxSize if infinite', (t) => {
38+
t.deepEqual(
39+
safeJsonValue(largeString, { maxSize: Number.POSITIVE_INFINITY }),
40+
{ value: largeString, changes: [] },
41+
)
42+
})
43+
44+
each([undefined, { maxSize: undefined }], ({ title }, options) => {
45+
test(`Applies options.maxSize by default | ${title}`, (t) => {
46+
t.deepEqual(safeJsonValue(largeString, options), {
47+
value: undefined,
48+
changes: [
49+
{
50+
path: [],
51+
oldValue: largeString,
52+
newValue: undefined,
53+
reason: 'unsafeSize',
54+
},
55+
],
56+
})
57+
})
58+
})

test/size/omit.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,6 @@ import test from 'ava'
22
import safeJsonValue from 'safe-json-value'
33
import { each } from 'test-each'
44

5-
each(
6-
[undefined, { maxSize: undefined }, { maxSize: Number.POSITIVE_INFINITY }],
7-
({ title }, options) => {
8-
test(`Does not apply options.maxSize by default | ${title}`, (t) => {
9-
t.deepEqual(safeJsonValue({}, options), { value: {}, changes: [] })
10-
})
11-
},
12-
)
13-
145
const symbol = Symbol('test')
156
each(
167
[

0 commit comments

Comments
 (0)