@observablehq/inspector
Version:
[](https://github.com/observablehq/inspector/actions?workflow=Node+CI)
44 lines (39 loc) • 1.2 kB
JavaScript
const SYMBOLS = [
{ symbol: "@@__IMMUTABLE_INDEXED__@@", name: "Indexed", modifier: true },
{ symbol: "@@__IMMUTABLE_KEYED__@@", name: "Keyed", modifier: true },
{ symbol: "@@__IMMUTABLE_LIST__@@", name: "List", arrayish: true },
{ symbol: "@@__IMMUTABLE_MAP__@@", name: "Map" },
{
symbol: "@@__IMMUTABLE_ORDERED__@@",
name: "Ordered",
modifier: true,
prefix: true
},
{ symbol: "@@__IMMUTABLE_RECORD__@@", name: "Record" },
{
symbol: "@@__IMMUTABLE_SET__@@",
name: "Set",
arrayish: true,
setish: true
},
{ symbol: "@@__IMMUTABLE_STACK__@@", name: "Stack", arrayish: true }
];
export function immutableName(obj) {
try {
let symbols = SYMBOLS.filter(({ symbol }) => obj[symbol] === true);
if (!symbols.length) return;
const name = symbols.find(s => !s.modifier);
const prefix =
name.name === "Map" && symbols.find(s => s.modifier && s.prefix);
const arrayish = symbols.some(s => s.arrayish);
const setish = symbols.some(s => s.setish);
return {
name: `${prefix ? prefix.name : ""}${name.name}`,
symbols,
arrayish: arrayish && !setish,
setish
};
} catch (e) {
return null;
}
}