{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-xray/src/client/reactive/components/basic/AEGutter.js"],"names":["openLocationInBrowser","navigateToTimeline","navigateToGraph","DebuggingCache","AExprRegistry","ContextMenu","DependencyGraph","loc","range","pluralize","CombinedMarker","constructor","line","markers","draw","editor","doc","setGutterMarker","drawIcon","combineWith","marker","callback","evt","markerBounds","target","getBoundingClientRect","drawActionList","some","m","hasError","menuItems","push","type","menu","openIn","document","body","clientX","left","clientY","bottom","undefined","addEventListener","focus","Marker","dependencies","isAE","fileURL","entries","ae","errorEvents","isEmpty","keys","next","value","getType","size","aes","accumulateData","accumulatedItems","generateInstanceSubmenu","length","forEach","instanceItems","getSymbol","getTypeShort","generateAccumulateSubmenu","cErrorEvents","cDependencies","sorted","sort","aDep","bDep","a","location","b","file","start","column","accumulated","dep","_","isEqual","shallowClone","Object","assign","events","lastDep","source","end","submenuItems","timeline","filterToAEs","instanceErrors","errorEvent","error","name","showEvents","onClick","description","path","inThisFile","includes","onSelect","ch","setSelection","substring","lastIndexOf","faIcon","onDeselect","undoSelection","modifiers","map","join","union","iterables","set","Set","iterable","item","add","AEGutter","validCallback","showAExprDependencyGutter","registerFileForAEDebugging","aeData","allDependenciesByLine","then","depToAE","AEToDep","clearGutter","markerMap","Map","showAExprDependencyGutterMarkers","values","valid","id","gutters","getOption","setOption","hideAExprDependencyGutter","filter","dependencyMap","aExprs","drawAExprGutter","depsMapInFile","handleDepAEPairing","AELocation","AELine","allEvents","dependencyLoc","dependencySource","dependencyLine","dependencyFile","relatedEvents","event","triggers","relatedValueChangedEvents","relatedErrorEvents","get","depsAndHooks","meta","hook","dependency","locations","getLocations","identifier","newMarker","has"],"mappings":"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","file":"AEGutter.js","sourcesContent":["import { openLocationInBrowser, navigateToTimeline, navigateToGraph } from 'src/client/reactive/components/basic/aexpr-debugging-utils.js';\nimport { DebuggingCache } from 'src/client/reactive/active-expression/ae-debugging-cache.js';\nimport { AExprRegistry } from 'src/client/reactive/active-expression/ae-registry.js';\nimport ContextMenu from 'src/client/contextmenu.js';\nimport { DependencyGraph } from 'src/client/dependency-graph/graph.js';\nimport { loc, range, pluralize } from 'utils';\n\nclass CombinedMarker {\n  constructor(line, ...markers) {\n    this.markers = markers;\n    this.line = line;\n  }\n\n  draw(editor) {\n    editor.doc.setGutterMarker(this.line, 'activeExpressionGutter', this.drawIcon(editor));\n  }\n  \n  combineWith(marker) {\n    return new CombinedMarker(this.line, ...this.markers);\n  }\n\n  drawIcon(editor) {\n    const callback = async evt => {\n      const markerBounds = evt.target.getBoundingClientRect();\n      this.drawActionList(markerBounds, editor);\n    };\n\n    return <div class={\"activeExpressionGutter-marker-ae\"} click={callback} style={\"color: \" + (this.markers.some(m => m.hasError) ? \"rgba(255,0,0,1)\" : \"rgba(180,40,200,1)\")}>\n      {\"RE\"}\n    </div>;\n  }\n\n  async drawActionList(markerBounds, editor) {\n    const menuItems = [];\n\n    for(const marker of this.markers) {\n      menuItems.push([marker.type(), marker.menuItems(editor)]);      \n    }\n    \n    const menu = await ContextMenu.openIn(document.body, { clientX: markerBounds.left, clientY: markerBounds.bottom }, undefined, document.body, menuItems);\n    menu.addEventListener(\"DOMNodeRemoved\", () => {\n      editor.focus();\n    });\n  }\n\n}\n\nclass Marker {\n\n  constructor(line, dependencies, isAE, fileURL) {\n    this.dependencies = dependencies;\n    this.line = line;\n    this.fileURL = fileURL;\n    this.isAE = isAE;\n    this.hasError = [...dependencies.entries()].some(([ae, { errorEvents }]) => !errorEvents.isEmpty());\n  }\n  \n  type() {\n    return this.isAE ? (this.dependencies.keys().next().value.getType()) : \"Dependencies\";\n  }\n\n  draw(editor) {\n    editor.doc.setGutterMarker(this.line, 'activeExpressionGutter', this.drawIcon(editor));\n  }\n  \n  combineWith(marker) {\n    return new CombinedMarker(this.line, this, marker);\n  }\n  \n  menuItems(editor) {\n    const menuItems = [];\n\n    if (this.dependencies.size > 1) {\n      const { errorEvents, dependencies, aes } = this.accumulateData();\n      const accumulatedItems = this.generateInstanceSubmenu(errorEvents, dependencies, aes, editor);\n      menuItems.push([\"All\", accumulatedItems, pluralize(dependencies.length, \"dep\")]);\n    }\n\n    this.dependencies.forEach(({ errorEvents, dependencies }, ae) => {\n      const instanceItems = this.generateInstanceSubmenu(errorEvents, dependencies, [ae], editor);\n      menuItems.push([ae.getSymbol() + \" \" + ae.getType(), instanceItems, pluralize(dependencies.length, \"dep\")]);\n    });\n    return menuItems;\n  }\n\n\n  drawIcon(editor) {\n    const callback = async evt => {\n      const markerBounds = evt.target.getBoundingClientRect();\n      this.drawActionList(markerBounds, editor);\n    };\n\n    return <div class={\"activeExpressionGutter-marker\" + (this.isAE ? \"-ae\" : \"-dep\")} click={callback} style={this.hasError ? \"color: rgba(255,0,0,1)\" : \"\"}>\n      {this.isAE ? <b>{this.dependencies.keys().next().value.getTypeShort()}</b> : <i class=\"fa fa-share-alt\"></i>}\n    </div>;\n  }\n\n  async drawActionList(markerBounds, editor) {\n    const menuItems = this.menuItems(editor);\n\n\n    const menu = await ContextMenu.openIn(document.body, { clientX: markerBounds.left, clientY: markerBounds.bottom }, undefined, document.body, menuItems);\n    menu.addEventListener(\"DOMNodeRemoved\", () => {\n      editor.focus();\n    });\n  }\n\n  generateAccumulateSubmenu(editor) {\n    const { errorEvents, dependencies, aes } = this.accumulateData();\n    return this.generateInstanceSubmenu(errorEvents, dependencies, aes, editor);\n  }\n\n  accumulateData() {\n    const cErrorEvents = [],\n          cDependencies = [],\n          aes = [];\n\n    this.dependencies.forEach(({ errorEvents, dependencies }, ae) => {\n      cErrorEvents.push(...errorEvents);\n      aes.push(ae);\n      cDependencies.push(...dependencies);\n    });\n    const sorted = cDependencies.sort((aDep, bDep) => {\n      const a = aDep.location;\n      const b = bDep.location;\n      if (a.file < b.file) {\n        return -1;\n      } else if (a.file > b.file) {\n        return 1;\n      }\n      if (a.start.line < b.start.line) {\n        return -1;\n      } else if (a.start.line > b.start.line) {\n        return 1;\n      }\n      return a.start.column - b.start.column;\n    });\n    const accumulated = [];\n    sorted.forEach(dep => {\n      //Location might differ due to one object having this file as source and the other not having a source\n      if (accumulated.length === 0 || !_.isEqual(accumulated[accumulated.length - 1].location.start, dep.location.start)) {\n        const shallowClone = Object.assign({}, dep);\n        shallowClone.events = [...shallowClone.events];\n        accumulated.push(shallowClone);\n      } else {\n        const lastDep = accumulated[accumulated.length - 1];\n        lastDep.events.push(...dep.events);\n        if (dep.source && lastDep.source && dep.source.length > lastDep.source.length) {\n          lastDep.source = dep.source;\n        }\n        if (dep.location.end.column > lastDep.location.end.column) {\n          lastDep.location.end = dep.location.end;\n        }\n      }\n    });\n    return { errorEvents: cErrorEvents, dependencies: accumulated, aes };\n  }\n\n  generateInstanceSubmenu(errorEvents, dependencies, aes, editor) {\n    const submenuItems = [];\n\n    // Other views\n    submenuItems.push([\"open timeline\", () => {\n      navigateToTimeline(timeline => timeline.filterToAEs(aes));\n    }, \"\", \"l\"]);\n    submenuItems.push([\"open graph\", () => {\n      navigateToGraph(aes);\n    }, \"\", \"l\"]);\n\n    // Errors\n    let instanceErrors = [];\n    for (const errorEvent of errorEvents) {\n      instanceErrors.push([errorEvent.value.error.name, () => {\n        navigateToTimeline(timeline => timeline.showEvents([errorEvent]));\n      }, \"\", \"o\"]);\n    }\n    if (!instanceErrors.isEmpty()) {\n      submenuItems.push([\"errors\", instanceErrors, \"\", \"l\", { onClick: () => {\n          navigateToTimeline(timeline => timeline.showEvents(errorEvents));\n        } }]);\n    }\n\n    // Navigation\n    dependencies.forEach(dep => {\n      const source = dep.source;\n      const line = dep.location.start.line;\n      let description = `${line}: ${source}`;\n      let path = dep.location.file;\n      const inThisFile = !path || path.includes(this.fileURL);\n      let onSelect = () => {};\n      if (inThisFile) {\n        description = 'line ' + description;\n\n        onSelect = () => {\n          const start = { line: dep.location.start.line - 1, ch: dep.location.start.column };\n          const end = { line: dep.location.end.line - 1, ch: dep.location.end.column };\n          editor.setSelection(start, end);\n        };\n      } else {\n        description = path.substring(path.lastIndexOf(\"/\") + 1) + \":\" + description;\n      }\n      submenuItems.push([description, () => {\n        openLocationInBrowser(dep.location);\n      }, pluralize(dep.events.length, \"event\"), this.faIcon(inThisFile ? 'location-arrow' : 'file-code-o'), { onSelect, onDeselect: () => editor.undoSelection() }]);\n    });\n    return submenuItems;\n  }\n\n  faIcon(name, ...modifiers) {\n    return `<i class=\"fa fa-${name} ${modifiers.map(m => 'fa-' + m).join(' ')}\"></i>`;\n  }\n\n  union(...iterables) {\n    const set = new Set();\n\n    for (const iterable of iterables) {\n      for (const item of iterable) {\n        set.add(item);\n      }\n    }\n\n    return set;\n  }\n}\n\nexport default class AEGutter {\n  constructor(editor, fileURL, validCallback) {\n    this.fileURL = fileURL;\n    this.editor = editor;\n    this.validCallback = validCallback;\n\n    this.showAExprDependencyGutter();\n\n    DebuggingCache.registerFileForAEDebugging(this.fileURL, this, aeData => {\n      this.allDependenciesByLine(aeData).then(async ([depToAE, AEToDep]) => {\n        this.editor.doc.clearGutter('activeExpressionGutter');\n        \n        this.markerMap = new Map();\n        \n        await this.showAExprDependencyGutterMarkers(depToAE, false);\n        await this.showAExprDependencyGutterMarkers(AEToDep, true);\n        for(const marker of this.markerMap.values()) {\n          marker.draw(this.editor);\n        }\n      });\n    });\n  }\n\n  valid() {\n    return this.validCallback();\n  }\n\n  async showAExprDependencyGutter() {\n    const id = \"activeExpressionGutter\";\n    const editor = await this.editor;\n    let gutters = editor.getOption(\"gutters\");\n    if (!gutters.some(marker => marker === id)) {\n      editor.setOption('gutters', [...gutters, id]);\n    }\n  }\n\n  async hideAExprDependencyGutter() {\n    const id = \"activeExpressionGutter\";\n    const editor = await this.editor;\n    let gutters = editor.getOption(\"gutters\");\n    gutters = gutters.filter(marker => marker !== id);\n    editor.setOption('gutters', gutters);\n  }\n\n  async showAExprDependencyGutterMarkers(dependencyMap, isAE) {\n    await this.editor;\n\n    for (const [line, aExprs] of dependencyMap.entries()) {\n      this.drawAExprGutter(line, aExprs, isAE);\n    }\n  }\n\n  async allDependenciesByLine(depsMapInFile) {\n    const depToAE = new Map();\n    const AEToDep = new Map();\n\n    await this.editor;\n\n    const handleDepAEPairing = (ae, AELocation, AELine, allEvents, dependencyLoc, dependencySource) => {\n      const dependencyLine = dependencyLoc.start.line - 1;\n      const dependencyFile = dependencyLoc.file;\n\n      const relatedEvents = allEvents.filter(event => event.value && event.value.triggers && event.value.triggers.some(({ location }) => dependencyFile.includes(location.file) && location.start.line - 1 === dependencyLine));\n      const relatedValueChangedEvents = relatedEvents.filter(event => event.type === \"changed value\");\n      const relatedErrorEvents = relatedEvents.filter(event => event.type === \"evaluation failed\");\n\n      if (dependencyFile.includes(this.fileURL)) {\n        // Dependency is in this file\n        if (!depToAE.get(dependencyLine)) {\n          depToAE.set(dependencyLine, new Map());\n        }\n        if (!depToAE.get(dependencyLine).get(ae)) {\n          depToAE.get(dependencyLine).set(ae, { errorEvents: [], dependencies: [] });\n        }\n        depToAE.get(dependencyLine).get(ae).errorEvents.push(...relatedErrorEvents);\n        // Group by AE to distinguish between mutltiple AE Objects in the same line?\n        depToAE.get(dependencyLine).get(ae).dependencies.push({ location: AELocation, source: ae.getSymbol /*ae.meta().get(\"sourceCode\")*/(), events: relatedValueChangedEvents });\n      }\n\n      if (AELocation.file.includes(this.fileURL)) {\n        AEToDep.get(AELine).get(ae).dependencies.push({ location: dependencyLoc, source: dependencySource, events: relatedValueChangedEvents });\n      }\n    };\n\n    for (const [ae, depsAndHooks] of depsMapInFile) {\n      const AELocation = ae.meta().get(\"location\");\n      const AELine = AELocation.start.line - 1;\n\n      const allEvents = ae.meta().get(\"events\");\n      const errorEvents = allEvents.filter(event => event.type === \"evaluation failed\");\n\n      if (AELocation.file.includes(this.fileURL)) {\n        // AE is in this file\n        if (!AEToDep.get(AELine)) {\n          AEToDep.set(AELine, new Map());\n        }\n        if (!AEToDep.get(AELine).get(ae)) {\n          AEToDep.get(AELine).set(ae, { errorEvents, dependencies: [] });\n        }\n      }\n      for (const { hook, dependency } of depsAndHooks) {\n        const locations = await hook.getLocations();\n        for (const location of locations) {\n          handleDepAEPairing(ae, AELocation, AELine, allEvents, location, dependency.identifier);\n        }\n      }\n    }\n\n    return [depToAE, AEToDep];\n  }\n\n  drawAExprGutter(line, dependencies, isAE) {\n    const newMarker = new Marker(line, dependencies, isAE, this.fileURL);\n    if (this.markerMap.has(line)) {\n      this.markerMap.set(line, this.markerMap.get(line).combineWith(newMarker));\n    } else {\n      this.markerMap.set(line, newMarker);\n    }\n  }\n\n  /*\n  async dependencyGraph() {\n   return this._deps || (this._deps = new DependencyGraph((await this.astCapabilities(this.editor))));\n  }\n  async showAExprTextMarkers() {\n   const editor = await this.editor;\n   await this.resetAExprTextMarkers();\n   const dependencyGraph = await this.dependencyGraph();\n   dependencyGraph.getAllActiveExpressions().forEach(path => {\n     const r = range(path.node.loc).asCM();\n     const mark = this.editor.markText(r[0], r[1], {\n       css: \"background-color: #3BEDED\"\n     });\n     mark.isAExprTextMarker = true;\n   });\n  }\n  async resetAExprTextMarkers() {\n   const editor = await this.editor;\n   editor.getAllMarks().forEach(mark => {\n     if (mark.isAExprTextMarker) {\n       mark.clear();\n     }\n   });\n  }\n  async resetAExprDependencyTextMarkers() {\n   const editor = await this.editor;\n   editor.getAllMarks().forEach(mark => {\n     if (mark.isAExprDependencyTextMarker) {\n       mark.clear();\n     }\n   });\n  }\n  async showAExprDependencyTextMarkers() {\n   await this.editor;\n   await this.resetAExprDependencyTextMarkers();\n   const cursor = this.editor.getCursor();\n   const dependencyGraph = await this.dependencyGraph();\n   const aexprPath = dependencyGraph.getAexprAtCursor(cursor);\n   if (!aexprPath) return;\n   const deps = dependencyGraph.resolveDependencies(aexprPath.get(\"arguments\")[0]);\n   deps.forEach(path => {\n     const r = range(path.node.loc).asCM();\n     const mark = this.editor.markText(r[0], r[1], {\n       css: \"background-color: orange\"\n     });\n     mark.isAExprDependencyTextMarker = true;\n   });\n   // Searching for dependencies\n   const dependencyGraph = await this.dependencyGraph();\n   dependencyGraph.getAllActiveExpressions().forEach(path => {\n     const dependencies = dependencyGraph.resolveDependencies(path.get(\"arguments\")[0]);\n     const AELine = path.node.loc.start.line - 1;\n     if (!AEToDep.get(AELine)) {\n       AEToDep.set(AELine, []);\n     }\n      dependencies.forEach(statement => {\n       const depLine = statement.node.loc.start.line - 1;\n       if (!depToAE.get(depLine)) {\n         depToAE.set(depLine, []);\n       }\n       depToAE.get(depLine).push({ location: path.node.loc, source: path.get(\"arguments.0.body\").getSource(), events: 0 });\n       AEToDep.get(AELine).push({ location: statement.node.loc, source: statement.getSource(), events: 0 });\n     });\n   });\n  }*/\n\n}"]}