{"version":3,"sources":["https://lively-kernel.org/lively4/swt21-debugging/src/client/fileindex.js"],"names":["Dexie","Strings","cop","Files","Paths","Bibliography","BibtexParser","Markdown","diff","BrokenLinkAnalysis","ModuleDependencyAnalysis","parseSource","parseModuleSemantics","wait","getBaseURL","dmp","diff_match_patch","FETCH_TIMEOUT","MAX_FILESIZE","url","replace","FileIndex","current","_current","toString","name","clear","db","files","modules","links","classes","versions","exports","constructor","fileCacheDB","version","stores","history","commits","upgrade","bibliography","bibref","toArray","where","notEqual","update","updateTitleAndTags","updateAllModuleSemantics","updateAllLinks","updateAllLatestVersionHistories","showProgress","modify","ea","extractTitleAndTags","file","content","title","split","tags","matchAll","map","updateAllBibkeys","result","transaction","equals","each","match","bibkey","urlToKey","put","push","addBibrefs","console","log","all","Set","visited","add","key","bib","toJSON","forEach","entry","refentry","citationKey","source","toBibtex","type","entryType","references","entryTags","authors","splitAuthors","author","Author","cleanTitle","Title","year","Year","keywords","Keywords","fields","Fields","organization","Organization","microsoftid","doi","has","delete","updateAllBibrefs","addModuleSemantics","extractModuleSemantics","updateModule","updateClasses","updateExportEntry","updateUnboundIdentifiers","ast","info","results","e","warn","semantics","classNames","eaClass","superClassName","superClassUrl","superClass","find","item","System","resolve","nom","methods","length","addClass","allClasses","obsoleteClasses","filter","includes","clazz","functionExports","classExports","exportEntry","functions","addExportEntry","unboundIdentifiers","value","index","self","indexOf","fileUrl","dependencies","resolvedDependencies","resolveModuleDependencies","findSameMethodInClass","aClass","aMethod","method","static","kind","findSameClassInModule","aModule","findModifiedClassesAndMethods","latestVersion","previousVersionHash","modifications","Array","latestContent","loadVersion","previousContent","astLastest","astPrevious","latest","previous","classLatest","previousClass","createModification","methodLastest","latestSource","substring","start","end","modification","methodPreviousClass","prevSource","action","diff1","diff_main","patch","patch_toText","patch_make","previousSource","latestClassMethod","error","addLinks","extractLinks","then","bulkPut","checkLink","link","statusCache","Map","normalizedLink","normalizePath","status","get","validateLink","set","checkLinks","checkLinksFile","checkAllLinks","updateAllVersions","max","startsWith","lively4url","slice","addVersions","loadVersions","response","fetch","headers","showversions","text","JSON","parse","historicFileResult","parentVersionHash","parents","undefined","historicFile","comment","modified","date","window","FileIndexFileCache","cached","loadFile","class","user","commitId","previousCommitId","label","func","ShowDexieProgress","currentLabel","withLayers","updateFile","stats","r","clone","json","addFile","size","slowdown","indexVersions","performance","now","addedContent","versionsJSON","fileType","extractReferences","Math","round","dropFile","removeDirectory","baseURL","eaURL","updateDirectory","updateDeleted","indexVersion","filelist","contents","progress","lively","total","i","lastModified","remove","addDirectory","showAsTable","sorted","_","sortBy","Number","reverse","openComponentInWindow","table","setFromJSO","style","overflow","column","cell","classList","layer","refineClass","Collection","count","textContent","innerFunc","withoutLayers","lively4fetchHandlers","isFileIndexHandler","unshift","handle","request","options","finsihed","extraSearchRoots","preferences","serverURL","fileIndexWorker","postMessage","message","terminate","import","mod","default"],"mappings":"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","file":"fileindex.js","sourcesContent":["\"disable deepeval\"\n\n/*MD # File Index for Static Analysis and Searching\n\n- #TODO #Issue editing fileindex.js should restart lively.fileIndexWorker\n\nMD*/\n\nimport Dexie from \"src/external/dexie3.js\"\nimport Strings from \"src/client/strings.js\"\n\nimport * as cop from \"src/client/ContextJS/src/contextjs.js\";\nimport Files from \"src/client/files.js\"\nimport Paths from \"src/client/paths.js\"\n\nimport Bibliography from 'src/client/bibliography.js'\nimport BibtexParser from 'src/external/bibtexParse.js'\nimport Markdown from \"src/client/markdown.js\"\n\nimport diff from 'src/external/diff-match-patch.js';\nconst dmp = new diff.diff_match_patch();\n\nimport {BrokenLinkAnalysis, ModuleDependencyAnalysis} from \"./analysis.js\"\n\n\nimport {parseSource, parseModuleSemantics} from \"./javascript.js\"\n\nconst FETCH_TIMEOUT = 5000\nconst MAX_FILESIZE = 200000\n\nimport { wait } from 'utils';\n\n\nfunction getBaseURL(url) {\n  return url.replace(/[#?].*/,\"\")\n}\n\nexport default class FileIndex {\n\n  static current() {\n    // FileIndex._current = null\n    if (!this._current) {\n      this._current = new FileIndex(\"file_index\")\n    }\n    return this._current\n  }\n\n  toString() {\n    return \"[\"+this.name+\":FileIndex]\"\n  }\n\n  clear() {\n    this.db.files.clear()   \n    this.db.modules.clear()\n    this.db.links.clear()\n    this.db.classes.clear()\n    this.db.versions.clear()\n    this.db.exports.clear()\n    // this.db.delete() \n  }\n\n  constructor(name) {\n    this.name = name\n    this.db = this.fileCacheDB()\n  }\n\n  fileCacheDB() {\n    var db = new Dexie(this.name);\n\n    db.version(1).stores({\n        files: 'url,name,type,version,modified,options,title,tags,versions',\n        history: '[url+version],url,name,type,version,modified,options,title,tags',\n        commits: 'hash,message,date',\n        links: '[link+url], link, url, location, status',\n        modules: 'url, *dependencies',\n        classes: '[name+url], name, url, loc, start, end, superClassName, superClassUrl, [superClassName+superClassUrl], *methods', \n        versions: '[class+url+method+commitId+date], [class+method], [class+url+action], [class+url+method], class, url, method, commitId, date, action, user'\n    }).upgrade(function () {\n    })\n    \n    db.version(2).stores({\n        files: 'url,name,type,version,modified,options,title,tags,versions',\n        history: '[url+version],url,name,type,version,modified,options,title,tags',\n        commits: 'hash,message,date',\n        links: '[link+url], link, url, location, status',\n        modules: 'url, *dependencies',\n        classes: '[name+url], name, url, loc, start, end, superClassName, superClassUrl, [superClassName+superClassUrl], *methods', \n        versions: '[class+url+method+commitId+date], [class+method], [class+url+action], [class+url+method], class, url, method, commitId, date, action, user',\n        exports: 'url,*functions,*classes'\n    }).upgrade(function () {\n    })\n     db.version(3).stores({\n        files: 'url,name,type,version,modified,options,title,tags,versions',\n        bibliography: 'key, type, title, author, year, references, organization',\n        history: '[url+version],url,name,type,version,modified,options,title,tags',\n        commits: 'hash,message,date',\n        links: '[link+url], link, url, location, status',\n        modules: 'url, *dependencies',\n        classes: '[name+url], name, url, loc, start, end, superClassName, superClassUrl, [superClassName+superClassUrl], *methods', \n        versions: '[class+url+method+commitId+date], [class+method], [class+url+action], [class+url+method], class, url, method, commitId, date, action, user',\n        exports: 'url,*functions,*classes'\n    }).upgrade(function () {\n    })\n   \n    db.version(4).stores({\n        files: 'url,name,type,version,modified,options,title,tags,versions,bibkey',\n        bibliography: 'key, type, title, author, year, references, organization',\n        history: '[url+version],url,name,type,version,modified,options,title,tags',\n        commits: 'hash,message,date',\n        links: '[link+url], link, url, location, status',\n        modules: 'url, *dependencies',\n        classes: '[name+url], name, url, loc, start, end, superClassName, superClassUrl, [superClassName+superClassUrl], *methods', \n        versions: '[class+url+method+commitId+date], [class+method], [class+url+action], [class+url+method], class, url, method, commitId, date, action, user',\n        exports: 'url,*functions,*classes'\n    }).upgrade(function () {\n    })\n\n    \n    db.version(5).stores({\n        files: 'url,name,type,version,modified,options,title,*tags,*versions,bibkey',  // references\n        bibref: '[url+key], key, url, type, title, author, year, *references, organization',\n        history: '[url+version],url,name,type,version,modified,options,title,*tags',\n        commits: 'hash,message,date',\n        links: '[link+url], link, url, location, status',\n        modules: 'url, *dependencies',\n        classes: '[name+url], name, url, loc, start, end, superClassName, superClassUrl, [superClassName+superClassUrl], *methods', \n        versions: '[class+url+method+commitId+date], [class+method], [class+url+action], [class+url+method], class, url, method, commitId, date, action, user',\n        exports: 'url,*functions,*classes'\n    }).upgrade(function () {    })\n    \n    db.version(6).stores({\n      files: \"url,name,type,version,modified,options,title,*tags,*versions,bibkey,*references\"\n    }).upgrade(function () {    })\n    \n    db.version(7).stores( {\n      bibref: '[url+key], key, url, type, title, *authors, year, *references, organization'\n    }).upgrade(function () {    })\n    db.version(8).stores({\n      \n    }).upgrade(function () {    })\n    db.version(9).stores({\n      bibliography: null\n    }).upgrade(function () {    })\n    db.version(10).stores({\n      bibref: null,\n    }).upgrade(function () {    })\n    db.version(11).stores({\n      bibliography: '[url+key], key, url, type, title, *authors, year, *references, organization'\n    }).upgrade(function () {    })\n    db.version(12).stores({\n      bibliography: '[url+key], key, url, type, title, *authors,*keywords, year, *references, organization'\n    }).upgrade(function () {    })\n    db.version(13).stores({\n      files: \"url,name,type,version,modified,options,title,*tags,*versions,bibkey,*references, *unboundIdentifiers\"\n    }).upgrade(function () {    })\n    db.version(14).stores({\n      bibliography: '[url+key], key, url, type, title, *authors,*keywords, year, *references, organization, microsoftid, doi'\n    }).upgrade(function () {    })\n    db.version(15).stores({\n      bibliography: '[url+key], key, url, type, title, *authors,*keywords,*fields, year, *references, organization, microsoftid, doi'\n    }).upgrade(function () {    })\n    db.version(16).stores({\n      history: '[url+version],url,name,type,version,modified,options,title,*tags,author,comment',\n    }).upgrade(function () {    })\n\n    \n    return db \n  }\n\n  async toArray() {\n    return this.db.files.where(\"name\").notEqual(\"\").toArray()\n  }\n\n  async update() {\n    await this.updateTitleAndTags()\n    await this.updateAllModuleSemantics()\n    await this.updateAllLinks()\n    await this.updateAllLatestVersionHistories() \n  }\n  \n  async updateTitleAndTags() {\n    return this.showProgress(\"update title\", () => {\n      return this.db.files.where(\"name\").notEqual(\"\").modify((ea) => {\n         this.extractTitleAndTags(ea)\n      });\n    })\n  }\n\n  extractTitleAndTags(file) {\n    if (!file.content) return;\n    file.title = file.content.split(\"\\n\")[0].replace(/## /,\"\")\n    file.tags = Strings.matchAll('(?: )(#[A-Za-z0-9]+)(?=[ \\n])(?! ?{)', file.content)\n      .map(ea => ea[1])\n  }\n  \n/*MD ## Bibliography MD*/\n   \n  async updateAllBibkeys() {\n    var result = []\n    await this.db.transaction('rw', this.db.files, () => {\n      this.db.files.where(\"type\").equals(\"file\").each((file) => {\n        if (file.url.match(/\\.(pdf)|(md)$/)) {\n          file.bibkey = Bibliography.urlToKey(file.url)\n          this.db.files.put(file)\n          result.push(file)\n        }\n      })\n    })\n    return result\n  }\n\n  \n  async addBibrefs(file) {\n    if (file.url.match(/\\.bib$/) && file.content) {    \n      console.log('[fileindex] addBibrefs')\n      \n      var all = new Set()\n      var visited = new Set()\n      await this.db.bibliography.each(ea => {\n        if (ea.url == file.url) all.add(ea.key)\n      })\n   \n      var bib = BibtexParser.toJSON(file.content)\n      bib.forEach(entry => {\n        var refentry = {\n              key: entry.citationKey  || \"undefined\",\n              url: file.url,\n              source: BibtexParser.toBibtex([entry], false),\n              type: entry.entryType,\n              references: []\n         }\n        \n          if (entry.entryTags) {\n              refentry.authors = Bibliography.splitAuthors(entry.entryTags.author || entry.entryTags.Author)\n              refentry.title = Bibliography.cleanTitle(entry.entryTags.title || entry.entryTags.Title)\n              refentry.year = entry.entryTags.year || entry.entryTags.Year\n              refentry.keywords = (entry.entryTags.keywords || entry.entryTags.Keywords || \"\").split(\", \")\n              refentry.fields = (entry.entryTags.fields || entry.entryTags.Fields || \"\").split(\", \")\n              refentry.organization = entry.entryTags.organization || entry.entryTags.Organization\n              refentry.microsoftid = entry.entryTags.microsoftid\n              refentry.doi = entry.entryTags.doi\n          }\n        visited.add(refentry.key)\n        this.db.bibliography.put(refentry)\n      })\n      \n      // delete remaining entries\n      all.forEach(key => {\n        if (!visited.has(key)) {\n          console.log(\"[fileindex] delete bibtex entry \" + file.url + \" \" + key)\n          this.db.bibliography.where({url: file.url, key: key}).delete()\n        }\n      })\n    }\n  }\n  \n  async updateAllBibrefs() {\n    var result = []\n    await this.db.transaction('rw', this.db.files, this.db.bibliography, () => {\n      this.db.files.where(\"type\").equals(\"file\").each((file) => {\n        this.addBibrefs(file)\n      })\n    })\n    return result\n  }\n\n/*MD ## JavaScript \n\n- #TODO extract this into own module\n\nMD*/  \n  \n  async updateAllModuleSemantics() {\n    await this.db.transaction('rw', this.db.files,  this.db.classes, this.db.modules, () => {\n      this.db.files.where(\"type\").equals(\"file\").each((file) => {\n        this.addModuleSemantics(file)\n      })\n    })\n  }\n  \n  async addModuleSemantics(file) {\n    if (file.name && file.name.match(/\\.js$/)) { \n      // console.log(\"[fileindex] addModuleSemantics \" + file.name)\n      var result = this.extractModuleSemantics(file)\n      this.updateModule(file.url, result)\n      this.updateClasses(file, result)\n      this.updateExportEntry(file.url, result)\n      this.updateUnboundIdentifiers(file, result)\n    }\n  }\n  \n  extractModuleSemantics(file) {\n    try {\n      var ast = parseSource(file.url, file.content)\n      if(!ast) {\n        console.info('Could not parse file:', file.url)\n        return []\n      }\n      var results = parseModuleSemantics(ast)\n     } catch(e) {\n      console.warn('[fileindex] extractModuleSemantics error: ', e)\n    }\n    return results;\n  }\n  \n  async updateClasses(file, semantics) {\n    if (!semantics || !semantics.classes) {\n      return\n    }\n    var classNames = []\n    for (var eaClass of semantics.classes) {\n      if (eaClass.superClassName && !eaClass.superClassUrl) {\n        let superClass = semantics.classes.find(item => item.name == eaClass.superClassName)\n        eaClass.superClassName = (superClass) ? superClass.superClassName : ''\n        eaClass.superClassUrl = (superClass) ? file.url : ''\n      } else if (eaClass.superClassName && eaClass.superClassUrl) {\n        eaClass.superClassUrl = await System.resolve(eaClass.superClassUrl, file.url)\n      }\n      eaClass.url = file.url\n      eaClass.nom = eaClass.methods ? eaClass.methods.length : 0\n      classNames.push(eaClass.name)\n      await this.addClass(eaClass)\n    }\n    var allClasses = await this.db.classes.where({url: file.url}).toArray()\n    \n    // deleted obsolete classes\n    var obsoleteClasses = allClasses.filter(ea => !classNames.includes(ea.name))\n    for(let eaClass of obsoleteClasses) {\n     await this.db.classes.where({name: eaClass.name, url: eaClass.url}).delete() \n    }\n  } \n  \n  async addClass(clazz) {\n    await this.db.classes.where({name: clazz.name, url: clazz.url}).delete()\n    this.db.classes.put(clazz)\n  }\n  \n  async updateExportEntry(url, semantics) {\n    if (!semantics || (!semantics.functionExports && !semantics.classExports)) {\n      return\n    }\n    if (semantics.functionExports.length > 0 || semantics.classExports.length > 0) {\n      let exportEntry = {\n        url: url,\n        functions: semantics.functionExports,\n        classes: semantics.classExports\n      }\n      await this.addExportEntry(exportEntry)\n    }\n  }\n  \n  async addExportEntry(exportEntry) {\n    await this.db.exports.where({url: exportEntry.url}).delete()\n    this.db.exports.put(exportEntry)\n  }\n  \n  async updateUnboundIdentifiers(file, semantics) {\n    if (!semantics || (!semantics.unboundIdentifiers)) {\n      return\n    }\n    if (semantics.unboundIdentifiers.length > 0) {\n      file.unboundIdentifiers = semantics.unboundIdentifiers\n        .filter((value, index, self) => self.indexOf(value) === index);\n      this.db.files.put(file);\n    }\n  }\n\n  async updateModule(fileUrl, semantics) {\n    if (!semantics || !semantics.dependencies) {\n      return\n    }\n   \n    let resolvedDependencies = await ModuleDependencyAnalysis.resolveModuleDependencies(fileUrl, semantics.dependencies)\n    this.db.transaction(\"rw\", this.db.modules, () => {\n      this.db.modules.put(resolvedDependencies)\n    })\n  }\n  \n  findSameMethodInClass(aClass, aMethod) {\n    return aClass.methods.find(method => \n        method.name == aMethod.name \n        && method.static == aMethod.static\n        && method.kind == aMethod.kind)\n  }\n  \n  findSameClassInModule(aModule, aClass) {\n    return aModule.classes.find(ea => ea.name == aClass.name)\n  }\n  \n  async findModifiedClassesAndMethods(fileUrl, latestVersion, previousVersionHash) {\n    console.log(\"findModifiedClassesAndMethods \", fileUrl, latestVersion, previousVersionHash)\n    let modifications = new Array()\n    let latestContent = await this.loadVersion(fileUrl, latestVersion.version)\n    let previousContent = await this.loadVersion(fileUrl, previousVersionHash)\n    let astLastest = await parseSource(fileUrl, latestContent)\n    let astPrevious = await parseSource(fileUrl, previousContent)\n\n    \n    if (!astLastest || !astPrevious) {\n      return modifications\n    }\n\n    let latest = await parseModuleSemantics(astLastest)\n    let previous = await parseModuleSemantics(astPrevious)\n    // classes\n    for (let classLatest of latest.classes) {\n      try {\n        let previousClass = this.findSameClassInModule(previous, classLatest)\n        if (!previousClass) { // added class\n          modifications.push(this.createModification(\n            fileUrl,\n            (!previousClass) ? \"added\" : \"modified\", \n            latestVersion,  previousVersionHash, \n            classLatest))\n        }\n        // methods\n        for (let methodLastest of classLatest.methods) {\n          var latestSource = latestContent.substring(methodLastest.start, methodLastest.end)\n          var modification = this.createModification(fileUrl, \"added\", latestVersion,  previousVersionHash, classLatest, methodLastest, latestSource)\n         \n          if (!previousClass) { // added method\n            modifications.push(modification)\n          } else {\n            let methodPreviousClass = this.findSameMethodInClass(previousClass, methodLastest)\n            if (methodPreviousClass) {\n              var prevSource = previousContent.substring(methodPreviousClass.start, methodPreviousClass.end)\n              if (prevSource != latestSource) {\n                modification.action = \"modified\"\n                var diff1 = dmp.diff_main(prevSource, latestSource);\n                modification.patch = dmp.patch_toText(dmp.patch_make(diff1))\n                modification.previousSource = prevSource\n                modifications.push(modification) \n              } else {\n                // the source was the same in the previous version\n              }\n            } else  {\n              // method was not there in previous version\n              modification.action = \"added\"\n              modifications.push(modification) \n            }\n          }\n        }\n      \n        if (!previousClass) continue;\n        for (let methodPreviousClass of previousClass.methods) {\n          let latestClassMethod =  this.findSameMethodInClass(classLatest, methodPreviousClass) \n          if (!latestClassMethod) { // deleted method\n            modifications.push(\n              this.createModification(fileUrl, \"deleted\", latestVersion,  previousVersionHash, classLatest, methodPreviousClass, \"\"))\n          }\n        }\n      } catch(error) {\n        console.error(\"Version history couldn't created for class: \", classLatest, error)\n      }\n    }\n    return modifications \n  }\n  \n  \n/*MD ## HTML extract hyperref links and check status MD*/\n  \n  async updateAllLinks() {\n    await this.db.transaction('rw', this.db.files, this.db.links, () => {\n      this.db.files.where(\"type\").equals(\"file\").each((file) => {\n        this.addLinks(file) \n      })\n    })\n    console.log('updateAllLinks() finished.')\n  }\n  \n  async addLinks(file) {\n    BrokenLinkAnalysis.extractLinks(file).then(links => {\n      this.db.transaction(\"rw!\", this.db.links, async () => {\n        this.db.links.where(\"url\").equals(file.url).delete()\n        if (links) {\n          this.db.links.bulkPut(links)\n        }\n      })\n    })\n  }\n  \n  \n  /* checks status of links */\n  async checkLink(link, statusCache=new Map()) {\n    var normalizedLink = Paths.normalizePath(link.link, link.url)\n    console.log(\"[fileindex] checkLink \" + link.url + \" -> \" +normalizedLink)\n    var status = statusCache.get(normalizedLink)\n    if (!status) {\n      status = await this.validateLink(normalizedLink)\n      statusCache.set(normalizedLink, status)\n    }\n    if (status == \"broken\") {\n      console.warn(\"[fileindex ] broken link \" + link.url + \" -> \" + link.link)\n    }\n    await this.db.transaction(\"rw\", this.db.links, () => {\n      this.db.links.where({url: link.url, link: link.link}).modify({status:  status})\n    })\n    return status\n  }\n\n  async checkLinks(links) {\n    var statusCache = new Map()\n    for(var link of links) {\n      await this.checkLink(link, statusCache)\n      console.log(\"[fileindex] updated status \" + link.link + \" \" + link.status )\n    }\n  }\n  \n  async checkLinksFile(url) {\n    return this.checkLinks(await this.db.links.where({url: url}).toArray())\n  }\n\n  async checkAllLinks() {\n    return this.checkLinks(await this.db.links.toArray())\n  }\n  \n  async extractLinks(file) { \n   return BrokenLinkAnalysis.extractLinks(file)\n  }\n  \n  async validateLink(link) { \n    return BrokenLinkAnalysis.validateLink(link)\n  }\n    \n/*MD ## File Versions MD*/\n  async updateAllVersions(max) {\n    \n     var files = await this.db.transaction('rw', this.db.files, this.db.versions, () => {\n      return this.db.files.where(\"type\").equals(\"file\").toArray()\n    })\n    files = files.filter(file => file.url && file.url.startsWith(lively4url))\n    files = files.filter(file => file.name ) // && file.name.match(/\\.js$/)\n    if (max) files = files.slice(0, max)\n    for(let file of files) {\n          console.log(\"[fileindex] add verions: \" + file.name)\n          await this.addVersions(file)\n    }\n  }\n  \n  async loadVersions(url) {\n    try {\n      let response = await fetch(url, {\n            method: \"OPTIONS\",\n            headers: {\n              showversions: true,\n              \"debug-initiator\": \"fileindex.js#loadVersions\"\n            }\n          })\n      let text = await response.text()\n      return JSON.parse(text).versions\n    }  catch(e) {\n      console.error(\"[fileindex] could not parse versions for \" + url, e) \n      // throw new Error(\"[fileindex] could not parse versions for \" + url, e) \n    }\n    return []\n  }\n  \n  \n  async addVersions(file) {\n\n    let versions = (await this.loadVersions(file.url))\n    if (!versions) {\n      console.warn(\"[fileindex] could not load versions for \" + file.name)\n      return\n    }\n    versions = versions.filter(ea => ea)\n    \n    for (let version of versions) {\n      var historicFileResult  = await this.db.history.where({\n        'url': \"\" + file.url, \n        'version': \"\" + version.version}).toArray()\n      if (historicFileResult.length > 0) {\n        // console.log(\"[fileindex] found \", historicFileResult)\n      } else {\n        // console.log(\"[fileindex] NEW VERSION \" + file.url)        \n        var parentVersionHash = version.parents ? version.parents.split(\" \")[0] : undefined\n        var historicFile = {\n          url: file.url,\n          type: file.type,\n          name: file.name,\n          author: version.author,\n          comment: version.comment,\n          modified: version.date,\n          version: version.version,\n          previous: parentVersionHash\n        }\n        // console.log(\"[fileindex] add history\", historicFile)\n        await this.db.transaction(\"rw\", this.db.history, () => { \n          this.db.history.put(historicFile) \n        })\n\n        // var modifications = await this.findModifiedClassesAndMethods(file.url, version, parentVersionHash)\n        // console.log(\"[fileindex] add method modifications \", modifications)\n        // this.db.transaction(\"rw\", this.db.versions, () => {\n        //   this.db.versions.bulkPut(modifications)\n        // })          \n        \n        \n        // if (i >= 9) break; // consider latest ten versions        \n      }\n    }\n  } \n  \n  async loadVersion(url, version) {\n    if (!window.FileIndexFileCache) {\n      window.FileIndexFileCache = new Map()\n    }\n    var key = url + \"@\" +version\n    var cached = window.FileIndexFileCache.get(key)\n    if (!cached) {\n      cached =  await Files.loadFile(url, version)\n      window.FileIndexFileCache.set(key, cached)\n    }\n    return cached\n  }\n  \n\n  \n  createModification(fileUrl, action, version, previousVersionHash, aClass, aMethod, source=\"\") {\n    var result =  {\n        url: fileUrl,\n        class: aClass.name,\n        method: \"+null+\",\n        date: version.date,\n        user: version.author,\n        commitId: version.version,\n        previousCommitId: previousVersionHash,\n        action: action,\n        source: source\n    }\n    if (aMethod) {\n      result.method = aMethod.name\n      result.static = aMethod.static,\n      result.kind = aMethod.kind\n      result.start = aMethod.start\n      result.end = aMethod.end\n    }\n    return result\n  }\n  \n  \n/*MD ## UI \n\n- makes only sense when using ineractively... #deprecated?\nMD*/\n  \n  showProgress(label, func) {\n    ShowDexieProgress.currentLabel = label\n    return cop.withLayers([ShowDexieProgress], () => {\n        return func()\n    })\n  }\n  \n  \n  \n  async updateFile(url) {\n    url = getBaseURL(url)\n    console.log(\"[fileindex] updateFile \" + url)\n    var stats = await fetch(url, {\n      method: \"OPTIONS\", \n      headers: {\n        \"debug-initiator\": \"fileindex.js#updateFile\"\n      }\n    }).then(r => r.clone().json())\n    \n    if (!stats.error) {\n      let name = url.replace(/.*\\//,\"\")\n      await this.addFile(url, name, stats.type, stats.size, stats.modified)\n    }\n  } \n  \n  \n  // #important\n  async addFile(url, name=\"\", type, size, modified, slowdown=false, indexVersions=false) {  \n    var start = performance.now()\n    var addedContent = false\n    if (url.match(\"/node_modules\") || url.match(/\\/\\./) ) {\n      // console.log(\"FileIndex ignore  \" + url)\n      return\n    }    \n    console.log(\"[fileindex] addFile \" + url)\n\n    if (type == \"file\") {\n       \n    }\n    \n    var file = {\n      url: url,\n      name: name,\n      size: size,\n      modified: modified\n    }\n  \n    if (name.match(/\\.((css)|(js)|(md)|(txt)|(tex)|(bib)|(x?html)|(note))$/)) {\n      if ((size < MAX_FILESIZE) || name.match(/\\.((bib))$/) ) {\n        let response = await fetch(url, {\n          method: \"GET\",\n          headers: {\n            \"debug-initiator\": \"fileindex.js#addFile\"\n          }\n        })\n        file.version = response.clone().headers.get(\"fileversion\")\n        file.content = await response.clone().text() \n        \n        // only load versions for our small text files... \n        console.log(\"[fileindex] load versions for \" + url)\n\n        if (indexVersions) {\n          var versionsJSON = (await this.loadVersions(url))\n          if (versionsJSON) {\n            file.versions = versionsJSON.map(ea => ea && ea.version).filter(ea => ea)  \n          } else {\n            console.warn(\"[lively-index] could not versions for \" +url)\n          }          \n        }\n        addedContent = true\n      }\n    }\n\n    let fileType = url.replace(/.*\\./,\"\")\n    if(type == \"directory\") {\n      type = \"directory\"\n    }\n    file.type = type\n    \n    if (file.content) {\n      this.extractTitleAndTags(file) \n      this.addLinks(file)\n      if (file.name.match(/\\.md$/)) {\n        file.references = Markdown.extractReferences(file.content)\n      }\n    }\n    \n    if (file.name.match(/\\.(pdf)|(md)$/)) {\n      file.bibkey = Bibliography.urlToKey(file.url)\n    }\n    \n    file.unboundIdentifiers = []\n    \n    \n    await this.db.transaction(\"rw\", this.db.files, () => { \n      this.db.files.put(file) \n    })\n    \n    if (file.name.match(/\\.bib$/)) {\n      await this.db.transaction(\"rw\", this.db.bibliography, () => { \n        this.addBibrefs(file)\n      })\n    }\n      \n    if (file.name.match(/\\.js$/)) {\n      await this.addModuleSemantics(file)\n      // await this.addVersions(file) // #Disabled for now, this is expensive!\n    }\n    \n    console.log(\"[fileindex] addFile \"+ url + \" FINISHED (\" + Math.round(performance.now() - start) + \"ms)\")\n    \n    if (slowdown && addedContent) {\n      console.log(\"[fileindex] wait a second\")\n      await wait(1000) // slow down the indexing\n    }\n  }\n\n  async dropFile(url) {\n    console.log(\"FileIndex drop \" + url + \" from index\")\n    this.db.transaction(\"rw\", this.db.files, () => {\n      this.db.files.delete(url)\n    })\n  }\n\n  async removeDirectory(baseURL) {\n    var files = await this.toArray()\n    for(let ea of files) {\n      let eaURL = ea.url\n      if (eaURL.startsWith(baseURL)) {\n        this.dropFile(eaURL)\n      }     \n    }\n  }\n  \n  async updateDirectory(baseURL, showProgress, updateDeleted, indexVersion=false) {\n    var json = await fetch(baseURL, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist  : true,\n        \"debug-initiator\": \"fileindex.js#updateDirectory\"\n      }\n    }).then(r => {\n      if (r.status == 200) {\n        return r.json()\n      } else {\n        console.log(\"FileIndex fetch failed \", baseURL, r)\n      }\n    })\n    if (!json) {\n      console.log(\"FileIndex could not update \" + baseURL)\n      return\n    }\n    \n    let files = json.contents || []\n    files = files.filter(ea => !ea.name.match(/(\\.svn)|(\\.git)/))\n    \n    if (showProgress) {\n      var progress = await lively.showProgress(\"add \" + baseURL.replace(/\\/$/,\"\").replace(/.*\\//,\"\"))\n      var total = files.length\n      var i=0\n    }\n\n    var lastModified= new Map()\n    var visited = new Set()\n    var all = new Set()\n    await this.db.files.each(file => {\n      all.add(file.url)\n      lastModified.set(file.url, file.modified) // #Workaround #PerformanceBug in #IndexDB \n    })\n    \n    try {\n      for(let ea of files) {\n          if (showProgress) progress.value = i++ / total;\n          let eaURL = baseURL.replace(/\\/$/,\"\") + ea.name.replace(/^\\./,\"\")\n          let name = eaURL.replace(/.*\\//,\"\")\n          if (lastModified.get(eaURL) !== ea.modified) {\n            await this.addFile(eaURL, name, ea.type, ea.size, ea.modified, true, indexVersion)\n          }\n          visited.add(eaURL)\n      }\n      all.forEach(eaURL => {\n        if (eaURL.startsWith(baseURL) && !visited.has(eaURL)) {\n          this.dropFile(eaURL)\n        }\n      }) \n    } finally {\n      if (showProgress) progress.remove()\n    } \n    console.log(\"FileIndex updateDirectory finished\")\n  }\n\n  async addDirectory(baseURL) {\n    return this.updateDirectory(baseURL, true) // much faster and better\n  }\n  showAsTable() {\n    var result= []\n    this.db.files.each(ea => {\n      result.push({\n        url:ea.url,\n        size: ea.size,\n        title: (ea.title) ? ea.title.replace(/</g, \"&lt;\").slice(0,100) : \"\",\n        tags: ea.tags,\n        classes: ea.classes,\n        functions: ea.functions\n        })\n    }).then(() => {\n      var sorted = _.sortBy(result, ea => Number(ea.size)).reverse()\n\n      lively.openComponentInWindow(\"lively-table\").then(table => {\n        table.setFromJSO(sorted)\n        table.style.overflow = \"auto\"\n        table.column(\"size\").forEach(cell => cell.classList.add(\"number\"))\n      })\n    })\n  }\n}\n\n/*MD ## Deprecated  MD*/ \n\ncop.layer(self, \"ShowDexieProgress\").refineClass(FileIndex.current().db.Collection, {\n  async modify(func) {\n    var i = 0\n    var total = await this.count()\n    var progress = await lively.showProgress(\"update\");\n    if (ShowDexieProgress.currentLabel) {\n      progress.textContent = ShowDexieProgress.currentLabel\n    }\n    var innerFunc = function(ea)  {\n      progress.value = i++ / total\n      func(ea)\n    }\n    // #TODO 'cop.proceed' does not work in the async setting...\n    var result = await cop.withoutLayers([ShowDexieProgress], async () => {\n      return this.modify(innerFunc)\n    })\n    progress.remove()\n    return result\n  }\n})\n\n\nif (self.lively4fetchHandlers) {  \n  \n  // remove old instances of me\n  self.lively4fetchHandlers = self.lively4fetchHandlers.filter(ea => !ea.isFileIndexHandler);\n  self.lively4fetchHandlers.unshift({\n    isFileIndexHandler: true,\n    handle(request, options) {\n      // do nothing\n    },\n    async finsihed(request, options) {\n      if (!request) return\n      var url = (request.url || request).toString()\n      var method = \"GET\"\n      if (options && options.method) method = options.method;\n      \n      var extraSearchRoots = []    \n      if (window.lively && lively.preferences) {\n        extraSearchRoots = lively.preferences.get(\"ExtraSearchRoots\")  \n      }\n    \n      var serverURL = lively4url.replace(/\\/[^/]*$/,\"\")\n      if (url.match(serverURL) || extraSearchRoots.find(ea => url.match(ea))) {\n        if (method == \"PUT\") {\n         //  \n          // #TODO #PerformanceBug move this to worker and do it async....\n          // await FileIndex.current().updateFile(url)\n          \n          console.log(\"[fileindex] post updateFile \" + url)\n          \n          if (lively.fileIndexWorker) {\n            lively.fileIndexWorker.postMessage({message: \"updateFile\", url: url})\n          }\n          \n        }\n        if (method == \"DELETE\") {\n          //\n          // await FileIndex.current().dropFile(url)   \n          if (lively.fileIndexWorker) {\n            lively.fileIndexWorker.postMessage({message: \"dropFile\", url: url})\n          }\n        }\n      }\n    }\n  })\n  \n}\n\n\n// update your worker....\nif (self.lively && lively.fileIndexWorker) {\n  lively.fileIndexWorker.terminate();\n  System.import(lively4url + \"/src/worker/systemjs-worker.js\").then(mod => {\n    lively.fileIndexWorker = new mod.default(\"src/worker/fileindex-worker.js\");\n  })\n}\n\n\n\n\n/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"]}