{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tabs/src/client/reactive/active-expression/ae-registry.js"],"names":["EventTarget","Preferences","normalizeLocation","url","indexOf","substring","LocationCache","constructor","unknownLocations","counter","aes","files","Map","add","ae","meta","has","location","get","file","locationArray","_getColumn","start","line","column","push","remove","aesInLocation","getAEsInLocation","splice","clear","getLoggingMode","undefined","_getLine","loggingMode","LoggingModes","DEFAULT","_getFile","setLoggingModeIfDefault","fileObj","ALL","setLoggingMode","mode","getAEsInColumn","getAEsInFile","extractAEsRecursive","getAEsInLine","fileID","getOrCreate","lines","columns","map","values","flatMap","v","SMART","NONE","AExprRegistryClass","oldRegistry","aexprs","aesPerLocation","eventTarget","callbackStack","evaluationStack","Set","addAExpr","aexpr","buildIdFor","dispatchEvent","removeAExpr","deleted","delete","updateAExpr","on","type","callback","addEventListener","off","removeEventListener","addToCallbackStack","popCallbackStack","pop","addToEvaluationStack","popEvaluationStack","locationId","id","purge","each","_isDisposed","callbacks","allAsArray","Array","from","getLocationCache","reference","listeners","filter","listener","eventListeners","fileSaved","toggleLoggingLocation","setLoggingLocation","shouldLog","enable","isInteresting","openURLs","document","body","querySelectorAll","c","getAttribute","self","__aeRegistry__","AExprRegistry"],"mappings":"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","file":"ae-registry.js","sourcesContent":["\nimport EventTarget from '../utils/event-target.js';\nimport Preferences from 'src/client/preferences.js';\n\n  \nfunction normalizeLocation(url) {\n  if(!url || !url.indexOf) return url;\n  return url.substring(url.indexOf(\"/src/\"));\n}\n\nclass LocationCache {\n   \n  constructor() {\n    this.unknownLocations = { counter: 0, aes: [] };\n    this.files = new Map();\n  }\n\n  // adds an AE into the cache and returns an unique identifier for this AE.\n  add(ae) {\n    if (ae.meta().has('location')) {\n      let location = ae.meta().get('location');\n      let file = normalizeLocation(location.file);\n      let locationArray = this._getColumn(file, location.start.line, location.start.column);\n      locationArray.aes.push(ae);\n      return file + '@' + location.start.line + ':' + location.start.column + \"#\" + ++locationArray.counter;\n    } else {\n      this.unknownLocations.aes.push(ae);\n      return 'unknown_location#' + ++this.unknownLocations.counter;\n    }\n  }\n\n  remove(ae) {\n    if (ae.meta().has('location')) {\n      let location = ae.meta().get('location');\n      const aesInLocation = this.getAEsInLocation(location);\n      aesInLocation.splice(aesInLocation.indexOf(ae));\n    } else {\n      this.unknownLocations.aes.splice(this.unknownLocations.aes.indexOf(ae));\n    }\n  }\n  \n  clear() {\n    this.files.clear();\n    this.unknownLocations = { counter: 0, aes: [] };\n  }\n  \n  getLoggingMode(file, line = undefined) {\n    if(line) {\n      if(this._getLine(file, line).loggingMode !== LoggingModes.DEFAULT) {\n        return this._getLine(file, line).loggingMode;\n      }\n    }\n    return this._getFile(file).loggingMode;\n  }\n  \n  setLoggingModeIfDefault(file) {\n    const fileObj = this._getFile(file);\n    if(fileObj.loggingMode === LoggingModes.DEFAULT) {\n      fileObj.loggingMode = LoggingModes.ALL;\n    }\n  }\n  \n  setLoggingMode(mode, file, line = undefined) {\n    if(line) {\n      this._getLine(file, line).loggingMode = mode;\n    } else {\n      this._getFile(file).loggingMode = mode;\n    }\n  }\n\n  getAEsInLocation(location) {\n    let file = normalizeLocation(location.file);\n    return this.getAEsInColumn(file, location.start.line, location.start.column);\n  }\n\n  getAEsInFile(file) {\n    return this.extractAEsRecursive(this._getFile(file));\n  }\n\n  getAEsInLine(file, line) {\n    return this.extractAEsRecursive(this._getLine(file, line));\n  }\n\n  getAEsInColumn(file, line, column) {\n    return this.extractAEsRecursive(this._getColumn(file, line, column));\n  }\n  \n  _getFile(file) {\n    let fileID = normalizeLocation(file);\n    return this.files.getOrCreate(fileID, () => {return {loggingMode: LoggingModes.DEFAULT, lines: new Map()}});\n  }\n  \n  _getLine(file, line) {\n    return this._getFile(file).lines.getOrCreate(line, () => {return {loggingMode: LoggingModes.DEFAULT, columns: new Map()}})\n  }\n  \n  _getColumn(file, line, column) {\n    return this._getLine(file, line).columns.getOrCreate(column, () => {return {counter: 0, aes: []}});\n  }\n  \n  extractAEsRecursive(map) {\n    if(!map) return [];\n    if(map.lines) return this.extractAEsRecursive(map.lines);\n    if(map.columns) return this.extractAEsRecursive(map.columns);\n    if (map instanceof Map) {\n      return [...map.values()].flatMap((v) => this.extractAEsRecursive(v));\n    } else {\n      return map.aes;\n    }\n  }\n}\n\n\nexport const LoggingModes = {\n  ALL: \"ALL\",\n  SMART: \"SMART\",\n  NONE: \"NONE\",\n  DEFAULT: \"DEFAULT\",\n}\n/*MD ## Registry of Active Expressions MD*/\nclass AExprRegistryClass {\n  \n  constructor(oldRegistry) {\n    if(oldRegistry) {\n      this.aexprs = oldRegistry.aexprs;\n      this.aesPerLocation = oldRegistry.aesPerLocation;\n      this.eventTarget = oldRegistry.eventTarget;\n      this.callbackStack = oldRegistry.callbackStack;\n      this.evaluationStack = oldRegistry.evaluationStack;\n    } else {\n      this.aexprs = new Set();\n      this.aesPerLocation = new LocationCache();\n      this.eventTarget = new EventTarget();\n      this.callbackStack = [];\n      this.evaluationStack = [];\n    }\n  }\n\n  get loggingMode() {\n    return Preferences.get(\"EnableAEDebugging\") ? (Preferences.get(\"SmartAELogging\") ? LoggingModes.SMART : LoggingModes.ALL) : LoggingModes.NONE;\n  }\n  \n  /**\n   * Handling membership\n   */\n  addAExpr(aexpr) {\n    this.aexprs.add(aexpr);\n    this.buildIdFor(aexpr);\n    this.eventTarget.dispatchEvent('add', aexpr);\n  }\n  \n  removeAExpr(aexpr) {\n    const deleted = this.aexprs.delete(aexpr);\n    this.aesPerLocation.remove(aexpr);\n    if (deleted) {\n      this.eventTarget.dispatchEvent('remove', aexpr);\n    }\n  }\n  \n  updateAExpr(aexpr) {\n    this.eventTarget.dispatchEvent('update', aexpr);\n  }\n  \n\n  on(type, callback) {\n    return this.eventTarget.addEventListener(type, callback);\n  }\n  \n  off(type, callback) {\n    return this.eventTarget.removeEventListener(type, callback);\n  }\n\n  addToCallbackStack(ae, callback) {\n    this.callbackStack.push({ ae, callback });\n  }\n\n  popCallbackStack() {\n    this.callbackStack.pop();\n  }\n\n  addToEvaluationStack(ae) {\n    this.evaluationStack.push(ae);\n  }\n\n  popEvaluationStack() {\n    this.evaluationStack.pop();\n  }\n\n  evaluationStack() {\n    return this.evaluationStack;\n  }\n\n  buildIdFor(ae) {\n    let locationId = this.aesPerLocation.add(ae);\n    ae.meta({ id: locationId });\n  }\n\n  /**\n   * For Development purpose if the registry gets into inconsistent state\n   */\n  purge() {\n    for (let each of this.aexprs) {\n      each._isDisposed = true;\n    }\n    this.eventTarget.callbacks.clear();\n    this.aexprs.clear();\n    this.aesPerLocation.clear();\n  }\n\n  /**\n   * Access\n   */\n  allAsArray() {\n    return Array.from(this.aexprs);\n  }\n  \n  getLocationCache() {\n    return this.aesPerLocation;\n  }\n\n  addEventListener(reference, callback) {\n    if (!this.listeners) this.listeners = [];\n    this.listeners.push({ reference, callback });\n  }\n\n  removeEventListener(reference) {\n    if (!this.listeners) return;\n    this.listeners = this.listeners.filter(listener => listener.reference !== reference);\n  }\n\n  eventListeners() {\n    if (!this.listeners) return [];\n    return this.listeners;\n  }\n  \n  fileSaved(url) {\n    if(this.loggingMode === LoggingModes.SMART) {\n      this.aesPerLocation.setLoggingModeIfDefault(url);\n    }\n  }\n  \n  toggleLoggingLocation(url, line = undefined) {\n    this.setLoggingLocation(!this.shouldLog(url, line), url, line);\n  }\n  \n  setLoggingLocation(enable, url, line = undefined) {\n    this.aesPerLocation.setLoggingMode(enable ? LoggingModes.ALL : LoggingModes.NONE, url, line);\n  }\n  \n  shouldLog(url, line = undefined) {\n    let mode = this.aesPerLocation.getLoggingMode(url, line);\n    mode = mode === LoggingModes.DEFAULT ? this.loggingMode : mode;\n    switch(mode) {\n      case LoggingModes.ALL:\n        return true;\n      case LoggingModes.NONE:\n        return false;\n      case LoggingModes.SMART:\n        return this.isInteresting(url);\n      default:\n        return false;\n    }\n  }\n  \n  isInteresting(url) {\n    //is currently open\n    url = normalizeLocation(url);\n    const openURLs = new Set((Array.from(document.body.querySelectorAll('lively-container')).map(c => normalizeLocation(c.getAttribute('src')))));\n    return openURLs.has(url);\n  }\n}\nself.__aeRegistry__ = new AExprRegistryClass(self.__aeRegistry__);\nexport const AExprRegistry = self.__aeRegistry__;"]}