peek42
Version:
Touch based browser console
1 lines • 67.5 kB
Source Map (JSON)
{"version":3,"file":"peek42.browser.mjs","sources":["../src/universal/base.js","../src/browser/console/flash.js","../src/browser/console/resize.js","../src/browser/console/log-entry.js","../src/browser/console/console.js","../src/browser/error.js","../src/browser/config.js","../src/browser/intercept.js","../src/browser/cable.js","../src/browser/peek42.js"],"sourcesContent":["import {\n name as LIB_NAME,\n version as LIB_VERSION\n} from '../../package.json';\n\nfunction _isNullProtoObject(val) {\n return typeof val === 'object' &&\n val !== null &&\n val.__proto__ === undefined;\n}\n\nfunction _string(val) {\n return (_isNullProtoObject(val)) ?\n '[object Object(proto:Null)]' :\n String(val);\n}\n\nfunction _comment(comment, val, note = undefined) {\n if (comment !== undefined && comment !== '') {\n return comment;\n }\n\n let str = _string(val).replace(/\\s+/gm, ' ');\n let max = 69;\n\n if (str.length > max) {\n str = `${str.substr(0, max)}...`;\n }\n\n return (note === undefined) ?\n str :\n `(${note}) ${str}`;\n}\n\nconst _outputOptsDefaults = {\n level: 'log',\n collapsed: false\n};\n\nfunction _prettyMakesSense(val) {\n return (val instanceof Object && !(val instanceof Function)) ||\n _isNullProtoObject(val);\n}\n\nfunction pretty(val) {\n let objs = [];\n let keys = [];\n\n return JSON.stringify(val, (k, v) => {\n if (v instanceof Object || _isNullProtoObject(v)) {\n let seen = objs.indexOf(v);\n\n if (seen === -1) {\n objs.push(v);\n keys.push(k || 'ROOT');\n\n return v;\n }\n\n return `${_string(v)} (ref to ${keys[seen]})`;\n }\n\n return v;\n }, 2);\n}\n\nfunction p(val, comment = undefined, opts = undefined) {\n peek42._output(\n val,\n _comment(comment, val, 'value'),\n opts\n );\n}\n\np.pretty = function (val, comment = undefined, opts = undefined) {\n peek42._output(\n (_prettyMakesSense(val)) ? pretty(val) : val,\n _comment(comment, val, 'pretty'),\n opts\n );\n};\n\nfunction pp(...args) {\n ((p.inspect) ? p.inspect : p.pretty)(...args);\n}\n\nfunction use(lib) {\n Object.assign(p,\n lib.peek42(p, _comment)\n );\n\n return peek42;\n}\n\nconst peek42 = {\n get [Symbol.toStringTag]() {\n return LIB_NAME;\n },\n version: LIB_VERSION,\n pretty,\n p,\n pp,\n use\n};\n\nexport {\n _string,\n _comment,\n _outputOptsDefaults,\n _prettyMakesSense,\n pretty,\n p,\n pp,\n use\n};\nexport default peek42;\n","function flash1(el, className) {\n el.classList.add(className);\n setTimeout(() => el.classList.remove(className), 300);\n}\n\nfunction flash2(el, className) {\n el.classList.add(className);\n setTimeout(() => {\n el.classList.remove(className);\n setTimeout(() => {\n el.classList.add(className);\n setTimeout(() => el.classList.remove(className), 300);\n }, 200);\n }, 300);\n}\n\nfunction flashSizeLimit(el) { flash1(el, 'peek42-flash-size-limit'); }\nfunction flashNotice(el) { flash1(el, 'peek42-flash-notice'); }\nfunction flashSuccess(el) { flash1(el, 'peek42-flash-success'); }\nfunction flashWarning(el) { flash2(el, 'peek42-flash-warning'); }\nfunction flashError(el) { flash2(el, 'peek42-flash-error'); }\n\nfunction flashOutput(el, level) {\n switch (level) {\n case 'info': flashNotice(el); break;\n case 'warn': flashWarning(el); break;\n case 'error': flashError(el); break;\n case 'log':\n default: flashSuccess(el); break;\n }\n}\n\nconst flash = {\n flash1,\n flash2,\n flashSizeLimit,\n flashNotice,\n flashSuccess,\n flashWarning,\n flashError,\n flashOutput\n};\n\nexport {\n flash1,\n flash2,\n flashSizeLimit,\n flashNotice,\n flashSuccess,\n flashWarning,\n flashError,\n flashOutput\n};\nexport default flash;\n","import {flashSizeLimit} from './flash';\n\nclass Resizer {\n constructor(elResizee, {\n elFlashSizeLimit = elResizee,\n elsMakeSameHeight = [],\n ratio = 0.42,\n minRatio = 0.05,\n maxRatio = 0.85\n } = {}) {\n this._elResizee = elResizee;\n this._elFlashSizeLimit = elFlashSizeLimit;\n this._elsMakeSameHeight = elsMakeSameHeight;\n this._ratio = ratio;\n this._minRatio = minRatio;\n this._maxRatio = maxRatio;\n this._height = window.innerHeight * this._ratio;\n this._resizeY = 0;\n this._resizeYDelta = 0;\n this._isResizing = false;\n\n this._syncHeights();\n }\n\n get ratio() {\n return this._ratio;\n }\n\n get height() {\n return this._height;\n }\n\n set height(v) {\n if (typeof v !== 'number') {\n throw new TypeError(`Expected number, got ${typeof v}`);\n }\n\n this._height = v;\n\n this._syncHeights();\n }\n\n _syncHeights() {\n let styleHeight = `${this._height}px`;\n\n this._elResizee.style.height = styleHeight;\n this._elsMakeSameHeight.forEach(el => el.style.height = styleHeight);\n }\n\n get isResizing() {\n return this._isResizing;\n }\n\n resizeStart(clientY) {\n this._resizeY = clientY;\n this._resizeYDelta = 0;\n this._isResizing = true;\n }\n\n resize(clientY) {\n let minHeight = window.innerHeight * this._minRatio;\n let maxHeight = window.innerHeight * this._maxRatio;\n\n this._resizeYDelta = this._resizeY - clientY;\n this._height += this._resizeYDelta;\n\n if (this._height > minHeight && this._height < maxHeight) {\n this._resizeY = clientY;\n this._syncHeights();\n } else {\n this._height = Math.min(Math.max(this._height, minHeight), maxHeight);\n this._syncHeights();\n\n flashSizeLimit(this._elFlashSizeLimit);\n this.resizeEnd();\n }\n }\n\n resizeEnd() {\n this._ratio = this._height / window.innerHeight;\n this._resizeY = 0;\n this._resizeYDelta = 0;\n this._isResizing = false;\n }\n}\n\nexport default Resizer;\n","function _logEntryToggleAndBody(elHead) {\n return [\n elHead.firstElementChild,\n elHead.nextElementSibling\n ];\n}\n\nfunction _logEntryExpand(elToggle, elBody) {\n elToggle.innerHTML = '▾';\n elBody.style.display = '';\n}\n\nfunction _logEntryCollapse(elToggle, elBody) {\n elToggle.innerHTML = '▸';\n elBody.style.display = 'none';\n}\n\nfunction _logEntryToggle(elToggle, elBody) {\n if (elBody.style.display === 'none') {\n _logEntryExpand(elToggle, elBody);\n } else {\n _logEntryCollapse(elToggle, elBody);\n }\n}\n\nfunction _onLogEntryHeadClick(ev) {\n _logEntryToggle(..._logEntryToggleAndBody(ev.currentTarget));\n}\n\nfunction addLogEntry({\n elLog,\n entrySimpleText,\n entryDesc,\n entryText,\n entryHtml,\n hidden = false,\n level = 'log',\n collapsed = false\n} = {}) {\n let elEntry = document.createElement('div');\n\n elEntry.classList.add(`peek42-log-entry-${level}`);\n\n if (hidden) {\n elEntry.style.display = 'none';\n }\n\n if (entrySimpleText) {\n elEntry.classList.add('peek42-log-entry-simple');\n elEntry.textContent = entrySimpleText;\n } else {\n elEntry.classList.add('peek42-log-entry');\n elEntry.innerHTML = `<div class=\"peek42-log-entry-head\">\\\n<span class=\"peek42-log-entry-toggle\">▾</span>\\\n<span class=\"peek42-log-entry-desc\"></span>\\\n</div>\\\n<div class=\"peek42-log-entry-body\"></div>`;\n\n let elHead = elEntry.firstElementChild;\n let [elToggle, elBody] = _logEntryToggleAndBody(elHead);\n let elDesc = elToggle.nextElementSibling;\n\n elDesc.textContent = entryDesc;\n\n if (entryHtml) {\n elBody.appendChild(entryHtml);\n } else {\n elBody.textContent = entryText;\n }\n\n elHead.addEventListener('click', _onLogEntryHeadClick);\n if (collapsed) {\n _logEntryCollapse(elToggle, elBody);\n }\n }\n\n elLog.insertBefore(elEntry, elLog.firstChild);\n elLog.scrollTop = 0;\n}\n\nexport {\n _logEntryToggleAndBody,\n _logEntryExpand,\n _logEntryCollapse,\n addLogEntry\n};\n","import {_string, _outputOptsDefaults} from '../../universal/base';\nimport consoleHTML from './console.html';\nimport './styles/console.scss';\nimport Resizer from './resize';\nimport {\n flashNotice,\n flashOutput\n} from './flash';\nimport {\n _logEntryToggleAndBody,\n _logEntryExpand,\n _logEntryCollapse,\n addLogEntry\n} from './log-entry';\n\nclass Console {\n static _html = consoleHTML;\n static _instance = null;\n static _printFnMap = {\n v: ['peek42.p', 'value'],\n value: ['peek42.p', 'value'],\n p: ['peek42.p.pretty', 'pretty'],\n pretty: ['peek42.p.pretty', 'pretty'],\n t: ['peek42.p.type', 'type'],\n type: ['peek42.p.type', 'type'],\n d: ['peek42.p.desc', 'desc'],\n desc: ['peek42.p.desc', 'desc'],\n M: ['peek42.p.member', 'member'],\n member: ['peek42.p.member', 'member'],\n m: ['peek42.p.members', 'members'],\n members: ['peek42.p.members', 'members'],\n i: ['peek42.p.inspect', 'inspect'],\n inspect: ['peek42.p.inspect', 'inspect'],\n c: ['peek42.p.chain', 'chain'],\n chain: ['peek42.p.chain', 'chain'],\n a: ['peek42.p.api', 'api'],\n api: ['peek42.p.api', 'api'],\n x: ['peek42.p.dom', 'dom'],\n dom: ['peek42.p.dom', 'dom']\n };\n\n static get instance() {\n return new Promise((resolve, reject) => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n resolve(this._instance = this._instance || new this());\n });\n } else {\n resolve(this._instance = this._instance || new this());\n }\n });\n }\n\n constructor() {\n if (document.readyState === 'loading') {\n throw new Error(`Cannot create ${new.target.name} before DOM ready`);\n }\n\n if (document.querySelector('.peek42-console')) {\n throw new Error(`${new.target.name} already created`);\n }\n\n this._container = document.createElement('div');\n this._container.setAttribute('class', 'peek42-console');\n this._container.innerHTML = new.target._html;\n document.body.appendChild(this._container);\n //this._container.classList.add('peek42-dev');\n\n [\n 'bar',\n 'title',\n 'eval',\n 'clear', 'resize', 'quietl', 'quiet', 'toggle',\n 'view',\n 'log',\n 'bar1',\n 'entries-expand', 'entries-collapse',\n 'entries-info', 'entries-log', 'entries-warn', 'entries-error'\n ].forEach(name => {\n this[`_${name}`] = this._container.querySelector(`.peek42-${name}`);\n });\n\n this._resizer = new Resizer(this._log, {\n elFlashSizeLimit: this._container,\n elsMakeSameHeight: [this._bar1]\n });\n\n this._isMinimized = false;\n\n this._countsByLevel = {\n info: 0,\n log: 0,\n warn: 0,\n error: 0\n };\n\n this._title.addEventListener('click', ev => {\n this._onTitleClick(ev);\n });\n\n this._eval.addEventListener('keypress', ev => {\n this._onEvalKeyPress(ev);\n });\n\n this._clear.addEventListener('click', ev => {\n this._onClearClick(ev);\n });\n\n this._resize.addEventListener('touchstart', ev => {\n this._onResizeTouchStart(ev);\n });\n document.body.addEventListener('touchmove', ev => {\n this._onBodyTouchMove(ev);\n });\n document.body.addEventListener('touchend', ev => {\n this._onBodyTouchEnd(ev);\n });\n window.addEventListener('resize', ev => {\n this._onWindowResize(ev);\n });\n\n this._quietl.addEventListener('click', ev => {\n this._onQuietClick(ev);\n });\n\n this._toggle.addEventListener('click', ev => {\n this._onToggleClick(ev);\n });\n\n [\n 'entries-expand',\n 'entries-collapse'\n ].forEach(name => {\n this[`_${name}`].addEventListener('click', ev => {\n this[`_on-${name}`](ev);\n });\n });\n\n [\n 'entries-info',\n 'entries-log',\n 'entries-warn',\n 'entries-error'\n ].forEach(name => {\n this[`_${name}`].addEventListener('click', ev => {\n this[`_${name}`].classList.toggle(`peek42-${name}-active`);\n\n this[`_on-toggle-${name}`](ev);\n });\n });\n\n this.minimize();\n }\n\n _isLevelActive(level) {\n return this[`_entries-${level}`].classList.\n contains(`peek42-entries-${level}-active`);\n }\n\n _output(val, comment, opts = {}) {\n opts = {..._outputOptsDefaults, ...opts};\n let active = this._isLevelActive(opts.level);\n\n if (this.isMinimized && active && !this.isQuiet) {\n this.show();\n }\n\n if (val instanceof HTMLElement && val.dataset.peek42HtmlEntry) {\n addLogEntry({\n elLog: this._log,\n entryDesc: String(comment),\n entryHtml: val,\n hidden: !active,\n ...opts\n });\n } else {\n if (comment === null) {\n addLogEntry({\n elLog: this._log,\n entrySimpleText: _string(val),\n hidden: !active,\n ...opts\n });\n } else {\n addLogEntry({\n elLog: this._log,\n entryDesc: String(comment),\n entryText: _string(val),\n hidden: !active,\n ...opts\n });\n }\n }\n\n this._countsByLevel[opts.level] += 1;\n this[`_entries-${opts.level}`].\n textContent = this._countsByLevel[opts.level];\n\n flashOutput(this._container, opts.level);\n }\n\n _onTitleClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.toggleLogPos();\n }\n\n _onEvalKeyPress(ev) {\n let crCode = '\\r'.charCodeAt(0);\n let lfCode = '\\n'.charCodeAt(0);\n\n if (ev.charCode === crCode || ev.charCode === lfCode) {\n this.evalJS();\n }\n }\n\n _onClearClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.clear();\n }\n\n _onResizeTouchStart(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this._resizer.resizeStart(ev.touches[0].clientY);\n }\n\n _onBodyTouchMove(ev) {\n if (this._resizer.isResizing) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this._resizer.resize(ev.touches[0].clientY);\n }\n }\n\n _onBodyTouchEnd(ev) {\n if (this._resizer.isResizing) {\n this._resizer.resizeEnd();\n }\n }\n\n _onWindowResize(ev) {\n this._resizer.height = window.innerHeight * this._resizer.ratio;\n }\n\n _onQuietClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.toggleQuiet();\n }\n\n _onToggleClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.toggleDisplay();\n }\n\n ['_on-entries-expand'](ev) {\n this._log.\n querySelectorAll('.peek42-log-entry-head').\n forEach(elHead => _logEntryExpand(..._logEntryToggleAndBody(elHead)));\n }\n\n ['_on-entries-collapse'](ev) {\n this._log.\n querySelectorAll('.peek42-log-entry-head').\n forEach(elHead => _logEntryCollapse(..._logEntryToggleAndBody(elHead)));\n }\n\n _toggleEntriesDisplay(elCtrl, level) {\n let activeClass = `peek42-entries-${level}-active`;\n let entriesClass = `.peek42-log-entry-${level}`;\n let display = (elCtrl.classList.contains(activeClass)) ? '' : 'none';\n\n this._log.\n querySelectorAll(entriesClass).\n forEach(elEntry => elEntry.style.display = display);\n }\n\n ['_on-toggle-entries-info'](ev) {\n this._toggleEntriesDisplay(ev.currentTarget, 'info');\n }\n\n ['_on-toggle-entries-log'](ev) {\n this._toggleEntriesDisplay(ev.currentTarget, 'log');\n }\n\n ['_on-toggle-entries-warn'](ev) {\n this._toggleEntriesDisplay(ev.currentTarget, 'warn');\n }\n\n ['_on-toggle-entries-error'](ev) {\n this._toggleEntriesDisplay(ev.currentTarget, 'error');\n }\n\n get logIsAtTop() {\n return this._log.scrollTop === 0;\n }\n\n toggleLogPos() {\n (this.logIsAtTop) ? this.logPosBottom() : this.logPosTop();\n }\n\n logPosBottom() {\n this._log.scrollTop = this._log.scrollHeight;\n }\n\n logPosTop() {\n this._log.scrollTop = 0;\n }\n\n get jsToEval() {\n return this._eval.value;\n }\n\n set jsToEval(v) {\n this._eval.value = v;\n }\n\n evalJS() {\n let val = this._eval.value;\n\n if (val.match(/^\\s*$/gm)) {\n return;\n }\n\n let str = val.replace(/'/gm, '\"');\n let keys = Object.keys(this.constructor._printFnMap);\n let pattern = `^(${keys.join('|')})\\\\s+(.+)`;\n let parts = str.match(new RegExp(pattern));\n let dummy, k, expr, fn, note, js;\n\n if (parts) {\n [dummy, k, expr] = parts;\n [fn, note] = this.constructor._printFnMap[k];\n } else {\n expr = str;\n [fn, note] = this.constructor._printFnMap['v'];\n }\n\n js = `'use strict';\n\n${fn}(${expr}, '(${note}) ${expr}');\n`;\n\n try {\n (new Function(js))();\n } catch (err) {\n if (!err.sourceURL) {\n err.sourceText = js;\n err.line = (err.line || 4) - 1;\n }\n\n throw err;\n }\n }\n\n clear() {\n this._log.textContent = '';\n\n ['info', 'log', 'warn', 'error'].forEach(level => {\n this._countsByLevel[level] = 0;\n this[`_entries-${level}`].textContent = 0;\n });\n\n flashNotice(this._container);\n }\n\n get isQuiet() {\n return this._quiet.checked;\n }\n\n toggleQuiet() {\n this._quiet.checked = !this._quiet.checked;\n }\n\n quiet() {\n this._quiet.checked = true;\n }\n\n unquiet() {\n this._quiet.checked = false;\n }\n\n get isMinimized() {\n return this._isMinimized;\n }\n\n toggleDisplay() {\n (this.isMinimized) ? this.show() : this.minimize();\n }\n\n show() {\n this._eval.style.display = '';\n this._resize.style.display = '';\n this._quietl.style.display = 'none';\n this._quiet.style.display = 'none';\n this._toggle.innerHTML = 'Minimize';\n this._view.style.display = '';\n\n this._isMinimized = false;\n }\n\n minimize() {\n this._eval.style.display = 'none';\n this._resize.style.display = 'none';\n this._quietl.style.display = '';\n this._quiet.style.display = '';\n this._toggle.innerHTML = 'Restore';\n this._view.style.display = 'none';\n\n this._isMinimized = true;\n }\n\n get content() {\n return this._log.textContent;\n }\n}\n\nexport default Console;\n","import {pretty, p, pp} from '../universal/base';\n\nconst reTestTranspiledScriptStack =\n /\\nrun\\S+babel/m;\nconst reCaptureSourceMappingURL =\n // match[1] - sourceMappingURL\n /\\/\\/# sourceMappingURL=(.+)\\s*$/m;\nconst reCaptureEmbeddedSourceMap =\n // match[1] - embeddedSourceMap (base64)\n /^data:application\\/json;(?:charset=[^;]+;)?base64,(.+)$/;\nconst reTestAbsoluteURL =\n /^(?:[a-z]+:)?\\/\\//i;\nconst reCapturePathAndName =\n // match[1] - path (includes trailing slash)\n // match[2] - name (includes extension)\n /^(.+\\/)?([^\\/]+)$/;\n\nfunction isInlineScriptError(err) {\n return !!(\n err.sourceURL &&\n err.sourceURL === window.location.href\n );\n}\n\nfunction isTranspiledScriptError(err) {\n return !!(\n err.stack &&\n reTestTranspiledScriptStack.test(err.stack)\n );\n}\n\nfunction inlineScripts() {\n return Array.from(document.scripts).\n filter(script => !script.getAttribute('src')).\n map(script => ({\n source: script.textContent,\n sourceMap: null,\n originalErrorInfo: null\n }));\n}\n\nfunction transpiledInlineScripts(_inlineScripts) {\n return _inlineScripts.\n map(scriptInfo => {\n scriptInfo.sourceMap = embeddedSourceMap(\n sourceMappingURL(scriptInfo.source)\n );\n\n return scriptInfo;\n }).\n filter(scriptInfo => !!scriptInfo.sourceMap);\n}\n\nasync function transpiledInlineScriptsWithOriginalErrorInfoAsync(\n _transpiledInlineScripts,\n err\n) {\n return Promise.all(\n _transpiledInlineScripts.\n map(async scriptInfo => {\n scriptInfo.originalErrorInfo = await originalErrorInfoAsync(\n scriptInfo.sourceMap, err\n );\n\n return scriptInfo;\n })\n );\n}\n\nasync function transpiledInlineScriptsSourceTracesAsync(err) {\n let scripts = transpiledInlineScripts(inlineScripts());\n\n try {\n return (await transpiledInlineScriptsWithOriginalErrorInfoAsync(\n scripts,\n err\n )).\n map(scriptInfo => sourceTrace(\n ...sourceTraceArgs(scriptInfo.originalErrorInfo)\n ));\n } catch (err1) {\n console.warn(`sourceMap library support missing/incomplete or error retrieving source information\\n${err1}`);\n\n return scripts.\n map((scriptInfo, i) => sourceTrace(\n scriptInfo.source,\n `Transpiled inline script #${i + 1}`,\n err.line,\n err.column\n ));\n }\n}\n\nasync function errorSourceAsync(err) {\n if (err.sourceText) {\n return err.sourceText;\n }\n\n if (!err.sourceURL) {\n throw new Error('sourceURL unavailable');\n }\n\n let url = err.sourceURL;\n let res = null;\n\n try {\n res = await fetch(url);\n } catch (err) {\n throw new Error(`Cannot retrieve ${url}`);\n }\n\n if (!res.ok) {\n throw new Error(`${res.status} (${res.statusText}) ${url}`);\n }\n\n return res.text();\n}\n\nfunction sourceMappingURL(source) {\n return (\n source.match(reCaptureSourceMappingURL) || []\n )[1];\n}\n\nfunction isEmbeddedSourceMap(_sourceMappingURL) {\n return reCaptureEmbeddedSourceMap.test(_sourceMappingURL);\n}\n\nfunction embeddedSourceMap(_sourceMappingURL) {\n let base64 = (\n (_sourceMappingURL || '').match(reCaptureEmbeddedSourceMap) || []\n )[1];\n\n return (base64) ? JSON.parse(atob(base64)) : null;\n}\n\nfunction isAbsoluteURL(url) {\n return reTestAbsoluteURL.test(url);\n}\n\nfunction pathAndName(url) {\n let [\n ,\n path,\n name\n ] = (url || '').match(reCapturePathAndName) || [];\n\n return [path, name];\n}\n\nasync function tryFetchAsync(url, {\n as = 'text'\n} = {}) {\n try {\n let res = await fetch(url);\n\n return (res.ok) ? res[as]() : null;\n } catch (err) {\n return null;\n }\n}\n\nasync function sourceMapAsync(source, sourceURL) {\n let url = sourceMappingURL(source);\n let map = null;\n\n if (!url) {\n return null;\n }\n\n if ( (map = embeddedSourceMap(url)) ) {\n return map;\n }\n\n if (isAbsoluteURL(url)) {\n return tryFetchAsync(url, {as: 'json'});\n }\n\n let [path, name] = pathAndName(sourceURL);\n\n if ( (map = await tryFetchAsync(`${path}${url}`, {as: 'json'})) ) {\n return map;\n }\n\n return tryFetchAsync(`${path}${name}.map`, {as: 'json'});\n}\n\nasync function originalErrorInfoAsync(_sourceMap, err) {\n const {SourceMapConsumer} = sourceMap;\n\n return SourceMapConsumer.with(_sourceMap, null, consumer => {\n let position = consumer.originalPositionFor({\n line: err.line || 1,\n // The sourceMap lib expects 0-based columns\n column: (err.column || 1) - 1\n }) || {};\n let source = consumer.sourceContentFor(position.source, true) || '';\n\n return {\n position,\n source\n };\n });\n}\n\nfunction sourceTraceArgs(_originalErrorInfo) {\n let {source, position} = _originalErrorInfo;\n\n return [\n source,\n position.source || '',\n position.line || 1,\n // The sourceTrace func expects 1-based columns\n // position.name is the erroneous token\n // Place the error marker after it for consistency with runtime errors\n (position.column || 0) + 1 + (position.name || '').length\n ];\n}\n\nfunction sourceTrace(source, url, line1, column1, {\n indent = '',\n peekLines = 2\n} = {}) {\n let lines = (source || '').split('\\n');\n let [path = 'path n/a', name = 'code'] = pathAndName(url);\n let iLine = (line1 || 1) - 1;\n let iColumn = (column1 || 1) - 1;\n let traceLines = [];\n let iTraceLineMax = Math.max(0, lines.length - 1);\n let iTraceLineBeg = Math.max(0, iLine - peekLines);\n let iTraceLineEnd = Math.min(iTraceLineMax, iLine + peekLines);\n let padMax = `${lines.length}`.length;\n let margin = '|';\n let linePointer = ' ';\n let columnFill = '~';\n let columnPointer = `${columnFill.repeat(iColumn)}^`;\n\n for (let i = iTraceLineBeg; i <= iTraceLineEnd; i++) {\n let pad = ' '.repeat(padMax - `${i + 1}`.length);\n let lineMarker = (i == iLine) ?\n linePointer :\n ' '.repeat(linePointer.length);\n let columnMarker = (i == iLine) ?\n `\\n${indent}${' '.repeat(linePointer.length)}${columnFill.repeat(padMax + margin.length)}${columnPointer}` :\n '';\n\n traceLines.push(`${indent}${lineMarker}${pad}${i + 1}${margin}${lines[i]}${columnMarker}`);\n }\n\n return `${indent}${name}:${line1 || 'n/a'}:${column1 || 'n/a'} (${path})\\n${traceLines.join('\\n')}`;\n}\n\nasync function formatErrorAsync(err, {\n includeStack = true\n} = {}) {\n let trace;\n\n try {\n if (isInlineScriptError(err)) {\n if (isTranspiledScriptError(err)) {\n trace = (\n await transpiledInlineScriptsSourceTracesAsync(err)\n ).join('\\n');\n } else {\n trace = sourceTrace(\n await errorSourceAsync(err), err.sourceURL, err.line, err.column\n );\n }\n } else {\n let source = await errorSourceAsync(err);\n let map = await sourceMapAsync(source, err.sourceURL);\n\n if (map) {\n try {\n trace = sourceTrace(\n ...sourceTraceArgs(await originalErrorInfoAsync(map, err))\n );\n } catch (err1) {\n console.warn(`sourceMap library support missing/incomplete or error retrieving source information\\n${err1}`);\n }\n }\n\n if (!trace) {\n trace = sourceTrace(\n source, err.sourceURL, err.line, err.column\n );\n }\n }\n } catch (err1) {\n err.sourceTraceNA = `${err1}`;\n\n trace = pretty(err);\n }\n\n return (includeStack) ?\n `${trace}\\nstack:\\n ${\n (err &&\n err.stack &&\n err.stack.replace(/\\n/gm, '\\n ')\n ) || 'n/a'\n }` :\n `${trace}`;\n}\n\nfunction reportError(err, {\n includeStack = true,\n note = 'error'\n} = {}) {\n formatErrorAsync(err, {includeStack}).then(str => {\n p(str,\n `(${note}) ${err}`,\n {level: 'error'});\n });\n}\n\nexport {\n sourceTrace,\n formatErrorAsync,\n reportError\n};\nexport default reportError;\n","const _configDefaults = {\n interceptConsole: true,\n addGlobals: true,\n autoUse: true\n};\n\nconst _config = {..._configDefaults, ...window.PEEK42_CONFIG};\n\nexport default _config;\n","import {_string, _comment, p, pp} from '../universal/base';\nimport {formatErrorAsync} from './error';\n\nwindow.console = window.console || {};\nconst _fnOrig = {};\n\nfunction _interceptNativeConsoleFn(name) {\n _fnOrig[name] = window.console[name];\n const {map} = Array.prototype;\n\n window.console[name] = function () {\n let str = map.call(arguments, arg => _string(arg)).join(' ');\n let stack = ((new Error).stack || '\\n').split('\\n');\n let loc = (stack.shift(), stack.shift() || '[source location n/a]');\n\n p(str,\n _comment('', '', `console.${name}@${loc}`),\n {level: name});\n\n try {\n _fnOrig[name] && _fnOrig[name].apply(window.console, arguments);\n } catch (err) {\n formatErrorAsync(err).then(str => {\n p(str,\n _comment('', err, `console.${name}@${loc}`),\n {level: 'error', collapsed: true});\n });\n }\n };\n}\n\nfunction _restoreNativeConsoleFns() {\n Object.keys(_fnOrig).forEach(name => {\n window.console[name] = _fnOrig[name];\n });\n}\n\nexport {\n _interceptNativeConsoleFn,\n _restoreNativeConsoleFns\n};\n","import {p, pp} from '../universal/base';\n\nclass WS {\n constructor(url = `${location.origin.replace(/^http/, 'ws')}/peek42`) {\n this._url = url;\n this._ws = new WebSocket(this._url);\n\n this._ws.addEventListener('open', ev => {\n p(`peek42 WebSocket open (url: ${this._url})`,\n null, {level: 'info'});\n });\n this._ws.addEventListener('close', ev => {\n p(`peek42 WebSocket close (url: ${this._url}, code: ${ev.code})`,\n null, {level: 'warn'});\n });\n this._ws.addEventListener('error', ev => {\n throw new Error(`peek42 WebSocket error (url: ${this._url})`);\n });\n\n this._ws.addEventListener('message', ev => {\n let serverWireData = ev.data;\n let serverData = JSON.parse(serverWireData);\n\n this.onmessage(serverData);\n });\n }\n\n onmessage(serverData) {\n let {val, comment, opts} = serverData;\n\n if (comment === null) {\n val = `(server) ${val}`;\n } else {\n comment = `(server) ${comment}`;\n }\n\n p(val, comment, opts);\n }\n}\n\nconst cable = {\n init(url) {\n this._websocket = new WS(url);\n }\n};\n\nexport {\n cable\n};\n","import peek42, {_comment, p, pp, use} from '../universal/base';\nimport './styles/base.scss';\nimport Console from './console/console';\nimport reportError, {\n sourceTrace,\n formatErrorAsync\n} from './error';\nimport _config from './config';\nimport {\n _interceptNativeConsoleFn,\n _restoreNativeConsoleFns\n} from './intercept';\nimport {cable} from './cable';\n\nfunction _output(...args) {\n // Allow peek42.console.content to be used without\n // Console.instance.then wait (or the setTimeout 0 trick)\n // after console has been created and assigned\n if (peek42.console) {\n return peek42.console._output(...args);\n }\n\n Console.instance.then(console => {\n Object.assign(peek42, {\n console\n });\n\n console._output(...args);\n });\n}\n\nConsole.instance.then(console => {\n Object.assign(peek42, {\n console\n });\n});\n\np.trace = (comment = undefined, opts = undefined) => {\n let stack = ((new Error).stack || '\\n').split('\\n');\n let trace = (stack.shift(), stack);\n let loc = trace[0];\n\n _output(\n trace.join('\\n'),\n _comment(comment, loc, `trace`),\n opts\n );\n};\n\nfunction walk(elem, fnVisit, {\n level = 0\n} = {}) {\n fnVisit(elem, level);\n\n for (let node = elem.firstChild;\n node;\n node = node.nextSibling\n ) {\n walk(node, fnVisit, {level: level + 1});\n }\n\n return elem;\n}\n\nconst 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\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 domStr(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 str = '';\n\n walk(elemOrSel, (node, level) => {\n if (types.has(node.nodeType)) {\n let pad = ' '.repeat(level);\n let sn = formatNode(types, node, level);\n\n if (sn) {\n str += `${pad}${sn}\\n`;\n }\n }\n }, {level});\n\n return str;\n}\n\np.domStr = (elemOrSel, comment = undefined, opts = undefined) => {\n _output(\n domStr(elemOrSel, (opts || {}).dom),\n _comment(comment, elemOrSel || document, `dom`),\n opts\n );\n};\n\np.dom = p.domStr;\n\nObject.assign(peek42, {\n _output,\n Console,\n sourceTrace,\n formatErrorAsync,\n reportError,\n cable\n});\n\nfunction _onError(ev) {\n reportError(ev.error, {\n note: 'uncaught exception'\n });\n}\n\nfunction _onUnhandledRejection(ev) {\n reportError(ev.reason, {\n note: 'unhandled rejection'\n });\n}\n\nwindow.addEventListener('error', _onError);\nwindow.addEventListener('unhandledrejection', _onUnhandledRejection);\n\nif (_config.interceptConsole) {\n _interceptNativeConsoleFn('log');\n _interceptNativeConsoleFn('info');\n _interceptNativeConsoleFn('warn');\n _interceptNativeConsoleFn('error');\n}\n\nif (_config.addGlobals) {\n Object.assign(window, {\n p,\n pp\n });\n}\n\nif (_config.autoUse) {\n window.apivis && use(apivis);\n}\n\nexport default peek42;\n"],"names":["_isNullProtoObject","val","__proto__","undefined","_string","String","_comment","comment","note","str","replace","max","length","substr","_outputOptsDefaults","level","collapsed","_prettyMakesSense","Object","Function","pretty","objs","keys","JSON","stringify","k","v","seen","indexOf","push","p","opts","peek42","_output","pp","args","inspect","use","lib","assign","Symbol","toStringTag","LIB_NAME","version","LIB_VERSION","flash1","el","className","classList","add","setTimeout","remove","flash2","flashSizeLimit","flashNotice","flashSuccess","flashWarning","flashError","flashOutput","Resizer","constructor","elResizee","elFlashSizeLimit","elsMakeSameHeight","ratio","minRatio","maxRatio","_elResizee","_elFlashSizeLimit","_elsMakeSameHeight","_ratio","_minRatio","_maxRatio","_height","window","innerHeight","_resizeY","_resizeYDelta","_isResizing","_syncHeights","height","TypeError","styleHeight","style","forEach","isResizing","resizeStart","clientY","resize","minHeight","maxHeight","Math","min","resizeEnd","_logEntryToggleAndBody","elHead","firstElementChild","nextElementSibling","_logEntryExpand","elToggle","elBody","innerHTML","display","_logEntryCollapse","_logEntryToggle","_onLogEntryHeadClick","ev","currentTarget","addLogEntry","elLog","entrySimpleText","entryDesc","entryText","entryHtml","hidden","elEntry","document","createElement","textContent","elDesc","appendChild","addEventListener","insertBefore","firstChild","scrollTop","Console","instance","Promise","resolve","reject","readyState","_instance","Error","new","target","name","querySelector","_container","setAttribute","_html","body","_resizer","_log","_bar1","_isMinimized","_countsByLevel","info","log","warn","error","_title","_onTitleClick","_eval","_onEvalKeyPress","_clear","_onClearClick","_resize","_onResizeTouchStart","_onBodyTouchMove","_onBodyTouchEnd","_onWindowResize","_quietl","_onQuietClick","_toggle","_onToggleClick","toggle","minimize","_isLevelActive","contains","active","isMinimized","isQuiet","show","HTMLElement","dataset","peek42HtmlEntry","preventDefault","stopPropagation","toggleLogPos","crCode","charCodeAt","lfCode","charCode","evalJS","clear","touches","toggleQuiet","toggleDisplay","querySelectorAll","_toggleEntriesDisplay","elCtrl","activeClass","entriesClass","logIsAtTop","logPosBottom","logPosTop","scrollHeight","jsToEval","value","match","_printFnMap","pattern","join","parts","RegExp","dummy","expr","fn","js","err","sourceURL","sourceText","line","_quiet","checked","quiet","unquiet","_view","content","consoleHTML","t","type","d","desc","M","member","m","members","i","c","chain","a","api","x","dom","reTestTranspiledScriptStack","reCaptureSourceMappingURL","reCaptureEmbeddedSourceMap","reTestAbsoluteURL","reCapturePathAndName","isInlineScriptError","location","href","isTranspiledScriptError","stack","test","inlineScripts","Array","from","scripts","filter","script","getAttribute","map","source","sourceMap","originalErrorInfo","transpiledInlineScripts","_inlineScripts","scriptInfo","embeddedSourceMap","sourceMappingURL","transpiledInlineScriptsWithOriginalErrorInfoAsync","_transpiledInlineScripts","all","originalErrorInfoAsync","transpiledInlineScriptsSourceTracesAsync","sourceTrace","sourceTraceArgs","err1","console","column","errorSourceAsync","url","res","fetch","ok","status","statusText","text","_sourceMappingURL","base64","parse","atob","isAbsoluteURL","pathAndName","path","tryFetchAsync","as","sourceMapAsync","_sourceMap","SourceMapConsumer","with","consumer","position","originalPositionFor","sourceContentFor","_originalErrorInfo","line1","column1","indent","peekLines","lines","split","iLine","iColumn","traceLines","iTraceLineMax","iTraceLineBeg","iTraceLineEnd","padMax","margin","linePointer","columnFill","columnPointer","repeat","pad","lineMarker","columnMarker","formatErrorAsync","includeStack","trace","sourceTraceNA","reportError","then","_configDefaults","interceptConsole","addGlobals","autoUse","_config","PEEK42_CONFIG","_fnOrig","_interceptNativeConsoleFn","prototype","call","arguments","arg","loc","shift","apply","WS","origin","_url","_ws","WebSocket","code","serverWireData","data","serverData","onmessage","cable","init","_websocket","walk","elem","fnVisit","node","nextSibling","nodeTypeNames","Node","reduce","obj","slice","toLowerCase","formatAttrs","attrs","attr","formatNode","types","tag","tagName","nodeType","ELEMENT_NODE","has","ATTRIBUTE_NODE","attributes","COMMENT_NODE","trim","TEXT_NODE","domStr","elemOrSel","nodeTypes","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","include","exclude","Set","concat","includes","sn","_onError","_onUnhandledRejection","reason","apivis"],"mappings":"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