])
expect(toDisplayString(m)).toMatchInlineSnapshot(`
"{
- \\"Map(3)\\": {
- \\"Symbol(0) =>\\": \\"foo\\",
- \\"Symbol(1) =>\\": \\"bar\\",
- \\"Symbol(baz) =>\\": \\"baz\\"
+ "Map(3)": {
+ "Symbol(0) =>": "foo",
+ "Symbol(1) =>": "bar",
+ "Symbol(baz) =>": "baz"
}
}"
`)
String(Symbol('foo'))
)
})
+
+ test('Set with Symbol values', () => {
+ const s = new Set([Symbol('foo'), Symbol('bar'), Symbol()])
+ expect(toDisplayString(s)).toMatchInlineSnapshot(`
+ "{
+ "Set(3)": [
+ "Symbol(foo)",
+ "Symbol(bar)",
+ "Symbol()"
+ ]
+ }"
+ `)
+ })
+
+ test('Object with Symbol values', () => {
+ expect(toDisplayString({ foo: Symbol('x'), bar: Symbol() }))
+ .toMatchInlineSnapshot(`
+ "{
+ "foo": "Symbol(x)",
+ "bar": "Symbol()"
+ }"
+ `)
+ })
})
return {
[`Map(${val.size})`]: [...val.entries()].reduce(
(entries, [key, val], i) => {
- entries[
- `${isSymbol(key) ? `Symbol(${key.description ?? i})` : key} =>`
- ] = val
+ entries[stringiySymbol(key, i) + ' =>'] = val
return entries
},
{} as Record<string, any>
}
} else if (isSet(val)) {
return {
- [`Set(${val.size})`]: [...val.values()]
+ [`Set(${val.size})`]: [...val.values()].map(v => stringiySymbol(v))
}
+ } else if (isSymbol(val)) {
+ return stringiySymbol(val)
} else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
+ // native elements
return String(val)
}
return val
}
+
+const stringiySymbol = (v: unknown, i: number | string = ''): any =>
+ isSymbol(v) ? `Symbol(${v.description ?? i})` : v