{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/components/tools/lively-debugger.js"],"names":["Morph","sourcemap","babelDefault","babelPluginLocals","babelPluginVarRecorder","babel","modulesRegister","debuggerGitHubURL","Debugger","initialize","windowTitle","windowIcon","lastDebuggerPausedResult","currentTarget","currentCallFrame","highlightedLineId","scopeList","document","createElement","breakPoints","targetList","getSubmorph","scriptList","addEventListener","scriptListChanged","bind","callFrameList","codeEditor","editor","debuggerWorkspace","self","lively4ChromeDebugger","lively","confirm","window","open","focus","onTargetsInitialized","initializeButtonBar","initializeTargets","initializeCodeEditor","initializeDebuggerWorkspace","detachedCallback","_debugger_is_attached","detachDebugger","dispatchEvent","CustomEvent","evalInRuntime","str","sendCommandToDebugger","expression","result","value","getScriptSource","id","livelyDebuggerScriptSources","setScriptSource","source","getOriginalScriptSource","livelyDebuggerOriginalScriptSources","setOriginalScriptSource","buttons","getElementsByTagName","i","length","button","clickHandler","console","warn","getDebuggingTargets","then","targets","forEach","ea","extensionId","option","type","text","url","title","appendChild","catch","error","log","targetId","_selectedTargetId","transpile","filename","src","transform","babelrc","plugins","presets","replace","sourceFileName","moduleIds","sourceMaps","compact","comments","code","ast","resolveModuleSource","undefined","onSave","_ensureCurrentCallFrame","currenSourceURL","originalURL","editedSource","getValue","original","currentScriptId","m","match","recorderModuleId","regExp","RegExp","postfix","scriptId","dryRunResult","scriptSource","dryRun","notify","res","exceptionDetails","alert","updateCodeEditor","LastRes","saveFileURL","fetch","method","body","onSetBreakpoint","_selectedScriptId","lineNumberN0","e","getDocumentPosition","row","params","session","getBreakpoints","breakPointId","breakpointId","location","lineNumber","dispatchBreakpointResult","actualLocation","actualLineNumberN0","setBreakpoint","clearBreakpoint","setMode","renderer","setShowGutter","currentSelectionOrLine","sel","getSelectionRange","start","end","column","currline","getLine","getCopyText","commands","addCommand","name","bindKey","win","mac","exec","_evaluateOnCallFrame","exceptionsDetails","_printResult","openInspector","debugButtonClick","evt","attachDebugger","debugButton","classList","add","stopButton","remove","_setDisabledAllDebugButtons","stopButtonClick","disabled","_reset","pauseButtonClick","updateScripts","playButtonClick","playButton","pauseButton","stepOverButtonClick","stepIntoButtonClick","stepOutButtonClick","stepThroughButtonClick","startEnd","currentLocationToScropeEnd","multiStepButtonClick","debugMethod","prompt","numberOfIterations","parseInt","millisecondsBetweenSteps","setTimeout","scriptableDebuggerButtonClick","openWorkspace","cmp","parentElement","setAttribute","setDoitContext","restartFrameButtonClick","callFrameId","callFrames","breakpointsButtonClick","active","target","toggle","profilerButtonClick","numberOfSections","profile","urlButtonClick","reloadButtonClick","ignoreCache","getScriptSources","setValue","clearBreakpoints","removeMarker","debuggerAttach","attachAndEnableDebuggerFromTargetId","debuggerDetach","args","debuggerSendCommand","dispatchDebuggerPaused","updateCallFrameList","updateScopeList","extractSourceMap","sourceMappingURL","json","extractSourceURL","pausedResult","backupScriptResource","columnNumber","_setScriptId","sourceURL","sourceMap","smc","SourceMapConsumer","sourcesContent","pos","originalPositionFor","line","gotoLine","_updateHighlightLine","innerHTML","callFrameClickHandler","callFrameIndex","getAttribute","callFrame","stopPropagation","li","functionName","scopeChain","summaryClickHandler","selectedSummary","selectedDetails","hasAttribute","objectId","appendPropertyList","scope","obj","object","details","summary","parentSummary","parentDetails","propList","currentSummary","currentDetails","j","property","propSummary","propDetails","append","cb","getDebuggingScripts","scripts","options","selectedIndex","bool","range","Range","addMarker","fromSel","selection","moveCursorToPosition","clearSelection","insert","JSON","stringify","toSel","selectToPosition"],"mappings":"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","file":"lively-debugger.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport sourcemap from 'src/external/source-map.min.js'\n\nimport babelDefault from 'systemjs-babel-build';\nconst {babel, modulesRegister} = babelDefault;\n\nimport babelPluginLocals from 'babel-plugin-locals';\nimport babelPluginVarRecorder from 'babel-plugin-var-recorder';\n\n/*\n * See https://chromedevtools.github.io/debugger-protocol-viewer/v8/Debugger/\n */ \n\nconst debuggerGitHubURL = 'https://github.com/LivelyKernel/lively4-chrome-debugger';\n\nexport default class Debugger extends Morph {\n  \n\n  initialize() {\n    this.windowTitle = 'Debugger';\n    this.windowIcon = '<i class=\"fa fa-chrome\" aria-hidden=\"true\"></i>';\n    this.lastDebuggerPausedResult = null;\n    this.currentTarget = null;\n    this.currentCallFrame = null;\n    this.highlightedLineId = null;\n    this.scopeList = document.createElement('ul');\n    this.breakPoints = {}; // mapping: scriptId => {lineNumberN0 => breakpointId}\n    \n    // #TODO refactor #ACE\n    // this.Range = ace.require('ace/range').Range;\n\n    this.targetList = this.getSubmorph('#targetList');\n    this.scriptList = this.getSubmorph('#scriptList');\n    this.scriptList.addEventListener('change', this.scriptListChanged.bind(this))\n    this.callFrameList = this.getSubmorph('#callFrameList');\n    this.scopeList = this.getSubmorph('#scopeList');\n    this.codeEditor = this.getSubmorph('#codeEditor').editor;\n    this.debuggerWorkspace = this.getSubmorph('#debuggerWorkspace').editor;\n\n\n\n    // ensure the extension is installed    \n    if (!self.lively4ChromeDebugger) {\n      if (lively.confirm('Lively4 Debugger Extension not found. Do you want to install it?')) {\n        window.open(debuggerGitHubURL, '_blank').focus();\n      }\n      return;\n    }\n\n    this.onTargetsInitialized;\n    this.initializeButtonBar();\n    this.initializeTargets();\n    this.initializeCodeEditor();\n    this.initializeDebuggerWorkspace();\n    \n    this.detachedCallback = () => {\n      if (this._debugger_is_attached()) {\n        this.detachDebugger();\n      }\n    };\n    this.dispatchEvent(new CustomEvent('loaded'));\n  }\n\n  /*\n  * Initialization\n  */\n\n  async evalInRuntime(str) {  \n    return (await this.sendCommandToDebugger('Runtime.evaluate', {expression: \"str\"})).result.value\n  }\n\n  \n  getScriptSource(id) {\n    return window.livelyDebuggerScriptSources && window.livelyDebuggerScriptSources[id]\n  }\n  \n  setScriptSource(id, source) {\n    if (!window.livelyDebuggerScriptSources) \n      window.livelyDebuggerScriptSources = {}\n    window.livelyDebuggerScriptSources[id] = source\n  }\n\n\n  getOriginalScriptSource(id) {\n    return window.livelyDebuggerOriginalScriptSources && window.livelyDebuggerOriginalScriptSources[id]\n  }\n  \n  setOriginalScriptSource(id, source) {\n    if (!window.livelyDebuggerOriginalScriptSources) \n      window.livelyDebuggerOriginalScriptSources = {}\n    window.livelyDebuggerOriginalScriptSources[id] = source\n  }\n  \n  \n  initializeButtonBar() {\n    var buttons = this.getSubmorph('#debugger-top').getElementsByTagName('button');\n    for (var i = 0; i < buttons.length; i++) {\n      var button = buttons[i];\n      this[button.id] = button;\n      var clickHandler = this[`${button.id}Click`];\n      if (clickHandler) {\n        button.addEventListener('click', clickHandler.bind(this));\n      } else {\n        console.warn(`No click handler called ${button.id}Click`);\n      }\n    }\n  }\n  \n  initializeTargets() {\n    lively4ChromeDebugger.getDebuggingTargets().then((targets) =>\n      targets.forEach((ea) => {\n        // hide background page which is used to talk to the debugger\n        if (ea.extensionId != 'igllpbjcbjlfjelmiphlkafgbmijgddg') {\n          var option = document.createElement('option');\n          if (ea.type == 'worker') {\n            option.text = `Worker at ${ea.url}`;\n          } else {\n            option.text = ea.title;\n          }\n          option.value = ea.id;\n          this.targetList.appendChild(option);\n          if (this.onTargetsInitialized) {\n            this.onTargetsInitialized()\n          }\n        }\n      }\n    )).catch((error) => {\n      console.log(error);\n      debugger;\n    });\n    this.targetList.addEventListener('change', () => {\n      this.currentTarget = {\n        targetId: this._selectedTargetId()\n      };\n    });\n  }\n  \n  initializeCodeEditor() {\n    // #TODO migrate from ACE to CodeMirror\n    // see https://codemirror.net/demo/marker.html\n    // this.codeEditor.session.setMode(\"ace/mode/javascript\");\n    // this.codeEditor.currentLocationToScropeEnd = () => {\n    //   let text,\n    //       editor = this.codeEditor,\n    //       sel = editor.getSelectionRange(),\n    //       start = sel.start.row + 1, // 0-based\n    //       bracketCount = null,\n    //       currlineNumber = start;\n    //   var line = editor.session.getLine(currlineNumber);\n    //   while (!bracketCount || bracketCount > 0) {\n    //     if (Math.abs(bracketCount) > 2000) {\n    //       alert('Unable to match brackets');\n    //     }\n    //     bracketCount += (line.match(/{/g) || []).length;\n    //     bracketCount -= (line.match(/}/g) || []).length;\n    //     currlineNumber += 1;\n    //     line = editor.session.getLine(currlineNumber);\n    //     if (line.length == 0) break;\n    //   }\n    //   return {\n    //     start: start + 1, // next line\n    //     end: currlineNumber\n    //   };\n    // };\n    // this.codeEditor.commands.addCommand({\n    //   name: \"saveIt\",\n    //   bindKey: {win: \"Ctrl-S\", mac: \"Command-S\"},\n    //   exec: (editor) => {\n    //     this.onSave(editor)\n    //   }\n    // });\n    // this.codeEditor.on(\"guttermousedown\", (e) => {\n    //   this.onSetBreakpoint()\n    // });\n  }\n  \n  transpile(filename, src) {\n    var result = babel.transform(src, {\n        babelrc: false,\n        plugins: [babelPluginLocals, babelPluginVarRecorder],\n        presets: [modulesRegister],\n        filename: filename.replace(/\\!transpiled$/,\"\"),\n        sourceFileName: filename.replace(/\\!transpiled$/,\"\"),\n        moduleIds: false,\n        sourceMaps: true,\n        compact: false,\n        comments: true,\n        code: true,\n        ast: true,\n        resolveModuleSource: undefined\n      })\n    return result.code\n  }\n  \n  \n  async onSave(editor) {\n    if (!this._ensureCurrentCallFrame()) return;\n    \n    if (this.currenSourceURL) {\n      var originalURL = this.currenSourceURL.replace(/\\!transpiled$/,\"\")\n      var editedSource = editor.getValue()\n      var source = this.transpile(this.currenSourceURL, editedSource)\n\n      var original = this.getOriginalScriptSource(this.currentScriptId)\n      \n      \n      // give debugger a chance to figure out the change\n      var m = original.match(/_recorder_._module_([0-9]+)/)\n      if (m) {\n        var recorderModuleId = m[1] \n        var regExp = new RegExp(\"_recorder_\\._module_[0-9]+\",\"g\")\n        source = source.replace(regExp, \"_recorder_._module_\" + recorderModuleId)\n        var postfix = original.match(/(\\}\\)\\(System, System\\);(.|\\n)*)/)[1]\n        source  = \"(function(System, SystemJS) {\" + source + postfix\n        \n        \n      }\n      \n      // lively.openWorkspace(source)\n\n      console.log(\"new source: \" + source)\n    } else {\n      source  = editor.getValue()\n    }\n    var scriptId = this.currentScriptId \n  \n    var dryRunResult = await this.sendCommandToDebugger('Debugger.setScriptSource', {\n      scriptId: scriptId,\n      scriptSource: source,\n      dryRun: true\n    })\n\n    if (!dryRunResult) {\n      lively.notify(\"[Debugger] dry run failed for script: \" + scriptId)\n      return \n    }\n    \n    // var workingSource = this.getScriptSource(scriptId)\n    var res = await this.sendCommandToDebugger('Debugger.setScriptSource', {\n      scriptId: scriptId,\n      scriptSource: source,\n      dryRun: false\n    })\n\n    if (res && res.exceptionDetails) {\n        alert(res.exceptionDetails.text);\n        return \n    } \n  \n    if (!res) {\n      lively.notify(\"PROBLEM:\", \"Debugger.setScriptSource fails on hot run, without indicating this in the dry run!\",10,null,\"red\")\n      this.updateCodeEditor()\n    } else { \n      window.LastRes = res\n      this.setScriptSource(scriptId, editedSource || source);\n\n      var saveFileURL =  originalURL || this.currenSourceURL;\n      fetch(saveFileURL, {\n        method: \"PUT\",\n        body: editedSource || source}).then(() => {\n          lively.notify(\"saved \" + saveFileURL )\n        })\n\n      // Experiment\n      // this.setScriptSource(res.callFrames[0].location.scriptId, source);\n  \n      // this.currentCallFrame = res.callFrames[0]\n    }\n  }\n  \n  onSetBreakpoint() {\n    if (!this._ensureCurrentCallFrame()) return;\n    var scriptId = this._selectedScriptId();\n    var lineNumberN0 = e.getDocumentPosition().row; // 0-based\n    var method, params;\n    if (lineNumberN0 in this.codeEditor.session.getBreakpoints()) {\n      method = 'Debugger.removeBreakpoint';\n      if (!(scriptId in this.breakPoints) || !(lineNumberN0 in this.breakPoints[scriptId])) {\n        alert(`Cannot find breakpointId for line #${lineNumberN0 + 1}`);\n        debugger;\n        return;\n      }\n      var breakPointId = this.breakPoints[scriptId][lineNumberN0];\n      delete this.breakPoints[scriptId][lineNumberN0];\n      params = { breakpointId: breakPointId };\n    } else {\n      method = 'Debugger.setBreakpoint';\n      params = {\n        location: {\n          scriptId: scriptId,\n          lineNumber: lineNumberN0 // expects 0-based lineNumber\n        }\n      };\n    }\n    this.sendCommandToDebugger(method, params).then((res) => {\n      this.dispatchBreakpointResult(scriptId, lineNumberN0, res);\n    });\n  }\n  \n  dispatchBreakpointResult(scriptId, lineNumberN0, res) {\n    if (!res) return; // command failed on background page\n    if (res.actualLocation) {\n      if (scriptId != res.actualLocation.scriptId) {\n        alert('Breakpoint set in a different script.');\n        debugger;\n        return;\n      }\n      var actualLineNumberN0 = res.actualLocation.lineNumber; // 0-based\n      if (!(scriptId in this.breakPoints)) {\n        this.breakPoints[scriptId] = {};\n      }\n      this.breakPoints[scriptId][actualLineNumberN0] = res.breakpointId;\n      this.codeEditor.session.setBreakpoint(actualLineNumberN0);\n    } else {\n      this.codeEditor.session.clearBreakpoint(lineNumberN0);\n    }\n  }\n  \n  initializeDebuggerWorkspace() {\n    this.debuggerWorkspace.session.setMode(\"ace/mode/javascript\");\n    this.debuggerWorkspace.renderer.setShowGutter(false);\n    this.debuggerWorkspace.currentSelectionOrLine = () => {\n        let text,\n            editor = this.debuggerWorkspace,\n            sel =  editor.getSelectionRange();\n        if (sel.start.row == sel.end.row && sel.start.column == sel.end.column) {\n            var currline = editor.getSelectionRange().start.row;\n            text = editor.session.getLine(currline);\n        } else {\n            text = editor.getCopyText();\n        }\n        return text;\n    };\n    this.debuggerWorkspace.commands.addCommand({\n      name: \"doIt\",\n      bindKey: {win: \"Ctrl-D\", mac: \"Command-D\"},\n      exec: (editor) => {\n        this._evaluateOnCallFrame(editor);\n      }\n    });\n    this.debuggerWorkspace.commands.addCommand({\n      name: \"printIt\",\n      bindKey: {win: \"Ctrl-P\", mac: \"Command-P\"},\n      exec: (editor) => {\n        this._evaluateOnCallFrame(editor, (res) => {\n          if (res.exceptionsDetails) {\n            this._printResult(editor, res.exceptionsDetails);\n          } else {\n            this._printResult(editor, res.result.value || res.result);\n          }\n        });\n      }\n    });\n    this.debuggerWorkspace.commands.addCommand({\n      name: \"inspectIt\",\n      bindKey: {win: \"Ctrl-I\", mac: \"Command-I\"},\n      exec: (editor) => {\n        this._evaluateOnCallFrame(editor, (res) => {\n          if (res.exceptionsDetails) {\n            lively.openInspector(res);\n          } else {\n            lively.openInspector(res.result.value || res.result);\n          }\n        });\n      }\n    });\n  }\n\n  /*\n  * Event handlers\n  */\n\n  debugButtonClick(evt) {\n    this.detachDebugger(); // detach any old debugger\n    this.attachDebugger().then(() => {\n      this.sendCommandToDebugger('Debugger.enable');\n    });\n    this.debugButton.classList.add('hide');\n    this.stopButton.classList.remove('hide');\n    this._setDisabledAllDebugButtons(false);\n  }\n  \n  stopButtonClick(evt) {\n    this.detachDebugger();\n    this.stopButton.classList.add('hide');\n    this.debugButton.classList.remove('hide');\n    this._setDisabledAllDebugButtons(true);\n    this.debugButton.disabled = false;\n    this._reset();\n  }\n\n  pauseButtonClick(evt) {\n    this.updateScripts();\n    this.sendCommandToDebugger('Debugger.pause');\n  }\n  \n  playButtonClick(evt) {\n    this.sendCommandToDebugger('Debugger.resume');\n    this.playButton.classList.add('hide');\n    this.pauseButton.classList.remove('hide');\n  }\n\n  stepOverButtonClick(evt) {\n    this.sendCommandToDebugger('Debugger.stepOver');\n  }\n  \n  stepIntoButtonClick(evt) {\n    this.sendCommandToDebugger('Debugger.stepInto');\n  }\n  \n  stepOutButtonClick(evt) {\n    this.sendCommandToDebugger('Debugger.stepOut');\n  }\n  \n  stepThroughButtonClick(evt) {\n    if (!this._ensureCurrentCallFrame()) return;\n    var scriptId = this._selectedScriptId();\n    var startEnd = this.codeEditor.currentLocationToScropeEnd();\n    for (var i = startEnd.start; i <= startEnd.end; i++) {\n      this.sendCommandToDebugger('Debugger.setBreakpoint', {\n          location: {\n            scriptId: scriptId,\n            lineNumber: i - 1 // expects 0-based lineNumber\n          }\n      }).then((res) => {\n        this.dispatchBreakpointResult(scriptId, i - 1, res);\n      });\n    }\n    this.sendCommandToDebugger('Debugger.resume');\n  }\n  \n  multiStepButtonClick(evt) {\n    var debugMethod = window.prompt('Step method (stepOver, stepInto, or stepOut):', 'stepOver');\n    var numberOfIterations = parseInt(window.prompt('Number of iterations:', '5'));\n    var millisecondsBetweenSteps = parseInt(window.prompt('Milliseconds between steps:', '1000'));\n    for (var i = 0; i < numberOfIterations; i++) {\n      setTimeout(() => {\n        this.sendCommandToDebugger(`Debugger.${debugMethod}`);\n      }, millisecondsBetweenSteps * i);\n    }\n  }\n  \n  scriptableDebuggerButtonClick(evt) {\n    lively.openWorkspace(\"this.sendCommandToDebugger('Debugger.stepOver', {});\",0).then((cmp) => {\n    \tcmp.parentElement.setAttribute(\"title\", 'Debugger Workspace');\n    \tcmp.setDoitContext(this);\n    })\n  }\n  \n  restartFrameButtonClick(evt) {\n    if (!this._ensureCurrentCallFrame()) return;\n    this.sendCommandToDebugger('Debugger.restartFrame', {\n      callFrameId: this.currentCallFrame.callFrameId\n    }).then((res) => {\n      if (!res) {\n        lively.notify('Failed to restart frame.',\"\",null,null,\"red\");\n      } else if (res.callFrames && res.callFrames.length > 0){\n        this.currentCallFrame = res.callFrames[0];\n        this.updateCodeEditor();\n      } else {\n        console.log('Debugger.restartFrame', res);\n      }\n    });\n  }\n  \n  breakpointsButtonClick(evt) {\n    var active = !evt.target.classList.toggle('active');\n    this.sendCommandToDebugger('Debugger.setBreakpointsActive', { active: active });\n  }\n  \n  profilerButtonClick(evt) {\n    var numberOfSections = parseInt(window.prompt('Seconds to profile:', '5'));\n    this.sendCommandToDebugger('Profiler.enable').then(() => {\n      this.sendCommandToDebugger('Profiler.start').then(() => {\n        setTimeout(() => {\n          this.sendCommandToDebugger('Profiler.stop').then((res) => {\n            if (res && res.profile) {\n              lively.openInspector(res.profile);\n            } else {\n              lively.notify('Failed to retrieve profile.',\"\",10,null,\"red\");\n              debugger;\n            }\n            this.sendCommandToDebugger('Profiler.disable');\n          });\n        }, numberOfSections * 1000);\n      });\n    });\n  }\n  \n  urlButtonClick(evt) {\n    var url = window.prompt('URL to open:', 'https://hpi.de');\n    this.sendCommandToDebugger('Page.enable').then(() => {\n      this.sendCommandToDebugger('Page.navigate', { url: url }).then((res) => {\n        this.sendCommandToDebugger('Page.disable');\n      });\n    });\n  }\n  \n  reloadButtonClick(evt) {\n    this.sendCommandToDebugger('Page.enable').then(() => {\n      this.sendCommandToDebugger('Page.reload', { ignoreCache: true }).then(() => {\n        this.sendCommandToDebugger('Page.disable');\n      });\n    });\n  }\n  \n  scriptListChanged(evt) {\n    var scriptId = this._selectedScriptId()\n    this.sendCommandToDebugger('Debugger.getScriptSource', {\n      scriptId: scriptId\n    }).then((res) => {\n      if (!res) {\n        res = {scriptSource: this.getScriptSources(scriptId)}\n      }\n      \n      if (res && res.scriptSource) {\n        this.codeEditor.setValue(res.scriptSource);\n        this.codeEditor.session.clearBreakpoints();\n        if (this.highlightedLineId) {\n          this.codeEditor.session.removeMarker(this.highlightedLineId);\n        }\n      } else {\n        alert('Unable to retrieve scriptSource:', res);\n        debugger;\n      }\n    });\n  }\n\n  /*\n  * Interaction with debugger extension\n  */\n\n  attachDebugger() {\n    return lively4ChromeDebugger.debuggerAttach(this.currentTarget);\n  }\n\n  attachAndEnableDebuggerFromTargetId(targetId) {\n    this.onTargetsInitialized = () => { this.targetList.value = targetId; }\n    this.currentTarget = { targetId: targetId };\n    this.debugButtonClick();\n  }\n\n  detachDebugger() {\n    return lively4ChromeDebugger.debuggerDetach(this.currentTarget);\n  }\n\n  sendCommandToDebugger(method, args) {\n    return lively4ChromeDebugger.debuggerSendCommand(\n      this.currentTarget, method, args);\n  }\n  \n  dispatchDebuggerPaused(result) {\n    // Update buttons\n    this.pauseButton.classList.add('hide');\n    this.playButton.classList.remove('hide');\n    \n    this.lastDebuggerPausedResult = result;\n    this.currentCallFrame = result.callFrames[0];\n    this.updateCodeEditor(result);\n    this.updateCallFrameList();\n    this.updateScopeList();\n  }\n  \n  async extractSourceMap(code) {\n    var m = code.match(/\\/\\/# sourceMappingURL=(.*)(\\n|$)/)\n    if (!m) return false\n  \tvar sourceMappingURL = m[1]\n\t  return (await fetch(sourceMappingURL)).json()\n  }\n\n  async extractSourceURL(code) {\n    var m = code.match(/\\/\\/# sourceURL=(.*)(\\n|$)/);\n    if (!m) return false\n  \treturn m[1]\n  }\n\n  /*\n  * Dynamic UI updating\n  */\n  \n  async updateCodeEditor(pausedResult) {\n    if (!this._ensureCurrentCallFrame()) return;\n    var currentScriptId = this.currentCallFrame.location.scriptId;\n    var res = await this.sendCommandToDebugger('Debugger.getScriptSource', {\n      scriptId: currentScriptId\n    })\n    this.currentScriptId = currentScriptId\n    \n    if (res) {\n      this.setOriginalScriptSource(currentScriptId, res.scriptSource)\n    }\n    \n    \n    if (!res) {\n      // #RageModeOn #Hack #ChromeBug #DebuggerAPI\n      res = {scriptSource: this.getScriptSource(currentScriptId)} ;\n    }\n\n    this.backupScriptResource = res\n    \n    if (res && res.scriptSource) {\n      var lineNumber = this.currentCallFrame.location.lineNumber + 1; // 0-based\n      var columnNumber = this.currentCallFrame.location.columnNumber\n      this._setScriptId(currentScriptId);\n  \n  \n      \n      var sourceURL = await this.extractSourceURL(res.scriptSource)\n      if (sourceURL) {\n        // lively.openWorkspace(res.scriptSource)\n\n\n        this.currenSourceURL = sourceURL\n        var sourceMap = await this.extractSourceMap(res.scriptSource)\n        var smc = sourcemap.SourceMapConsumer(sourceMap)\n        this.codeEditor.setValue(smc.sourcesContent[0]);\n        var pos = smc.originalPositionFor({\n          line: lineNumber,\n          column: columnNumber\n        })\n        // debugger\n        this.codeEditor.gotoLine(pos.line, pos.column);\n        this._updateHighlightLine(this.codeEditor.session, pos.line );\n      } else {\n        // fall back on raw data\n        this.codeEditor.gotoLine(lineNumber, columnNumber);\n        this.codeEditor.setValue(res.scriptSource);\n        this._updateHighlightLine(this.codeEditor.session, lineNumber );\n      }\n    } else {\n      console.log(\"res: \", res)\n      lively.notify(`Failed to getScriptSource for ${this.currentCallFrame.location.scriptId}`,\n        \"\",10, null, \"red\");\n    }\n  }\n  \n  updateCallFrameList() {\n    this.callFrameList.innerHTML = '';\n    var callFrames = this.lastDebuggerPausedResult.callFrames;\n    var callFrameClickHandler = (e) => {\n      var callFrameIndex = e.target.getAttribute('data-call-frame-index');\n      var callFrame = callFrames[callFrameIndex];\n      this.currentCallFrame = callFrame;\n      this.updateCodeEditor();\n      this.updateScopeList();\n      e.stopPropagation();\n    };\n    for (var i = 0; i < callFrames.length; i++) {\n      var callFrame = callFrames[i];\n      var li = document.createElement('li');\n      li.setAttribute('data-call-frame-index', i);\n      li.innerHTML = callFrame.functionName || '<i>unknown</i>';\n      li.addEventListener('click', callFrameClickHandler);\n      this.callFrameList.appendChild(li);\n    }\n  }\n  \n  updateScopeList() {\n    this.scopeList.innerHTML = '';\n    var scopeChain = this.currentCallFrame.scopeChain;\n    var summaryClickHandler = (e) => {\n      var selectedSummary = e.target;\n      var selectedDetails = selectedSummary.parentElement;\n      if (selectedDetails.hasAttribute('open')) return;\n      var objectId = e.target.getAttribute('data-object-id');\n      this.appendPropertyList(selectedSummary, objectId);\n    };\n    for (var i = 0; i < scopeChain.length; i++) {\n      var scope = scopeChain[i];\n      var obj = scope.object;\n      var details = document.createElement('details');\n      var summary = document.createElement('summary');\n      summary.setAttribute('data-object-id', obj.objectId);\n      summary.addEventListener('click', summaryClickHandler);\n      var text = scope.type;\n      if (scope.name) {\n        text = `${scope.type}: ${scope.name}`;\n      }\n      summary.innerHTML = text;\n      details.appendChild(summary);\n      var li = document.createElement('li');\n      li.appendChild(details);\n      this.scopeList.appendChild(li);\n    }\n  }\n  \n  appendPropertyList(parentSummary, objectId) {\n    this.sendCommandToDebugger('Runtime.getProperties', {objectId: objectId})\n      .then((res) => {\n        var parentDetails = parentSummary.parentElement;\n        var propList = document.createElement('ul');\n        var clickHandler = (e) => {\n          var currentSummary = e.target;\n          var currentDetails = currentSummary.parentElement;\n          if (currentDetails.hasAttribute('open')) return;\n          var objectId = currentSummary.getAttribute('data-object-id');\n          this.appendPropertyList(currentSummary, objectId);\n        };\n        for (var j = 0; j < res.result.length; j++) {\n          var property = res.result[j];\n          var li = document.createElement('li');\n          if (!property.value) {\n            li.innerHTML = `${property.name}`;\n          } else if (property.value.value) {\n            li.innerHTML = `${property.name}: ${property.value.value}`;\n          } else {\n            var propSummary = document.createElement('summary');\n            propSummary.setAttribute('data-object-id', property.value.objectId);\n            propSummary.innerHTML = `${property.name} [${property.value.type}]`;\n            propSummary.addEventListener('click', clickHandler);\n            var propDetails = document.createElement('details');\n            propDetails.appendChild(propSummary);\n            li.append(propDetails);\n          }\n          propList.appendChild(li);\n          parentDetails.innerHTML = '';\n          parentDetails.appendChild(parentSummary);\n          parentDetails.appendChild(propList);\n        }\n      }\n    );\n  }\n  \n  updateScripts(cb) {\n    lively4ChromeDebugger.getDebuggingScripts().then((scripts) => {\n      this.scriptList.innerHTML = '';\n      scripts.forEach((ea) => {\n        // hide background page which is used to talk to the debugger\n        if (ea.url) {\n          var option = document.createElement('option');\n          option.text = ea.url;\n          option.value = ea.scriptId;\n          this.scriptList.appendChild(option);\n        }\n      });\n      if (cb) cb();\n    });\n  }\n\n  /*\n  * Private helpers\n  */\n  \n  _reset() {\n    this.codeEditor.setValue('');\n    this.scriptList.innerHTML = '';\n    this.callFrameList.innerHTML = '';\n    this.scopeList.innerHTML = '';\n    this.breakPoints = {};\n  }\n  \n  _selectedTargetId() {\n    return this.targetList.options[this.targetList.selectedIndex].value;\n  }\n\n  _selectedScriptId() {\n    return this.scriptList.options[this.scriptList.selectedIndex].value;\n  }\n  \n  _setScriptId(scriptId) {\n    this.updateScripts(() => {\n      this.scriptList.value = scriptId;\n    });\n    \n  }\n  \n  _setDisabledAllDebugButtons(bool) {\n    var buttons = this.getSubmorph('#debugger-top').getElementsByTagName('button');\n    for (var i = 0; i < buttons.length; i++) {\n      buttons[i].disabled = bool;\n    }\n    this.targetList.disabled = !bool;\n  }\n  \n  _updateHighlightLine(session, lineNumber) {\n    if (this.highlightedLineId) {\n      session.removeMarker(this.highlightedLineId);\n    }\n    var range = new this.Range(lineNumber - 1, 0, lineNumber - 1, 1);\n    this.highlightedLineId = session.addMarker(range, 'highlight_line', 'fullLine');\n  }\n  \n  _ensureCurrentCallFrame() {\n    if (!this.currentCallFrame) {\n      alert('No call frame to operate on. Has the debugger paused?');\n      debugger;\n      return false;\n    }\n    return true;\n  }\n  \n  _debugger_is_attached() {\n    return this.targetList.disabled;\n  }\n  \n  _evaluateOnCallFrame(editor, cb) {\n    let expression = editor.currentSelectionOrLine();\n    if (!this._debugger_is_attached()) {\n      alert('Debugger is not attached to any target.');\n      debugger;\n      return;\n    }\n    if (this.currentCallFrame) {\n      this.sendCommandToDebugger('Debugger.evaluateOnCallFrame', {\n        callFrameId: this.currentCallFrame.callFrameId,\n        expression: expression\n      }).then(cb);\n    } else {\n      this.sendCommandToDebugger('Runtime.evaluate', {\n        expression: expression\n      }).then(cb);\n    }\n  }\n  \n  _printResult(editor, result) {\n    var fromSel =  editor.getSelectionRange().end;\n    editor.selection.moveCursorToPosition(fromSel);\n    editor.selection.clearSelection(); // don't replace existing selection\n    editor.insert(JSON.stringify(result));\n    var toSel =  editor.getSelectionRange().start;\n    editor.selection.moveCursorToPosition(fromSel);\n    editor.selection.selectToPosition(toSel);\n  }\n}\n"]}