UNPKG

@observablehq/inspector

Version:

[![Node CI](https://github.com/observablehq/inspector/workflows/Node%20CI/badge.svg)](https://github.com/observablehq/inspector/actions?workflow=Node+CI)

44 lines (39 loc) 1.2 kB
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; } }