{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/client/reactive/components/basic/AEGutter.js"],"names":["openLocationInBrowser","navigateToTimeline","navigateToGraph","DebuggingCache","AExprRegistry","ContextMenu","DependencyGraph","loc","range","pluralize","navigationMenuItem","faIcon","undoSelection","editor","history","getHistory","done","last","ranges","name","modifiers","map","m","join","location","fileURL","additionalText","line","start","description","path","file","inThisFile","includes","onSelect","ch","column","end","setSelection","substring","lastIndexOf","onDeselect","CombinedMarker","constructor","markers","draw","doc","setGutterMarker","drawIcon","combineWith","marker","callback","evt","markerBounds","target","getBoundingClientRect","drawActionList","some","hasError","menuItems","push","type","menu","openIn","document","body","clientX","left","clientY","bottom","undefined","addEventListener","focus","IMarker","getIcon","LayerMarker","layeredFunction","reverse","forEach","layer","Marker","dependencies","isAE","entries","ae","errorEvents","isEmpty","keys","next","value","getType","size","aes","accumulateData","accumulatedItems","generateInstanceSubmenu","length","instanceItems","getSymbol","getTypeShort","generateAccumulateSubmenu","cErrorEvents","cDependencies","sorted","sort","aDep","bDep","a","b","accumulated","dep","_","isEqual","shallowClone","Object","assign","events","lastDep","source","submenuItems","timeline","filterToAEs","instanceErrors","errorEvent","error","showEvents","onClick","ilaSubMenuItems","isILA","getLayer","pl","partialLayers","fn","values","layeredProperties","union","iterables","set","Set","iterable","item","add","AEGutter","validCallback","showAExprDependencyGutter","registerFileForAEDebugging","aeData","allDependenciesByLine","then","depToAE","AEToDep","clearGutter","markerMap","Map","showAExprDependencyGutterMarkers","showLayeredMethods","ILAs","allAsArray","filter","layeredMethods","getOrCreate","layeredMethod","method","lively","warn","showLayeredMethod","addMarker","valid","id","gutters","getOption","setOption","hideAExprDependencyGutter","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\nfunction undoSelection(editor) {\n  const history = editor.getHistory();\n  if (history.done.last.ranges) {\n    editor.undoSelection();\n  }\n}\nfunction faIcon(name, ...modifiers) {\n  return `<i class=\"fa fa-${name} ${modifiers.map(m => 'fa-' + m).join(' ')}\"></i>`;\n}\n\nfunction navigationMenuItem(location, editor, fileURL, name = \"\", additionalText = \"\") {\n  const line = location.start.line;\n  let description = `${line}: ${name}`;\n  let path = location.file;\n  const inThisFile = !path || path.includes(fileURL);\n\n  let onSelect = () => {};\n\n  if (inThisFile) {\n    description = 'line ' + description;\n\n    onSelect = () => {\n      const start = { line: location.start.line - 1, ch: location.start.column };\n      const end = { line: location.end.line - 1, ch: location.end.column };\n      editor.setSelection(start, end);\n    };\n  } else {\n    description = path.substring(path.lastIndexOf(\"/\") + 1) + \":\" + description;\n  }\n\n  return [description, () => {\n    openLocationInBrowser(location);\n  }, additionalText, faIcon(inThisFile ? 'location-arrow' : 'file-code-o'), { onSelect, onDeselect: () => {\n      if (inThisFile) {\n        undoSelection(editor);\n      }\n    } }];\n}\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 IMarker {\n  constructor(line, fileURL) {\n    this.line = line;\n    this.fileURL = fileURL;\n  }\n\n  type() {\n    return \"Layered Method\";\n  }\n\n  combineWith(marker) {\n    return new CombinedMarker(this.line, this, marker);\n  }\n\n  draw(editor) {\n    editor.doc.setGutterMarker(this.line, 'activeExpressionGutter', this.drawIcon(editor));\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 this.getIcon(callback);\n  }\n\n  async drawActionList(markerBounds, editor) {\n    const menuItems = this.menuItems(editor);\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  // Interface\n  getIcon(callback) {}\n  menuItems(editor) {}\n\n}\n\nclass LayerMarker extends IMarker {\n  constructor(line, fileURL, layeredFunction) {\n    super(line, fileURL);\n    this.layeredFunction = layeredFunction;\n  }\n  getIcon(callback) {\n    return <div class=\"activeExpressionGutter-marker-ae\" click={callback}>\n      <i class=\"fa fa-bars\"></i>\n    </div>;\n  }\n  menuItems(editor) {\n    const menuItems = [];\n    \n    [...this.layeredFunction].reverse().forEach(({location, layer}) => {\n      menuItems.push(navigationMenuItem(location, editor, this.fileURL, layer));\n    });\n    \n    return menuItems;\n  }\n}\n\nclass Marker extends IMarker {\n\n  constructor(line, dependencies, isAE, fileURL) {\n    super(line, fileURL);\n    this.dependencies = dependencies;\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  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  getIcon(callback) {\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  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      submenuItems.push(navigationMenuItem(dep.location, editor, this.fileURL, dep.source, pluralize(dep.events.length, \"event\")));\n    });\n    // Layers\n    if (this.isAE) {\n      const ilaSubMenuItems = [];\n      for (const ae of aes) {\n        if (ae.isILA()) {\n          const layer = ae.getLayer();\n          for (const pl of layer.partialLayers()) {\n            for (const fn of Object.values(pl.layeredProperties)) {\n              ilaSubMenuItems.push(navigationMenuItem(fn.location, editor, this.fileURL, fn.name));\n            }\n          }\n        }\n      }\n      if (ilaSubMenuItems.length > 0) {\n        submenuItems.push([\"Layered Functions\", ilaSubMenuItems, pluralize(ilaSubMenuItems.length, \"fn\")]);\n      }\n    }\n    return submenuItems;\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        this.showLayeredMethods();\n        for (const marker of this.markerMap.values()) {\n          marker.draw(this.editor);\n        }\n      });\n    });\n\n  }\n\n  showLayeredMethods() {\n    const ILAs = AExprRegistry.allAsArray().filter(ae => ae.isILA());\n    \n    const layeredMethods = new Map();\n    \n    for(const ae of ILAs) {\n      const layer = ae.getLayer();\n      for (const pl of layer.partialLayers()) {\n        for (const fn of Object.values(pl.layeredProperties)) {\n          layeredMethods.getOrCreate(fn.name, () => []).push({location: fn.location, layer: layer.name});\n        }\n      }\n    }\n    \n    layeredMethods.forEach((layeredMethod) => {\n      for (let method of layeredMethod) {\n        const {location}  = method\n        if (!location) {\n          lively.warn(\"no location for layerMethod \" + method)\n          debugger\n          continue\n        }\n        const path = location.file;\n        if (path.includes(this.fileURL)) {\n          this.showLayeredMethod(layeredMethod, location.start.line - 1);\n        }\n      } \n    })\n  }\n\n  showLayeredMethod(layeredMethod, line) {\n    this.addMarker(line, new LayerMarker(line, this.fileURL, layeredMethod));\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    this.addMarker(line, newMarker);\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  addMarker(line, newMarker) {\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}"]}