diff --git a/src/collapsed.js b/src/collapsed.js index 408e7cc..9d47071 100644 --- a/src/collapsed.js +++ b/src/collapsed.js @@ -21,11 +21,21 @@ export default function inspectCollapsed(object, shallow, name, proto) { let tag, fields, next, n; if (object instanceof Map) { - tag = `Map(${object.size})`; - fields = iterateMap; + if (object instanceof object.constructor) { + tag = `Map(${object.size})`; + fields = iterateMap; + } else { // avoid incompatible receiver error for prototype + tag = "Map()"; + fields = iterateObject; + } } else if (object instanceof Set) { - tag = `Set(${object.size})`; - fields = iterateSet; + if (object instanceof object.constructor) { + tag = `Set(${object.size})`; + fields = iterateSet; + } else { // avoid incompatible receiver error for prototype + tag = "Set()"; + fields = iterateObject; + } } else if (arrayish) { tag = `${object.constructor.name}(${object.length})`; fields = iterateArray; diff --git a/src/expanded.js b/src/expanded.js index 756c5db..a04f7db 100644 --- a/src/expanded.js +++ b/src/expanded.js @@ -15,11 +15,21 @@ export default function inspectExpanded(object, _, name, proto) { let tag, fields, next, n; if (object instanceof Map) { - tag = `Map(${object.size})`; - fields = iterateMap; + if (object instanceof object.constructor) { + tag = `Map(${object.size})`; + fields = iterateMap; + } else { // avoid incompatible receiver error for prototype + tag = "Map()"; + fields = iterateObject; + } } else if (object instanceof Set) { - tag = `Set(${object.size})`; - fields = iterateSet; + if (object instanceof object.constructor) { + tag = `Set(${object.size})`; + fields = iterateSet; + } else { // avoid incompatible receiver error for prototype + tag = "Set()"; + fields = iterateObject; + } } else if (arrayish) { tag = `${object.constructor.name}(${object.length})`; fields = iterateArray; diff --git a/test/__snapshots__/inspector.test.js.snap b/test/__snapshots__/inspector.test.js.snap index cd62978..a4faa55 100644 --- a/test/__snapshots__/inspector.test.js.snap +++ b/test/__snapshots__/inspector.test.js.snap @@ -774,3 +774,65 @@ hi `; + +exports[`map and set proto map proto 1`] = ` +
+
+ + + + + + + + + + Map() { + + } + +
+
+`; + +exports[`map and set proto set proto 1`] = ` +
+
+ + + + + + + + + + Set() { + + } + +
+
+`; diff --git a/test/inspector.test.js b/test/inspector.test.js index 9b453e6..98c152a 100644 --- a/test/inspector.test.js +++ b/test/inspector.test.js @@ -98,6 +98,23 @@ describe("into", () => { }); }); +describe("map and set proto", () => { + test("map proto", () => { + class SubMap extends Map {} + const container = document.createElement("div"); + const inspector = Inspector.into(container)(); + inspector.fulfilled(Object.getPrototypeOf(new SubMap())); + expect(container).toMatchSnapshot(); + }); + test("set proto", () => { + class SubSet extends Set {} + const container = document.createElement("div"); + const inspector = Inspector.into(container)(); + inspector.fulfilled(Object.getPrototypeOf(new SubSet())); + expect(container).toMatchSnapshot(); + }); +}); + describe("immutable", () => { let inspector, elem; beforeEach(() => {