fix(shared): handle Map with symbol keys in toDisplayString (#9731)

close #9727
This commit is contained in:
Carlos Rodrigues 2023-12-07 02:33:48 +00:00 committed by GitHub
parent 5b002869c5
commit 364821d6bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 5 deletions

View File

@ -171,4 +171,26 @@ describe('toDisplayString', () => {
}"
`)
})
//#9727
test('Map with Symbol keys', () => {
const m = new Map<any, any>([
[Symbol(), 'foo'],
[Symbol(), 'bar'],
[Symbol('baz'), 'baz']
])
expect(toDisplayString(m)).toMatchInlineSnapshot(`
"{
\\"Map(3)\\": {
\\"Symbol(0) =>\\": \\"foo\\",
\\"Symbol(1) =>\\": \\"bar\\",
\\"Symbol(baz) =>\\": \\"baz\\"
}
}"
`)
// confirming the symbol renders Symbol(foo)
expect(toDisplayString(new Map([[Symbol('foo'), 'foo']]))).toContain(
String(Symbol('foo'))
)
})
})

View File

@ -6,7 +6,8 @@ import {
isPlainObject,
isSet,
objectToString,
isString
isString,
isSymbol
} from './general'
/**
@ -31,10 +32,15 @@ const replacer = (_key: string, val: any): any => {
return replacer(_key, val.value)
} else if (isMap(val)) {
return {
[`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
;(entries as any)[`${key} =>`] = val
return entries
}, {})
[`Map(${val.size})`]: [...val.entries()].reduce(
(entries, [key, val], i) => {
entries[
`${isSymbol(key) ? `Symbol(${key.description ?? i})` : key} =>`
] = val
return entries
},
{} as Record<string, any>
)
}
} else if (isSet(val)) {
return {