{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/src/client/files.js"],"names":["generateUuid","uuid","_","sourcemap","Files","fillCachedFileMap","root","lively4url","filelist","fetch","method","headers","then","r","json","contents","map","ea","name","replace","url","cachedFileMap","set","exists","self","lively4cacheFiles","Map","parseSourceReference","ref","match","args","split","m","lineAndColumn","moduleData","System","metadata","load","sourceMap","smc","SourceMapConsumer","originalPositionFor","line","Number","column","toString","fetchChunks","fetchPromise","eachChunkCB","doneCB","response","reader","body","getReader","decoder","TextDecoder","all","read","result","text","decode","value","Uint8Array","stream","done","loadFileResponse","version","resolve","fileversion","loadFile","console","log","copyURLtoURL","fromURL","toURL","blob","saveFile","data","urlString","options","moveFile","newURL","content","putResponse","status","lively","confirm","delResponse","notify","getResponse","putAgainResponse","statFile","resp","walkDir","dir","existFile","stats","type","cachedInfo","get","window","__karma__","error","isURL","isFile","isDirectory","directory","string","location","href","extension","undefined","toLowerCase","tempfile","files","stringToBlob","encoded","encodeURIComponent","readBlobAsText","fileOrBlob","Promise","FileReader","onload","event","target","readAsText","readBlobAsDataURL","readAsDataURL","loadVersions","cached","versionscache","caches","open","showversions","put","clone","_sortIntoFileTree","path","element","next","shift","children","push","find","fileTree","tree","list","filter","absolute","modified","size","visualizeFileTreeMap","openComponentInWindow","tm","setTreeData","isVideo","isAudio","isPicture","generateMarkdownFileListing","anchors","Array","from","querySelectorAll","imgs","links","getAttribute","concat","document","createElement","source","fileNames","query","getURL","forEach","includes","item","textContent","appendChild","code","length","checkoutGithubFile","withSynctoolDo","syncTool","respository","branch","serverURL","getServerURL","gitControl","gitfilepath","func","container","create","setServerURL","repository","setRepository","updateLoginStatus","getBranch","remove","unzip","JSZip","loadAsync","githubFileInfo","remoteURL","userAndRepository","user","repo","rawURL","warn","JSON","stringify","getEnding","knownServers","startsWith","repositoryName","setURLAsBackground","back","hasGitMergeConflict","extractGitMergeConflictVersions","sourceWithConflict","versions","uniq"],"mappings":"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","file":"files.js","sourcesContent":["/*MD \n# Files API\n\nMD*/\n\n\nimport { uuid as generateUuid } from 'utils';\nimport _ from 'src/external/lodash/lodash.js'\nimport sourcemap from 'src/external/source-map.min.js';\n\nexport default class Files {\n\n  static async fillCachedFileMap() {\n    var root = lively4url +  \"/\"\n    var filelist =   await fetch(root, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    var map = this.cachedFileMap()\n    for(var url of filelist) {\n      map.set(url, {exists: true})\n    }\n  }\n  \n  static cachedFileMap() {\n    \n    if (!self.lively4cacheFiles) {\n      self.lively4cacheFiles = new Map()  // indexDB or dexie are to slow (60ms for simple checking if it is there #TODO)\n    } \n    return self.lively4cacheFiles \n  }\n  \n  static parseSourceReference(ref) {\n    if(ref.match(\"!\")) {\n      var url = ref.replace(/!.*/,\"\")\n      var args = ref.replace(/.*!/,\"\").split(/:/)\n    } else {\n      var m = ref.match(/(.*):([0-9]+):([0-9]+)$/)\n      args = [m[2], m[3]]\n      url = m[1]\n    }\n    \n    var lineAndColumn\n    if (args[0] == \"transpiled\") {\n      // hide transpilation in display and links\n      var moduleData = System[\"@@registerRegistry\"][url]\n      if (moduleData) {\n      var map = moduleData.metadata.load.sourceMap\n      var smc =  new sourcemap.SourceMapConsumer(map)\n      lineAndColumn = smc.originalPositionFor({\n          line: Number(args[1]),\n          column: Number(args[2])\n        })\n      } else {\n        lineAndColumn = {line: args[1], column: args[2]}\n      }\n    } else {\n      lineAndColumn = {line: args[0], column: args[1]}\n    }\n    lineAndColumn.url = url\n    lineAndColumn.toString = function() {\n        return \"\" + this.url.replace(lively4url, \"\") + \":\" + this.line + \":\" + this.column\n    }\n    return lineAndColumn\n  }\n  \n  \n  static fetchChunks(fetchPromise, eachChunkCB, doneCB) {\n    fetchPromise.then(function(response) {\n        var reader = response.body.getReader();\n        var decoder = new TextDecoder();\n        var all = \"\";\n        (function read() {\n          reader.read().then(function(result) {\n            var text = decoder.decode(result.value || new Uint8Array, {\n              stream: !result.done\n            });\n            all += text\n            if (eachChunkCB) eachChunkCB(text, result)\n            if (result.done) {\n              if (doneCB) doneCB(all, result)\n            } else {\n              read() // fetch next chunk\n            }\n          })\n        })()\n      })\n  }\n\n  static async loadFileResponse(url, version) {\n    url = this.resolve(url.toString())\n    return fetch(url, {\n      headers: {\n        fileversion: version\n      }\n    })\n  }\n\n  static async loadFile(url, version) {\n    return this.loadFileResponse(url, version).then(response => {\n      console.log(\"file \" + url + \" read.\");\n      return response.text();\n    })\n  }\n\n  static async copyURLtoURL(fromURL, toURL) {\n    var blob = await fetch(fromURL, {method: 'GET'}).then(r => r.blob())\n    return fetch(toURL, {method: 'PUT', body: blob})\n  }\n  \n  static async saveFile(url, data){\n    var urlString = url.toString();\n    urlString = this.resolve(urlString)\n    if (urlString.match(/\\/$/)) {\n      return fetch(urlString, {method: 'MKCOL'});\n    } else {\n      var options = {method: 'PUT', headers: {}, body: data}\n      if (url.match && url.match(/\\.svg$/)) {\n        options.headers['Content-Type'] = 'image/svg+xml'\n      }\n      return fetch(urlString, options);\n    }\n  }\n  \n  static async moveFile(url, newURL) {\n    var content = await fetch(url).then(r => r.blob())\n\n    // first, save the content...\n    var putResponse = await fetch(newURL, {\n      method: 'PUT',\n      body: content\n    })\n\n    if (putResponse.status !== 200) {\n      lively.confirm(\"could not move file to \" + newURL)\n      return \n    }\n\n    // ok, lets be crazy... we first delete\n    var delResponse = await fetch(url, {method: 'DELETE'})\n    if (delResponse.status !== 200) {\n      lively.notify(\"could not properly delete \" + url, await delResponse.text())\n    }\n\n    var getResponse = await fetch(newURL)\n    if (getResponse.status !== 200) {\n      lively.notify(\"save again, because we might need to...\")\n      var putAgainResponse = await fetch(newURL, {\n        method: 'PUT',\n        body: content\n      })\n      return \n    }\n  }\n  \n  static async statFile(urlString){\n    urlString = this.resolve(urlString)\n    return fetch(urlString, {method: 'OPTIONS'}).then(resp => resp.text())\n  }\n\n  /**\n   * Recursively walks a directory path given as string.\n   * @returns an array of files\n   */\n  static async walkDir(dir) {\n    \n    var url = dir.replace(/\\/?$/,\"/\")\n    \n    // iterate on the server vs client (is 400ms vs 4000ms)\n    var result = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    return result\n\n//     if(dir.endsWith('/')) { dir = dir.slice(0, -1); }\n//     const json = await lively.files.statFile(dir).then(JSON.parse);\n//     if(json.type !== 'directory') {\n//       throw new Error('Cannot walkDir. Given path is not a directory.')\n//     }\n\n//     let files = json.contents\n//       .filter(entry => entry.type === 'file')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let folders = json.contents\n//       .filter(entry => entry.type === 'directory')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let subfolderResults = await Promise.all(folders.map(folder => this.walkDir(folder)));\n//     subfolderResults.forEach(filesInSubfolder => files.push(...filesInSubfolder));\n\n//     return files;\n  }\n\n  // #Depricated\n  static async existFile(urlString){\n    return this.exists(urlString)\n  }\n\n  static async stats(url) {\n    return fetch(url, {method: \"OPTIONS\"}).then(r => r.json())\n  }\n\n  static async type(url) {\n    return (await this.stats(url)).type\n  }\n\n  static async exists(urlString) {\n    var cachedInfo = this.cachedFileMap().get(urlString)\n    if (cachedInfo) {\n      return cachedInfo.exists\n    }\n    \n    // karma / travis cannot handle option requests\n    if (window.__karma__) { \n      return fetch(urlString, { \n          method: 'HEAD' \n        }).then(resp => resp.status == 200); \n    }  \n  \n    var resp = (await fetch(urlString, {method: \"OPTIONS\"}))\n    if (resp.status != 200) return false\n    var stats = await resp.json()\n    return stats.error ? false : true\n  }\n  \n\n  static isURL(urlString) {\n    return (\"\" + urlString).match(/^([a-z]+:)?\\/\\//) ? true : false;\n  }\n  \n  static async isFile(url) {\n    return (await this.type(url)) == \"file\"\n  }\n\n  // #TODO: should be 'directiory'\n  static async isDirectory(url) {\n    return (await this.type(url)) == \"file\"\n  }\n\n\n  static directory(string) {\n    string = string.toString()\n    return string.replace(/([^/]+|\\/)$/,\"\")\n  }\n\n  \n  // #Depricated    \n  static resolve(string) {\n    if (!this.isURL(string)) {\n      var result = lively.location.href.replace(/[^/]*$/, string)\n    } else {\n      result = string.toString()\n    }\n    // get rid of ..\n    result = result.replace(/[^/]+\\/\\.\\.\\//g,\"\")\n    // and .\n    result = result.replace(/\\/\\.\\//g,\"/\")\n    \n    return result\n  }\n\n  /* \n   * #Meta An inline test is a line that evaluates to true?\n   * #Meta We coould parse those lines, and generate better feedback, e.g. not just that it does not evaluate to true, but what are the values that are not equal?\n   * #Meta Could we run those inline tests in #Travis, too? \n   TESTS:\n      lively.files.name(\"https://foo/bar/bla.txt\") == \"bla.txt\" \n  */\n  static name(url) {\n    return url.toString().replace(/.*\\//,\"\")\n  }\n  \n /* \n  TESTS:\n      lively.files.extension(\"https://foo/bar/bla.txt\") == \"txt\" \n      lively.files.extension(\"https://foo/bar/bla.PNG\") == \"png\"\n      lively.files.extension(\"https://foo/bar/bla\") === undefined\n   */  \n  static extension(url) {\n    var name = this.name(url)\n    if (!name.match(/\\./)) return undefined\n    return name.toLowerCase().replace(/.*\\./,\"\")    \n  }\n  \n  \n  /*# Generate tmpfile url for lively4 server\n   *\n   * lively.files.tempfile() // e.g. https://lively-kernel.org/lively4/_tmp/3b8a7fcc-11dd-463e-8d32-dcc46575a4fd\n   *\n   */\n  static tempfile() {\n    // #Dependency to #Lively4Server \n    return  lively.files.directory(lively4url) + \"_tmp/\" + generateUuid()  \n  }\n\n  /*\n    lively.files.stringToBlob(\"hello world\")\n   */\n  static stringToBlob(string) {\n    var encoded = encodeURIComponent(string)\n    return fetch(`data:text/plain;charset=utf-8,${encoded}`).then(r => r.blob())\n  }\n  \n  /* \n    lively.files.stringToBlob(\"hello world\").then(b => lively.files.readBlobAsText(b))\n   */ \n  static readBlobAsText(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsText(fileOrBlob); \n    })\n  }\n\n  static readBlobAsDataURL(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsDataURL(fileOrBlob); \n    })\n  }  \n  \n  static async loadVersions(url, cached=false) {\n    var versionscache = await caches.open(\"file_versions\")\n    if (cached) {\n      var resp = await versionscache.match(url)\n      if (resp) return resp      \n    }\n    resp = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n         showversions: true   \n      }      \n    })\n    versionscache.put(url, resp.clone())\n    return resp\n  }\n  \n  \n  static async _sortIntoFileTree(root, path, element) {\n    // console.log(\"sort into \" + path + \" \" + element.name )\n    var next = path.shift()\n    if (!next) {      \n      root.children.push(element)\n      return\n    }\n    var dir = root.children.find(ea => ea.name == next)\n    if (!dir) {\n      dir = {\n        name: next,\n        children: []\n      }\n      root.children.push(dir)\n    }\n    this._sortIntoFileTree(dir, path, element)\n  }\n  \n  static async fileTree(url) {\n    var tree = {\n      name: url,\n      children: []\n    }\n    var list = (await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json())).contents\n    if (!list) return;\n    \n    for(var ea of list) {\n      if (ea.name !== \".\") {\n        var path = ea.name.replace(/^\\.\\//,\"\").replace(/[^/]*$/,\"\").split(\"/\").filter(ea => ea)\n        var absolute = ea.name.replace(/^\\.\\//, url)\n        var element = {\n            name: ea.name.replace(/.*\\//,\"\"),\n            modified: ea.modified,\n            url: absolute,\n            size: ea.size,\n            type: ea.type\n          }\n        if (element.type == \"directory\") element.children = [];\n        this._sortIntoFileTree(tree, path, element)        \n      }\n    }\n    return tree\n  }\n  \n  // Files.visualizeFileTreeMap(lively4url )\n  static async visualizeFileTreeMap(url) {\n    var tree = await lively.files.fileTree(url)\n    if (tree) {\n      lively.openComponentInWindow(\"d3-treemap\").then( async tm => {\n        tm.setTreeData(tree)\n      })\n    } else {\n      lively.notify(\"Could not create tree for \" + url)\n    }\n  }\n  \n  static isVideo(url) {\n    return url.toString().match(/((ogm)|(m4v)|(mp4)|(mov)|(avi)|(flv)|(mpe?g)|(mkv)|(ogv))$/i)\n  }\n  \n  static isAudio(url) {\n    return url.toString().match(/((mp3)|(m4a)|(ogg))$/i)\n  }\n\n  static isPicture(url) {\n    return url.toString().match(/((svg)|(png)|(jpe?g)|(gif))$/i)\n  }\n  \n  static async generateMarkdownFileListing(root) { \n    var anchors = Array.from(root.querySelectorAll(\"a\"))\n    var imgs = Array.from(root.querySelectorAll(\"[src]\"))\n    \n    var links = anchors.map(ea => ea.getAttribute(\"href\")).filter(ea => !ea.match(/search:/)).concat(\n          imgs.map(ea => ea.getAttribute(\"src\")))\n    \n    var result = document.createElement(\"div\")\n\n    var source = \"\" // the generated markdown source that should be added\n    var fileNames = [];\n\n    var list = document.createElement(\"ul\")\n    var url = (\"\" + lively.query(root, \"lively-container\").getURL()).replace(/[^/]+$/,\"\");\n    \n    var files = (await fetch(url, {\n      method: \"OPTIONS\"\n    }).then(r => r.json())).contents\n    files.forEach(ea => {\n      // var item = document.createElement(\"li\")\n      var name =  ea.type == \"directory\" ? \n        ea.name + \"/\" :\n        ea.name\n      \n      var ref = name.replace(/ /g, \"%20\")\n      if (name == \"index.md\") return // don't include yourself\n      \n      fileNames.push(ref)\n      // item.textContent = name\n      if (!links.includes(ref)) {\n        // list.appendChild(item)  \n        source += `  - [${name}](${ref})\\n`\n      }\n    })\n\n    links.filter(ea => !fileNames.includes(ea) && !ea.match(\"/\")).forEach(ea => {\n      var item = document.createElement(\"li\")\n       if (ea == \"index.md\") return // don't include yourself\n      item.textContent = \"Missing \" + ea\n      list.appendChild(item)\n    })\n    result.appendChild(list)\n\n    var code = document.createElement(\"pre\")\n    code.textContent = source.length > 0 ? \"## Please Insert Me\\n\" + source : \"\"\n    result.appendChild(code)\n\n    return result\n  }\n  \n  static async checkoutGithubFile(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()    \n      if (!url.match(serverURL)) { // we are in a checked out repo....\n        return undefined // not information for files we do not manage...\n      }\n      return await syncTool.gitControl(\"checkout\", undefined, {\n        gitfilepath: path.replace(/^\\//,\"\") // no leading / expected....\n      })\n    }, url) \n  }\n\n  static async withSynctoolDo(func, url) {     \n    // #Idea, could't we ask the server for this set directly, since we ask it indirectly anyway? as special OPTIONS request #TODO\n    try {\n      var container = <div style=\"display:none\"></div> // hide the uglyness, at least in the UI\n      document.body.appendChild(container)\n      var syncTool = await lively.create(\"lively-sync\", container); // #Hack #Ugly\n      \n      var serverURL = this.serverURL(url) \n      if (!serverURL) return\n      syncTool.setServerURL(serverURL) \n\n      var m = url.replace(serverURL,\"\").replace(/^\\//,\"\").match(/([^/]*)(\\/*.*)/)\n      var repository = m[1]\n      var path = m[2]\n      console.log(\"set repository: \"  + repository)\n      syncTool.setRepository(repository)\n      await syncTool.updateLoginStatus()\n      var branch = syncTool.getBranch()\n      return await func(syncTool, repository, branch, path)\n    } finally {\n      container.remove() // we really opened a graphical object for this\n    }\n  }\n  \n  static async unzip(url) {\n    var blob = fetch(url).then(r => r.blob())\n    return  JSZip.loadAsync(blob)\n  }\n  \n  \n  static async githubFileInfo(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()      \n      var remoteURL = await syncTool.gitControl(\"remoteurl\")\n      remoteURL = remoteURL.replace(/\\n/,\"\")\n      \n      var userAndRepository = remoteURL.replace(/https:\\/\\/github.com\\//,\"\").replace(/git@github.com:/,\"\").replace(/\\.git/,\"\")\n      var [user, repo] = userAndRepository.split(\"/\")\n      \n      var result =  {\n        url,\n        user,\n        repo,\n        serverURL,\n        respository,\n        path: path && path.replace(/^\\//,\"\"),\n        remoteURL,\n        branch,\n        rawURL: remoteURL + \"/raw/\" + branch + path\n      }\n      \n      if (!remoteURL || !branch || !path) {\n        console.warn(\"Github fileInfo not complete: \" + JSON.stringify(result))\n        return null\n      }\n      \n      return result  \n    }, url) \n  }\n  \n  static getEnding(path) {\n    return path.toString().replace(/[#?].*/,\"\").replace(/.*\\./,\"\");\n  }\n  \n  \n  static serverURL(url) {\n    // #TODO to replace this static list, we could add this info OPTION requests... \n    \n  \n    var knownServers = [\n      lively4url.replace(/\\/[^/]+$/,\"\"),\n      \"https://lively-kernel.org/voices\",\n      \"https://lively-kernel.org/research\",\n      \"https://lively-kernel.org/lively4S2\",\n      \"https://lively-kernel.org/lively4\"\n    ]\n    \n    for(var ea of knownServers) {\n      if (url.startsWith(ea)) {\n        return ea        \n      }\n      \n    }\n    return null // don't know?\n  }\n\n  static repositoryName(url) {  \n    var serverURL = this.serverURL(url)\n    if (!serverURL) return null\n    var repo =  url.replace(serverURL +\"/\", \"\").replace(/\\/.*/,\"\");\n    return repo\n  }\n  \n  static async setURLAsBackground(url) {\n    document.querySelectorAll(\"lively-background\").forEach(ea => ea.remove())\n\n    var back = await (<lively-background class=\"lively-content\" ></lively-background>) \n    document.body.appendChild(back)\n    back.url = url\n  }\n  \n  \n  /*MD ## Git Infos MD*/\n  static hasGitMergeConflict(source) {\n    return source.match(/<<<<<<<(.|\\n)*=======(.|\\n)*>>>>>>>/m)\n  }\n  \n  static extractGitMergeConflictVersions(sourceWithConflict) {\n     var versions = _.uniq(sourceWithConflict.split(\"\\n\")\n      .filter(ea => ea.match(/^(<<<<<<<)|(>>>>>>>) /))\n      .map(ea => ea.replace(/^(<<<<<<<)|(>>>>>>>) /, \"\")))\n     return versions\n  }\n  \n  \n  \n  \n}\n\n\n\n\n"]}