@@ -4,7 +4,7 @@ import { describe, expect, test } from 'vitest'
4
4
5
5
import type { DataItemProps , Path } from '../src'
6
6
import { applyValue , createDataType , isCycleReference } from '../src'
7
- import { circularStringify , segmentArray } from '../src/utils'
7
+ import { safeStringify , segmentArray } from '../src/utils'
8
8
9
9
describe ( 'function applyValue' , ( ) => {
10
10
const patches : any [ ] = [ { } , undefined , 1 , '2' , 3n , 0.4 ]
@@ -239,7 +239,7 @@ describe('function segmentArray', () => {
239
239
describe ( 'function circularStringify' , ( ) => {
240
240
test ( 'should works as JSON.stringify' , ( ) => {
241
241
const obj = { foo : 1 , bar : 2 }
242
- expect ( circularStringify ( obj ) ) . to . eq ( JSON . stringify ( obj ) )
242
+ expect ( safeStringify ( obj ) ) . to . eq ( JSON . stringify ( obj ) )
243
243
} )
244
244
245
245
test ( 'should works with circular reference in object' , ( ) => {
@@ -251,14 +251,14 @@ describe('function circularStringify', () => {
251
251
}
252
252
}
253
253
obj . bar . bar = obj . bar
254
- expect ( circularStringify ( obj ) ) . to . eq ( '{"foo":1,"bar":{"foo":2,"bar":"[Circular]"}}' )
254
+ expect ( safeStringify ( obj ) ) . to . eq ( '{"foo":1,"bar":{"foo":2,"bar":"[Circular]"}}' )
255
255
} )
256
256
257
257
test ( 'should works with circular reference in array' , ( ) => {
258
258
const array = [ 1 , 2 , 3 , 4 , 5 ]
259
259
// @ts -expect-error ignore
260
260
array [ 2 ] = array
261
- expect ( circularStringify ( array ) ) . to . eq ( '[1,2,"[Circular]",4,5]' )
261
+ expect ( safeStringify ( array ) ) . to . eq ( '[1,2,"[Circular]",4,5]' )
262
262
} )
263
263
264
264
test ( 'should works with complex circular object' , ( ) => {
@@ -278,6 +278,34 @@ describe('function circularStringify', () => {
278
278
obj . a . b . e = obj . e
279
279
// @ts -expect-error ignore
280
280
obj . e . g = obj . a . b
281
- expect ( circularStringify ( obj ) ) . to . eq ( '{"a":{"b":{"c":1,"d":2,"e":{"f":3,"g":"[Circular]"}}},"e":{"f":3,"g":"[Circular]"}}' )
281
+ expect ( safeStringify ( obj ) ) . to . eq ( '{"a":{"b":{"c":1,"d":2,"e":{"f":3,"g":"[Circular]"}}},"e":{"f":3,"g":"[Circular]"}}' )
282
+ } )
283
+
284
+ test ( 'should works with ES6 Map' , ( ) => {
285
+ const map = new Map ( )
286
+ map . set ( 'foo' , 1 )
287
+ map . set ( 'bar' , 2 )
288
+ expect ( safeStringify ( map ) ) . to . eq ( '{"foo":1,"bar":2}' )
289
+ } )
290
+
291
+ test ( 'should works with ES6 Set' , ( ) => {
292
+ const set = new Set ( )
293
+ set . add ( 1 )
294
+ set . add ( 2 )
295
+ expect ( safeStringify ( set ) ) . to . eq ( '[1,2]' )
296
+ } )
297
+
298
+ test ( 'should works with ES6 Map with circular reference' , ( ) => {
299
+ const map = new Map ( )
300
+ map . set ( 'foo' , 1 )
301
+ map . set ( 'bar' , map )
302
+ expect ( safeStringify ( map ) ) . to . eq ( '{"foo":1,"bar":"[Circular]"}' )
303
+ } )
304
+
305
+ test ( 'should works with ES6 Set with circular reference' , ( ) => {
306
+ const set = new Set ( )
307
+ set . add ( 1 )
308
+ set . add ( set )
309
+ expect ( safeStringify ( set ) ) . to . eq ( '[1,"[Circular]"]' )
282
310
} )
283
311
} )
0 commit comments