UNPKG

apivis

Version:

JavaScript objects API visualization

1 lines 46.9 kB
{"version":3,"file":"apivis.universal.mjs","sources":["../src/universal/apivis.js"],"sourcesContent":["import {\n name as LIB_NAME,\n version as LIB_VERSION\n} from '../../package.json';\n\nconst {\n hasOwnProperty,\n toString\n} = Object.prototype;\n\nfunction _isNullProtoObject(val) {\n return typeof val === 'object' &&\n val !== null &&\n val.__proto__ === undefined;\n}\n\nfunction _argsStr(count, name = 'arg') {\n let names = [];\n\n for (let i = 0; i < count; i++) {\n names.push(`${name}${i + 1}`);\n }\n\n return names.join(', ');\n}\n\nfunction typeStr(val, k = undefined) {\n let t = (_isNullProtoObject(val)) ?\n 'Object(proto:Null)' :\n toString.call(val).match(/^\\[object ([^\\]]*)\\]$/)[1];\n\n if (val instanceof Object) {\n if (val.constructor) {\n if (val.constructor.name) {\n if (val.constructor.name !== t) {\n let name = val.constructor.name;\n\n if (t === 'Object') {\n t = name;\n } else if (name !== 'Object') {\n if (t.indexOf(name) >= 0) {\n //t = t;\n } else if (name.indexOf(t) >= 0) {\n t = name;\n } else {\n if (!t.endsWith('Prototype')) {\n t = `${t}(ctor:${name})`;\n }\n }\n }\n }\n } else {\n if (!t.endsWith('Prototype')) {\n t = `${t}(ctor:Anonymous)`;\n }\n }\n }\n }\n\n if (val instanceof Error) {\n // name might be a getter that throws\n try {\n let name = val.name;\n\n if (name && name !== t) {\n t = name;\n }\n } catch (err) {}\n }\n\n if (val instanceof Function) {\n if (val.name && val.name !== t && (\n val.name.match(/^[A-Z]/) ||\n (k &&\n ['__apivis__chain_link',\n 'constructor',\n 'prototype',\n '__proto__'\n ].includes(k)\n )\n )) {\n t = val.name;\n }\n\n t = `${t}(${_argsStr(val.length)})`;\n }\n\n if (val && (\n (val.hasOwnProperty && val.hasOwnProperty('constructor'))\n )) {\n if (!t.endsWith('Prototype') && (\n (t !== 'Object' || val === Object.prototype)\n )) {\n t = `${t}.prototype`;\n }\n }\n\n return t;\n}\n\nfunction valueStr(val) {\n switch (typeof val) {\n case 'boolean':\n case 'number':\n return `${val}`;\n case 'string':\n return JSON.stringify(val);\n case 'object':\n if (Array.isArray(val) && val !== Array.prototype) {\n return `${val.length}`;\n } else if (val instanceof Date) {\n return JSON.stringify(val);\n } else if (val instanceof Error) {\n // message might be a getter that throws\n try {\n let msg = val.message;\n\n if (msg) {\n return JSON.stringify(msg);\n }\n } catch (err) {\n return '';\n }\n }\n default:\n return '';\n }\n}\n\nfunction descStr(val, k) {\n if (val === undefined || val === null) {\n return 'n/a';\n }\n\n let desc;\n\n // Retrieving own property descriptor for 'caller' might throw\n try {\n desc = Object.getOwnPropertyDescriptor(val, k);\n } catch (err) {\n return 'n/a';\n }\n\n let d1 = '';\n let d2 = '';\n\n if (desc === undefined) {\n return 'n/a';\n }\n\n if (desc.hasOwnProperty('value')) { d1 += 'v'; }\n if (desc.writable) { d1 += 'w'; }\n if (desc.get) { d1 += 'g'; }\n if (desc.set) { d1 += 's'; }\n if (desc.enumerable) { d2 += 'e'; }\n if (desc.configurable) { d2 += 'c'; }\n\n return (d2) ? `${d1} ${d2}` : d1;\n}\n\nconst _getterTagDummy = {\n __proto__: {\n get [Symbol.toStringTag]() { return 'Getter'; }\n }\n};\n\nconst _noop = () => {};\nconst _swallowPromiseRejection = v => {\n if (typeof v === 'object' && v !== null &&\n v !== Promise.prototype && typeof v.catch === 'function'\n ) {\n // v might be some other kind of Promise.prototype\n // (like originalPromise.prototype in RN/Expo)\n try {\n v.catch(_noop);\n } catch (err) {}\n }\n\n return v;\n};\n\nfunction memberStr(val, k, leaf = val) {\n let sk = String(k);\n let sd = descStr(val, k);\n let isGetter = sd.includes('g');\n // Do not attempt to resolve these\n let skip = [\n 'arguments',\n 'callee',\n 'caller'\n ];\n // Only resolve these in the context of leaf\n let leafOnly = [\n '__proto__'\n ];\n let st;\n let v;\n let sv = '';\n\n // First resolve k in the context of leaf (like it would be normally)\n try {\n if (!skip.includes(k)) {\n if (k === SymbolVpropEntries) {\n v = _vpropEntries(leaf);\n } else {\n v = _swallowPromiseRejection(leaf[k]);\n }\n }\n } catch (err) {\n v = (isGetter) ? _getterTagDummy : err;\n }\n\n // Then try resolving k in the context of val (reached through\n // following __proto__) to eventually get a shadowed value (some\n // props only make sense when resolved in the context of leaf\n // and an exception will be thrown upon trying to access them through val)\n try {\n if ( !(val === leaf || leafOnly.includes(k) || skip.includes(k)) ) {\n let shadowed = _swallowPromiseRejection(val[k]);\n\n if (shadowed !== undefined && shadowed !== null) {\n v = shadowed;\n }\n }\n } catch (err) {\n // Leave v as set by trying to resolve k in the context of leaf\n }\n\n st = typeStr(v, k);\n sv = valueStr(v);\n\n return `${sk}{${sd}}: ${st}${(sv) ? `:${sv}` : ''}`;\n}\n\nfunction memberInfo(val, k, seen) {\n let sk = String(k);\n let sd = descStr(val, k);\n let isGetter = sd.includes('g');\n // Do not attempt to resolve these\n let skip = [\n 'arguments',\n 'callee',\n 'caller'\n ];\n let iSeen = -1;\n let sSeen;\n let st;\n let v;\n let sv = '';\n\n try {\n if (!skip.includes(k)) {\n if (k === SymbolVpropEntries) {\n v = _vpropEntries(val);\n } else {\n v = _swallowPromiseRejection(val[k]);\n }\n }\n } catch (err) {\n v = (isGetter) ? _getterTagDummy : err;\n }\n\n iSeen = seen.findIndex(kv => v === kv[1]);\n sSeen = (iSeen >= 0) ? `->${seen[iSeen][0]}` : '';\n st = typeStr(v, k);\n sv = valueStr(v);\n\n return {\n v,\n s: `${sk}{${sd}}${sSeen}: ${st}${(sv) ? `:${sv}` : ''}`,\n seen: iSeen >= 0\n };\n}\n\nconst _compare = (a, b) => {\n let sa = String(a);\n let sb = String(b);\n let na;\n let nb;\n\n if (Number.isNaN(na = Number(sa)) || Number.isNaN(nb = Number(sb))) {\n return (sa < sb) ? -1 : (sa > sb) ? 1 : 0;\n }\n\n return na - nb;\n};\n\nconst _keys = (val, kind) =>\n (val === undefined || val === null) ?\n [] :\n Object[`getOwnProperty${kind}`](val).sort(_compare);\n\nconst _symbols = val => _keys(val, 'Symbols');\nconst _names = val => _keys(val, 'Names');\n\n//const MaxVpropEntries = 200;\nconst MaxVpropEntries = Infinity;\n//const DescVpropEntries = `vprop_entries(max:${MaxVpropEntries})`;\nconst DescVpropEntries = `vprop_entries`;\nconst SymbolVpropEntries = Symbol(DescVpropEntries);\n\n//const _isVpropEntriesType = val => val[Symbol.iterator] && (\n// !(typeof val === 'string' ||\n// Array.isArray(val) ||\n// (typeof NodeList !== 'undefined' && val instanceof NodeList) ||\n// (typeof HTMLCollection !== 'undefined' && val instanceof HTMLCollection) ||\n// (typeof NamedNodeMap !== 'undefined' && val instanceof NamedNodeMap)\n// ) && !hasOwnProperty.call(val, 'constructor')\n//);\nconst _isVpropEntriesType = val =>\n val instanceof Set || val instanceof Map;\n\nconst _take = (iterator, max = Infinity) => {\n let result = [];\n\n for (let iter = iterator.next(), i = 0;\n !iter.done && i < max;\n iter = iterator.next(), i++\n ) {\n let entry = iter.value;\n\n result.push(\n (Array.isArray(entry) && entry.length === 2) ?\n {key: entry[0], value: entry[1]} :\n entry\n );\n }\n\n return result;\n};\n\nconst _vpropEntries = val => _take(\n val[Symbol.iterator](),\n MaxVpropEntries\n);\n\nconst members = val => (\n ( !(val === undefined || val === null) && _isVpropEntriesType(val) ) ?\n [SymbolVpropEntries] :\n []\n).\n concat(_symbols(val), _names(val));\n\nfunction membersStr(val, indent = ' ', level = 0, leaf = val) {\n return members(val).\n map(k => `${indent.repeat(level)}${memberStr(val, k, leaf)}`).\n join('\\n');\n}\n\nconst _trackedReference = (k, v, level) =>\n (typeof v === 'object' && v !== null &&\n v !== _getterTagDummy) ||\n typeof v === 'function';\nconst _descendableObject = (k, v, level) =>\n typeof v === 'object' && v !== null &&\n v !== _getterTagDummy;\nconst _maybeConstructor = (k, v, level) =>\n // Assumes typeof v === 'function'\n hasOwnProperty.call(v, 'prototype') && (\n (v.name && v.name.match(/^[A-Z]/)) ||\n (typeof k === 'string' && k.match(/^[A-Z]/))\n );\nconst _descendableFunctionWhitelist = (k, v, level) =>\n // Assumes typeof v === 'function'\n v === Proxy ||\n (typeof _ === 'function' && v === _) ||\n (typeof $ === 'function' && v === $) ||\n (typeof p === 'function' && v === p);\nconst _descendableFunction = (k, v, level) =>\n typeof v === 'function' && (\n _maybeConstructor(k, v, level) ||\n _descendableFunctionWhitelist(k, v, level)\n );\n\nconst _shouldDescend = (k, v, level) =>\n (_descendableObject(k, v, level) || _descendableFunction(k, v, level));\n\nfunction _inspectStr(val, k,\n indent = ' ', level = 1,\n seen = [['ROOT', val]], path = []\n) {\n let mi = memberInfo(val, k, seen);\n let v = mi.v;\n let result = [`${indent.repeat(level)}${mi.s}`];\n\n if (!mi.seen && _trackedReference(k, v, level)) {\n path.push(String(k));\n seen.push([path.join('.'), v]);\n\n if (_shouldDescend(k, v, level)) {\n members(v).forEach(_k => result.push(\n _inspectStr(v, _k, indent, level + 1, seen, path)\n ));\n }\n\n path.pop();\n }\n\n return result.join('\\n');\n}\n\nfunction inspectStr(val, indent = ' ') {\n let st = typeStr(val);\n let sv = valueStr(val);\n let result = [`${st}${(sv) ? `:${sv}` : ''}`];\n let seen = [['ROOT', val]];\n\n members(val).forEach(k => result.push(\n _inspectStr(val, k, indent, 1, seen)\n ));\n\n return result.join('\\n');\n}\n\nfunction chain(val) {\n let links = [val];\n\n for (let link = Object.getPrototypeOf(val);\n link;\n link = Object.getPrototypeOf(link)\n ) {\n links.push(link);\n }\n\n return links;\n}\n\nfunction chainStr(val, indent = ' ') {\n return chain(val).\n reverse().\n map((v, i) => `${indent.repeat(i)}[${typeStr(v, '__apivis__chain_link')}]`).\n join('\\n');\n}\n\nfunction apiStr(val, indent = ' ') {\n return chain(val).\n reverse().\n map((v, i) => `${indent.repeat(i)}[${typeStr(v, '__apivis__chain_link')}]\\n${membersStr(v, indent, i + 1, val)}`).\n join('\\n');\n}\n\nconst _prependSibling = (elBefore, el) =>\n elBefore.parentNode.\n insertBefore(el, elBefore);\n\nconst _appendSibling = (elAfter, el) =>\n elAfter.parentNode.\n insertBefore(el, elAfter.nextElementSibling);\n\nfunction _appendInspectNode(elParent, indent, content) {\n let elIndent = document.createElement('span');\n let elContent = document.createElement('span');\n let elNode = document.createElement('div');\n\n elIndent.textContent = indent;\n elContent.textContent = content;\n\n elNode.appendChild(elIndent);\n elNode.appendChild(elContent);\n\n return elParent.appendChild(elNode), elNode;\n}\n\nfunction _appendInspectNodeChildrenContainer(elNode, isRoot = false) {\n let elIndent = elNode.firstElementChild;\n let elDisclosure = document.createElement('span');\n let elContainer = document.createElement('div');\n\n // TODO: Manage styles via classes (take into account dark styles)\n elNode.addEventListener('click', () => {\n if (elContainer.style.display === 'none') {\n elDisclosure.textContent = '-';\n elNode.style.color = 'purple';\n elContainer.style.display = '';\n } else {\n elDisclosure.textContent = '+';\n elNode.style.color = 'blue';\n elContainer.style.display = 'none';\n }\n });\n\n if (isRoot) {\n elDisclosure.textContent = '-';\n elNode.style.color = 'purple';\n } else {\n elDisclosure.textContent = '+';\n elNode.style.color = 'blue';\n elContainer.style.display = 'none';\n // TODO: Calculate exactly based on indent\n elContainer.style.marginLeft = '1em';\n }\n\n elDisclosure.style.color = 'gray';\n elContainer.style.borderLeft = '1px dashed gray';\n\n _appendSibling(elIndent, elDisclosure);\n\n return _appendSibling(elNode, elContainer), elContainer;\n}\n\nfunction _inspectHtml(elParent, val, k,\n indent = ' ', level = 1,\n seen = [['ROOT', val]], path = []\n) {\n let mi = memberInfo(val, k, seen);\n let v = mi.v;\n let elNode = _appendInspectNode(elParent, ' ', mi.s);\n\n if (!mi.seen && _trackedReference(k, v, level)) {\n path.push(String(k));\n seen.push([path.join('.'), v]);\n\n if (_shouldDescend(k, v, level)) {\n let children = members(v);\n\n if (children.length > 0) {\n let elContainer = _appendInspectNodeChildrenContainer(elNode);\n\n children.forEach(_k => {\n _inspectHtml(elContainer, v, _k, indent, level + 1, seen, path);\n });\n }\n }\n\n path.pop();\n }\n\n return elNode;\n}\n\nfunction inspectHtml(val, indent = ' ') {\n let st = typeStr(val);\n let sv = valueStr(val);\n let elEntry = document.createElement('div');\n let elNode = _appendInspectNode(elEntry, '', `${st}${(sv) ? `:${sv}` : ''}`);\n let seen = [['ROOT', val]];\n\n let children = members(val);\n\n if (children.length > 0) {\n let elContainer = _appendInspectNodeChildrenContainer(elNode, true);\n\n children.forEach(k => {\n _inspectHtml(elContainer, val, k, indent, 1, seen);\n });\n }\n\n elEntry.dataset.peek42HtmlEntry = true;\n //elEntry.classList.add('peek42-dev');\n\n return elEntry;\n}\n\nfunction _appendApiNode(elParent, indent, content) {\n let elIndent = document.createElement('span');\n let elContent = document.createElement('span');\n let elNode = document.createElement('div');\n\n elIndent.textContent = indent;\n elContent.textContent = content;\n elNode.style.color = 'purple';\n\n elNode.appendChild(elIndent);\n elNode.appendChild(elContent);\n\n return elParent.appendChild(elNode), elNode;\n}\n\nfunction _appendApiNodeChildrenContainer(elNode, level = 0, expand = false) {\n let elIndent = elNode.firstElementChild;\n let elDisclosure = document.createElement('span');\n let elContainer = document.createElement('div');\n\n // TODO: Manage styles via classes (take into account dark styles)\n elNode.addEventListener('click', () => {\n if (elContainer.style.display === 'none') {\n elDisclosure.textContent = '-';\n elNode.style.color = 'purple';\n elContainer.style.display = '';\n } else {\n elDisclosure.textContent = '+';\n elNode.style.color = 'blue';\n elContainer.style.display = 'none';\n }\n });\n\n if (expand) {\n elDisclosure.textContent = '-';\n elNode.style.color = 'purple';\n } else {\n elDisclosure.textContent = '+';\n elNode.style.color = 'blue';\n elContainer.style.display = 'none';\n }\n\n elDisclosure.style.color = 'gray';\n elContainer.style.borderLeft = '1px dashed gray';\n // TODO: Calculate exactly based on indent\n elContainer.style.marginLeft = `${level}em`;\n\n _appendSibling(elIndent, elDisclosure);\n\n return _appendSibling(elNode, elContainer), elContainer;\n}\n\nfunction apiHtml(val, indent = ' ') {\n let protos = chain(val);\n let elEntry = document.createElement('div');\n\n protos.\n reverse().\n forEach((v, i) => {\n let st = `[${typeStr(v, '__apivis__chain_link')}]`;\n let elNode = _appendApiNode(elEntry, indent.repeat(i), st);\n\n let children = members(v);\n\n if (children.length > 0) {\n let elContainer = _appendApiNodeChildrenContainer(\n elNode, i, i === protos.length - 1\n );\n //let seen = [['ROOT', v]];\n //let path = [];\n\n children.forEach(k => {\n //if (i === protos.length - 1) {\n // _inspectHtml(elContainer, v, k, ' ', i, seen, path);\n //} else {\n _appendInspectNode(elContainer, ' ', memberStr(v, k, val));\n //}\n });\n }\n });\n\n elEntry.dataset.peek42HtmlEntry = true;\n //elEntry.classList.add('peek42-dev');\n\n return elEntry;\n}\n\nfunction walk(elParent, elem, fnVisit, {\n level = 0\n} = {}) {\n let elNode = fnVisit(elParent, elem, level);\n\n if (elNode && elem.firstChild) {\n elParent = _appendInspectNodeChildrenContainer(elNode, level === 0);\n }\n\n for (let node = elem.firstChild;\n node;\n node = node.nextSibling\n ) {\n walk(elParent, node, fnVisit, {level: level + 1});\n }\n\n return elem;\n}\n\nlet nodeTypeNames;\n\nif (typeof window !== 'undefined' && typeof Node !== 'undefined') {\n nodeTypeNames = Object.keys(Node).\n filter(k => k.match(/_NODE$/)).\n reduce((obj, k) =>\n (obj[Node[k]] = k.slice(0, -5).toLowerCase(), obj),\n {__proto__: null}\n );\n}\n\nfunction formatAttrs(attrs) {\n return Array.from(attrs,\n // TODO: Handle quotes within attribute value\n attr => `${attr.name}=\"${attr.value}\"`\n );\n}\n\nfunction formatNode(types, node, level) {\n let tag = (node.tagName && node.tagName.toLowerCase()) ||\n nodeTypeNames[node.nodeType];\n\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let attrs = (types.has(Node.ATTRIBUTE_NODE)) ?\n formatAttrs(node.attributes) :\n [];\n\n return (attrs.length > 0) ?\n `${tag}(${attrs.join(', ')})` :\n tag;\n } case Node.COMMENT_NODE: {\n let text = node.textContent.trim();\n\n return `//${JSON.stringify(text)}`;\n } case Node.TEXT_NODE: {\n let text = node.textContent.trim();\n\n return (text) ? JSON.stringify(text) : '';\n } default:\n return tag;\n }\n}\n\nfunction domHtml(elemOrSel = document, {\n nodeTypes = [\n Node.DOCUMENT_NODE,\n Node.DOCUMENT_FRAGMENT_NODE,\n Node.ELEMENT_NODE,\n Node.ATTRIBUTE_NODE,\n Node.COMMENT_NODE,\n Node.TEXT_NODE,\n ],\n include = [],\n exclude = [],\n level = 0\n} = {}) {\n elemOrSel = (typeof elemOrSel === 'string') ?\n document.querySelector(elemOrSel) :\n elemOrSel;\n let types = new Set(\n nodeTypes.concat(include).\n filter(k => !exclude.includes(k))\n );\n let elEntry = document.createElement('div');\n\n walk(elEntry, elemOrSel, (elParent, node, level) => {\n let elNode;\n\n if (types.has(node.nodeType)) {\n let pad = (level > 0) ? ' ' : '';\n let sn = formatNode(types, node, level);\n\n if (sn) {\n elNode = _appendInspectNode(elParent, pad, sn);\n }\n }\n\n return elNode;\n }, {level});\n\n elEntry.dataset.peek42HtmlEntry = true;\n //elEntry.classList.add('peek42-dev');\n\n return elEntry;\n}\n\n// peek42 plugin\nfunction peek42(fnOutput, fnComment) {\n let plugin = {\n type(val, comment = undefined, opts = undefined) {\n fnOutput(\n typeStr(val),\n fnComment(comment, val, 'type'),\n opts\n );\n },\n desc(val, k, comment = undefined, opts = undefined) {\n fnOutput(\n descStr(val, k),\n fnComment(comment, `${String(k)} in ${typeStr(val)}`, 'desc'),\n opts\n );\n },\n member(val, k, comment = undefined, opts = undefined) {\n fnOutput(\n memberStr(val, k),\n fnComment(comment, `${String(k)} in ${typeStr(val)}`, 'member'),\n opts\n );\n },\n members(val, comment = undefined, opts = undefined) {\n fnOutput(\n membersStr(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined,\n (opts && typeof opts.indentLevel === 'number') ?\n opts.indentLevel :\n undefined\n ),\n fnComment(comment, typeStr(val), 'members'),\n opts\n );\n },\n inspectStr(val, comment = undefined, opts = undefined) {\n fnOutput(\n inspectStr(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined\n ),\n fnComment(comment, typeStr(val), 'inspect'),\n opts\n );\n },\n inspectHtml(val, comment = undefined, opts = undefined) {\n fnOutput(\n inspectHtml(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined\n ),\n fnComment(comment, typeStr(val), 'inspect'),\n opts\n );\n },\n chain(val, comment = undefined, opts = undefined) {\n fnOutput(\n chainStr(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined\n ),\n fnComment(comment, typeStr(val), 'chain'),\n opts\n );\n },\n apiStr(val, comment = undefined, opts = undefined) {\n fnOutput(\n apiStr(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined\n ),\n fnComment(comment, typeStr(val), 'api'),\n opts\n );\n },\n apiHtml(val, comment = undefined, opts = undefined) {\n fnOutput(\n apiHtml(val,\n (opts && typeof opts.indent === 'string') ?\n opts.indent :\n undefined\n ),\n fnComment(comment, typeStr(val), 'api'),\n opts\n );\n },\n domHtml(val, comment = undefined, opts = undefined) {\n fnOutput(\n domHtml(val, (opts || {}).dom),\n fnComment(comment, typeStr(val || document), 'dom'),\n opts\n );\n }\n };\n\n if (typeof window !== 'undefined') {\n plugin.inspect = plugin.inspectHtml;\n plugin.api = plugin.apiHtml;\n plugin.dom = plugin.domHtml;\n } else {\n plugin.inspect = plugin.inspectStr;\n plugin.api = plugin.apiStr;\n }\n\n return plugin;\n}\n\nconst apivis = {\n get [Symbol.toStringTag]() {\n return LIB_NAME;\n },\n version: LIB_VERSION,\n typeStr,\n descStr,\n memberStr,\n members,\n membersStr,\n inspectStr,\n inspectHtml,\n chain,\n chainStr,\n apiStr,\n apiHtml,\n domHtml,\n peek42\n};\n\nexport {\n typeStr,\n descStr,\n memberStr,\n members,\n membersStr,\n inspectStr,\n inspectHtml,\n chain,\n chainStr,\n apiStr,\n apiHtml,\n domHtml\n};\nexport default apivis;\n"],"names":["LIB_NAME","LIB_VERSION"],"mappings":"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"}