{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-jens/src/client/fileindex.js"],"names":["Dexie","Strings","babelDefault","cop","Files","Paths","babelPluginSyntaxJSX","babelPluginSyntaxDoExpressions","babelPluginSyntaxFunctionBind","babelPluginSyntaxGenerators","Bibliography","BibtexParser","Markdown","diff","wait","getBaseURL","babel","dmp","diff_match_patch","syntaxPlugins","FETCH_TIMEOUT","MAX_FILESIZE","t","types","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","parseSource","info","results","parseModuleSemantics","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","ModuleDependencyAnalysis","resolveModuleDependencies","addLinks","BrokenLinkAnalysis","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","method","headers","showversions","text","JSON","parse","error","historicFileResult","parentVersionHash","parents","undefined","historicFile","comment","modified","date","previous","loadVersion","window","FileIndexFileCache","cached","loadFile","findSameMethodInClass","aClass","aMethod","static","kind","findSameClassInModule","aModule","createModification","action","previousVersionHash","class","user","commitId","previousCommitId","start","end","findModifiedClassesAndMethods","latestVersion","modifications","Array","latestContent","previousContent","astLastest","astPrevious","latest","classLatest","previousClass","methodLastest","latestSource","substring","modification","methodPreviousClass","prevSource","diff1","diff_main","patch","patch_toText","patch_make","previousSource","latestClassMethod","importDeclarations","traverse","ImportDeclaration","path","node","specifierNames","moduleUrl","specifiers","local","dependency","names","ClassDeclaration","id","loc","line","body","leadingComments","ExportNamedDeclaration","isFunctionDeclaration","declaration","isClassDeclaration","Identifier","hasASTBinding","getBindingDeclarationIdentifierPath","binding","getFirstSelectedIdentifierWithName","identifier","startPath","isIdentifier","first","stop","scope","hasBinding","getBinding","identifierPaths","referencePaths","constantViolations","cv","label","func","ShowDexieProgress","currentLabel","withLayers","filename","transform","babelrc","plugins","presets","sourceFileName","moduleIds","sourceMaps","compact","comments","code","resolveModuleSource","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","extractedLinks","extractedLink","location","mode","redirect","referrer","ok","options","timeout","Promise","race","reject","setTimeout","Error","resolvedDependency","layer","refineClass","Collection","count","textContent","innerFunc","withoutLayers","lively4fetchHandlers","isFileIndexHandler","unshift","handle","request","finsihed","extraSearchRoots","preferences","serverURL","fileIndexWorker","postMessage","message"],"mappings":"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","file":"fileindex.js","sourcesContent":["\n/*\n * File Index for Static Analys and Searching\n *\n */\n\nimport Dexie from \"src/external/dexie.js\"\nimport Strings from \"src/client/strings.js\"\nimport babelDefault from 'systemjs-babel-build';\nconst babel = babelDefault.babel;\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 babelPluginSyntaxJSX from 'babel-plugin-syntax-jsx'\nimport babelPluginSyntaxDoExpressions from  'babel-plugin-syntax-do-expressions'\nimport babelPluginSyntaxFunctionBind from 'babel-plugin-syntax-function-bind'\nimport babelPluginSyntaxGenerators from 'babel-plugin-syntax-async-generators'\n\nimport Bibliography from 'src/client/bibliography.js'\nimport BibtexParser from 'src/external/bibtexParse.js'\nimport Markdown from \"src/client/markdown.js\"\n\n// import moment from \"src/external/moment.js\";  \nimport diff from 'src/external/diff-match-patch.js';\n\nconst dmp = new diff.diff_match_patch();\n\nconst syntaxPlugins = [babelPluginSyntaxJSX, babelPluginSyntaxDoExpressions, babelPluginSyntaxFunctionBind, babelPluginSyntaxGenerators]\n\nconst FETCH_TIMEOUT = 5000\nconst MAX_FILESIZE = 200000\n\nconst t = babel.types;\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  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  \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 = this.parseSource(file.url, file.content)\n      if(!ast) {\n        console.info('Could not parse file:', file.url)\n        return []\n      }\n      var results = this.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  /* extract links and check status */\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  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  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  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  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 this.parseSource(fileUrl, latestContent)\n    let astPrevious = await this.parseSource(fileUrl, previousContent)\n\n    \n    if (!astLastest || !astPrevious) {\n      return modifications\n    }\n\n    let latest = await this.parseModuleSemantics(astLastest)\n    let previous = await this.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  parseModuleSemantics(ast) {\n    let classes = [];\n    let dependencies = [];\n    let importDeclarations = new Map();\n    let functionExports = [];\n    let classExports = [];\n    let unboundIdentifiers = [];\n    babel.traverse(ast,{\n      ImportDeclaration(path) {\n        if (path.node.source && path.node.source.value) {\n          let specifierNames = []\n          let moduleUrl = path.node.source.value\n          if (path.node.specifiers) { \n            path.node.specifiers.forEach(function(item) {\n              if (item.type === \"ImportNamespaceSpecifier\") {\n                specifierNames.push('*')\n                importDeclarations.set('*', moduleUrl)\n              } else {\n                specifierNames.push(item.local.name)\n                importDeclarations.set(item.local.name, moduleUrl)\n              }\n            })\n          }\n          let dependency = {\n            url: path.node.source.value,\n            names: specifierNames\n          }\n           dependencies.push(dependency)\n        }\n      },\n      ClassDeclaration(path) {\n        let superClassName = ''\n        let superClassUrl = ''\n        if (path.node.id) {\n          let clazz = {\n            name: path.node.id.name,\n            start: path.node.start, // start byte \n            end: path.node.end,     // end byte\n            loc: path.node.loc.end.line - path.node.loc.start.line + 1\n          }\n          superClassName = (path.node.superClass) ? path.node.superClass.name : ''\n          superClassUrl = importDeclarations.get(superClassName)\n          let methods = []\n          \n          if (path.node.body.body) {\n            path.node.body.body.forEach(function(item) {\n              if(item.type === \"ClassMethod\") {\n                let method = {\n                  name: item.key.name,\n                  loc: item.loc.end.line - item.loc.start.line + 1,\n                  start: item.start,\n                  kind: item.kind,\n                  static: item.static,\n                  end: item.end,\n                  leadingComments: item.leadingComments\n                }\n                methods.push(method)\n              }              \n            })\n          }\n          clazz.methods = methods\n          clazz.superClassName = superClassName\n          clazz.superClassUrl = superClassUrl\n          classes.push(clazz)\n        } \n      },\n      ExportNamedDeclaration(path) {\n        if(t.isFunctionDeclaration(path.node.declaration)) {\n          functionExports.push(path.node.declaration.id.name)\n        }\n        if(t.isClassDeclaration(path.node.declaration)) {\n          classExports.push(path.node.declaration.id.name)\n        }\n      },\n      Identifier(path) {\n        if (!(FileIndex.hasASTBinding(path))) {\n          unboundIdentifiers.push(path.node.name);\n        }\n      }\n    })\n    return {classes, dependencies, functionExports, classExports, unboundIdentifiers}\n  }\n  \n  static getBindingDeclarationIdentifierPath(binding) {\n    return this.getFirstSelectedIdentifierWithName(binding.path, binding.identifier.name);\n  }\n  \n  static getFirstSelectedIdentifierWithName(startPath, name) {\n    if (t.isIdentifier(startPath.node, { name: name })) {\n      return startPath;\n    }\n    var first;\n    startPath.traverse({\n      Identifier(path) {\n        if (!first && t.isIdentifier(path.node, { name: name })) {\n          first = path;\n          path.stop();\n        }\n      }\n    });\n    return first;\n  }\n  \n  static hasASTBinding(identifier) {\n    if (!identifier.scope.hasBinding(identifier.node.name)) return false;\n\n    const binding = identifier.scope.getBinding(identifier.node.name);\n    if (!binding) return false;\n    \n    const identifierPaths = [...new Set([FileIndex.getBindingDeclarationIdentifierPath(binding), ...binding.referencePaths, ...binding.constantViolations.map(cv => FileIndex.getFirstSelectedIdentifierWithName(cv, binding.identifier.name))])];\n    return identifierPaths.includes(identifier);\n  }\n  \n  // ********************************************************\n\n  showProgress(label, func) {\n    ShowDexieProgress.currentLabel = label\n    return cop.withLayers([ShowDexieProgress], () => {\n        return func()\n    })\n  }\n  \n  parseSource(filename, source) {\n    try {\n      return babel.transform(source, {\n          babelrc: false,\n          plugins: [...syntaxPlugins],\n          presets: [],\n          filename: filename,\n          sourceFileName: filename,\n          moduleIds: false,\n          sourceMaps: true,\n          compact: false,\n          comments: true,\n          code: true,\n          ast: true,\n          resolveModuleSource: undefined\n      }).ast\n    } catch(e) {\n      console.log('FileIndex, could not parse: ' + filename, e)\n      return undefined\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\nclass BrokenLinkAnalysis {\n\n  static async extractLinks(file) {\n    if (!file || !file.content || file.url.includes(\"/src/external/\") || file.url.match(/\\.js$/)) {\n      return [];\n    }\n  \n    var links = new Array()\n    var statusCache = new Map()\n    var extractedLinks =  new Array()\n    \n    if (file.url.match(/\\.md$/)) {\n      // #BUG prevents loading in #FireFox due to invalid regexp group\n      // FF RegExp version does not support lookbehinds. https://stackoverflow.com/questions/49816707/firefox-invalid-regex-group\n      // #TODO Refactor\n\n      // let patternMdFiles = /(?<=(\\]:\\s*)|(\\]\\s*\\())((http(s)?:\\/\\/(w{3}[.])?([a-z0-9.-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,})([a-zA-Z0-9\\/\\.\\-\\_#.?=%;]*))|((([./]+|[a-zA-Z\\-_]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+([a-zA-Z0-9\\-_#.?=%;]+)?))/gm\n      //      // /(?<=<|\\[.*\\]:\\s*|\\[.*\\]\\)|src\\s*=\\s*('|\")|href\\s*=\\s*('|\"))((((http(s)?:\\/\\/)(w{3}[.])?)([a-z0-9-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,}))|([./]+|[a-zA-Z_-]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+((\\.)?[a-zA-Z0-9\\-_#.?=%;]+(\\/)?)/gm\n      // extractedLinks = file.content.match(patternMdFiles)\n      \n      \n    } else if (file.url.match(/\\.(css|(x)?html)$/)) {\n      \n      // #TODO Refactor\n      \n      // let patternHtmlCssFiles = /(?<=(src\\s*=\\s*|href\\s*=\\s*|[a-zA-Z0-9\\-_]+\\s*\\{\\s*.*\\s*:\\s*)('|\"))((((http(s)?:\\/\\/)(w{3}[.])?)([a-z0-9-]{1,63}(([:]{1}[0-9]{4,})|([.]{1}){1,}([a-z]{2,})){1,}))|([./]+|[a-zA-Z\\-_]))([a-zA-Z0-9\\-_]+\\.|[a-zA-Z0-9\\-_]+\\/)+((\\.)?[a-zA-Z0-9\\-_#.?=%;]+(\\/)?)/gm\n      // extractedLinks = file.content.match(patternHtmlCssFiles)\n    }\n    if(!extractedLinks) {\n      return [];\n    }\n    for (const extractedLink of extractedLinks) {\n      var normalizedLink = Paths.normalizePath(extractedLink, file.url)\n      var status = statusCache.get(normalizedLink)\n      if (!status) {\n        status = await this.validateLink(normalizedLink)\n        statusCache.set(normalizedLink, status)\n      }\n      \n      let link = {\n        link: extractedLink,\n        location: extractedLink.includes('lively-kernel.org') ? \"internal\" : \"external\",\n        url: file.url,\n        status: status,\n      }\n      links.push(link)  \n    }\n    return links\n  }\n   \n  static async validateLink(url) { \n    console.log(\"[fileindex] validateLink \" + url)  \n    try {\n      var response = await  BrokenLinkAnalysis.fetch(url, { \n        method: \"GET\", // \"GET\" or \"HEAD\" or \"OPTIONS\" \n        mode: 'no-cors', \n        redirect: \"follow\",\n        referrer: \"no-referrer\", // no-referrer, *client\n      }, FETCH_TIMEOUT) \n\n      if (response.type === \"basic\") { // internal link\n        if (response.ok) {\n          return \"alive\"\n        } else {\n          return \"broken\"\n        } \n      } else if (response.type === \"opaque\") { // external link\n        return \"alive\"\n      }\n    } catch(e) {\n      return \"broken\"\n    } \n    return \"alive\" // at least nothing went wrong?\n  }\n\n  static async fetch(url, options, timeout) {\n    return Promise.race([\n        fetch(url, options),\n        new Promise((_, reject) =>\n            setTimeout(() => {\n              reject(new Error('Fetch timeout: ' + url))\n        }, timeout)\n        )\n    ]);\n  }\n}\n\nclass ModuleDependencyAnalysis {\n  \n   static async resolveModuleDependencies(fileUrl, dependencies) {\n    let resolvedDependencies = new Array()\n    for (const dependency of dependencies) {\n      let resolvedDependency = await System.resolve(dependency.url, fileUrl)\n      if (!resolvedDependency) {\n        resolvedDependencies.push(dependency.url)  \n      } else {\n        resolvedDependencies.push(resolvedDependency)\n      }\n    }\n     \n    return {\n      url: fileUrl,\n      dependencies: resolvedDependencies\n    }\n  }\n}\n\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/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"]}