{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-event-sourcing/src/client/poid.js"],"names":["FileIndex","loadJSON","saveJSON","hasItem","FileCache","ValueResponse","constructor","value","status","_value","object","text","json","jsonString","JSON","stringify","parse","blob","Error","Scheme","url","scheme","GET","Response","PUT","OPTIONS","POST","DELETE","MKCOL","handle","options","resolve","method","error","PATCH","HEAD","LivelyFile","pathToFile","fileURL","selector","replace","decodeURI","element","document","body","subSelector","split","parentElement","querySelector","e","console","warn","undefined","log","tagName","fetch","newfile","filename","parentURL","parent","siblings","Array","from","querySelectorAll","sort","a","b","aPos","lively","getPosition","bPos","y","x","create","name","setPosition","pt","length","lastSibling","last","pos","addPt","getExtent","showElement","setContent","headers","fileToStat","withChildren","fileToURI","type","contents","childNodes","filter","ea","classList","contains","map","file","LivelySearch","generateResult","dbQuery","result","count","each","title","searchString","toString","match","current","db","files","where","equals","root","lively4url","startsWith","content","m","LivelyOpen","openString","openComponentInWindow","livelyExample","donotfollowpath","LivelyBrowse","openBrowser","LivelyWikipedia","lang","term","setExtent","setAttribute","setURL","hideMenubar","LivelyEdit","CachedRequest","realURL","RegExp","cacheURL","asCacheURL","promisedCache","_promisedCache","self","caches","open","cache","request","ok","put","clone","delete","invalidateCache","me","lively4fetchHandlers","isPolymorphicIdentifierCacheHandler","push","finsihed","ElementQuery","pathToElement","elementURL","elementToURI","id","elementIdQuery","elementToStat","ElementQueryAll","pathToElements","elements","InnerHTMLElementQuery","innerHTML","StringScheme","string","URL","pathname","NumberScheme","parseFloat","DateScheme","Date","parseInt","BooleanScheme","Lively4URLScheme","_fetch","filePath","GSScheme_Stub","delegatee","_delegatee","_delegateePromise","Promise","_delegateeResolve","delegateTo","holdOff","methodName","args","NewScheme","migrateTo","LocalStorageFileSystem","key","_key","init","localStorage","setItem","remove","removeItem","exists","fs","getFile","path","entry","remainingPath","currentPath","shift","setFile","fileName","pop","folder","existFile","deleteFile","existFolder","LocalStorageFileSystemScheme","lsfsKey","initFS","config","defaultConfig","resetFS","withRoot","callback","testing","fetchText","sub","fail","endsWith","message","response","contentType","PolymorphicIdentifier","isPolymorphicIdentifierHandler","load","forEach","register","schemaFor","schemas","schema","handler","navigator","serviceWorker","removeEventListener","addEventListener","evt","data","ports","postMessage","then","r","event","err"],"mappings":"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","file":"poid.js","sourcesContent":["/*MD # Polymorphic Identifier \n[architecture](browse://doc/architecture/polymorphic-identifiers.md)\nMD*/\n\nimport FileIndex from 'src/client/fileindex.js'\nvar FileCache = FileIndex;\n\nexport class ValueResponse {\n \n  constructor(value, { status = 200 } = {}) {\n    this._value = value;\n    this.status = status;\n  }\n  \n  async object() {\n    return this._value;\n  }\n  \n  async value() {\n    return this._value;\n  }\n  \n  async text() {\n    return '' + this._value;\n  }\n\n  async json() {\n    const jsonString = JSON.stringify(await this.value());\n    return JSON.parse(jsonString);\n  }\n\n  async blob() {\n    throw new Error(\"blob not supported\")\n  }\n}\n\nexport class Scheme {  \n  constructor(url) {\n    this.url = url\n  }\n  \n  get scheme() {\n    throw new Error(\"subcluss responsibility\")\n  }\n\n  static get scheme() {\n    return (new this()).scheme\n  } \n  \n  GET() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  PUT() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  OPTIONS() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  POST() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  DELETE() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  MKCOL() {\n    return new Response(\"not supported yet\", {status: 300})\n  }\n\n  async handle(options) {\n    if (!this.resolve()) {\n      if (this.PUT && options && options.method == \"PUT\") {\n        return this.PUT(options, true)  \n      }\n      \n      if (options && options.method == \"OPTIONS\") {\n        return new Response(JSON.stringify({error: \"Could not resolve \" + this.url}), {status: 404})  \n      }\n      return new Response(\"Could not resolve \" + this.url, {status: 404})\n    }  \n    if (this.GET && (!options || options.method == \"GET\")) { // GET is default\n      return this.GET(options)\n    } else if (this.PUT && options.method == \"PUT\") {\n      return this.PUT(options)\n    } else if (this.OPTIONS && options.method == \"OPTIONS\") {\n      return this.OPTIONS(options)\n    } else if (this.PATCH && options.method == \"PATCH\") {\n      return this.PATCH(options)\n    } else if (this.POST && options.method == \"POST\") {\n      return this.POST(options)\n    } else if (this.DELETE && options.method == \"DELETE\") {\n      return this.DELETE(options)\n    } else if (this.HEAD && options.method == \"HEAD\") {\n      return this.HEAD(options)\n    } else if (this.MKCOL && options.method == \"MKCOL\") {\n      return this.MKCOL(options)\n    }\n    \n    return new Response(\"Request not supported\", {status: 400})    \n  }     \n}\n\n/* \n  EXAMPLES:\n    fetch(\"livelyfile://#README.md\").then(t => t.text())\n    fetch(\"livelyfile://#README2.md\", {method: \"PUT\", body: \"heyho\"})\n*/\n\nexport class LivelyFile extends Scheme {\n  \n  get scheme() {\n    return \"livelyfile\"\n  }\n\n  static pathToFile(fileURL) {\n    var selector = fileURL.replace(/^[a-zA-Z]+:\\/\\//,\"\") // .replace(/\\./,\"\\\\.\")\n    selector = decodeURI(selector)\n    var element = document.body\n    for(var subSelector of selector.split(\"/\")) {\n      if (subSelector == \"\") {\n        // nothing\n      } else if (subSelector == \"..\") {\n        if (element) {\n          element = element.parentElement          \n        }\n      } else {\n        try {\n          element = element.querySelector(`:scope > [name=\"${subSelector.replace(/\\./,\"\\\\.\")}\"]`)\n        } catch(e) {\n          console.warn(\"query error \" + e)\n          return undefined\n        }              \n      }\n    }\n    return element\n  }\n  \n  \n  resolve() {\n    this.element = LivelyFile.pathToFile(this.url)\n    console.log(\"found \" + this.element, this.url)\n    // lively.showElement(this.element) // very funny to see which file is asked...\n    return this.element \n  }  \n\n  GET(options) {\n    console.log(\"LivelyFile GET \" + this.url)\n    var element = this.element\n    if (element.tagName == \"LIVELY-FILE\") {\n      if (!element.url) {\n         return new Response(`lively-file found, but url attribute is missing...`, {status: 500})\n      }\n      return fetch(element.url)\n    }\n    return super.GET(options)\n  }\n\n  async PUT(options, newfile) {\n    if (newfile) {\n      \n      var filename = this.url.replace(/.*\\//,\"\")\n      var parentURL = this.url.replace(/\\/[^/]*$/,\"\")\n      var parent = LivelyFile.pathToFile(parentURL) \n      if (!parent) {\n        return new Response(`Could not create ${filename}, because parent element not found: ${parentURL}`, {status: 404})\n      } \n      var siblings = Array.from(parent.querySelectorAll(\":scope > lively-file\")).sort((a,b) => {\n        var aPos = lively.getPosition(a),\n          bPos =  lively.getPosition(b)\n        if (aPos.y == bPos.y ) {\n          return aPos.x - bPos.x\n        }\n        return aPos.y - bPos.y\n      })\n      this.element = await lively.create(\"lively-file\", parent)\n      this.element.name = filename\n      lively.setPosition(this.element, lively.pt(0,0))\n      if (siblings.length > 0 ) {\n        var lastSibling = siblings.last\n        var pos = lively.getPosition(lastSibling)\n        pos = pos.addPt(lively.pt(80,0))\n        if (pos.x + 50 > lively.getExtent(parent).x) {\n          pos = lively.pt(0, pos.y + 80)\n        } \n        \n        lively.setPosition(this.element, pos)\n        \n      }\n      \n      lively.showElement(this.element)\n      \n    }\n    \n    var element = this.element\n    if (element.tagName == \"LIVELY-FILE\") {\n        if (element.setContent && options) {\n          element.setContent(options.body, options.headers && options.headers['Content-Type'])\n          return new Response(\"\")\n        } else {\n          return new Response(\"Hmm... I don't know.\", {status: 500})      \n        }\n      }\n    return super.PUT(options)\n  }\n  \n  fileToStat(element, withChildren) {\n    return {\n      name: element.name,\n      parent: LivelyFile.fileToURI(element.parentElement),\n      type: element.tagName == \"LIVELY-FILE\" ? \"file\" : \"directory\",\n      contents: withChildren ? (Array.from(element.childNodes)\n        .filter(ea => ea.name && ea.classList && ea.classList.contains(\"lively-content\"))\n        .map(ea => this.fileToStat(ea, false))) : undefined\n    }\n  }\n  \n  static fileToURI(file) {\n    if (!file.parentElement) {\n      return this.scheme + \"://\"\n    }\n    var url = this.fileToURI(file.parentElement) \n    if (file.name) {\n      url += \"/\" + file.name\n    } else {\n      // we should not allow this?\n    }\n    return url\n  }\n  \n  OPTIONS() {\n    var element = this.element\n    if (element) {\n      return new Response(JSON.stringify(this.fileToStat(element, true)))\n    }\n    return new Response(\"We cannot do that\", {status: 400})\n  }\n}\n\n\nexport class LivelySearch extends Scheme {\n  \n  get scheme() {\n    return \"search\"\n  }\n\n  resolve() {\n    return true\n  }  \n\n  async generateResult(dbQuery) {\n    var result = \"\"\n    var count = 0\n    await dbQuery.each(ea => {\n        result += `<li>${++count}. <a href=\"${ea.url}\">${ea.name}: ${\n          ea.title.replace(/</g,\"&lt;\")}</a></li>`\n    })\n    if (count == 0) {\n      result += \"<b>no files found</b>\"\n    }\n    return result\n  }\n  \n  async GET(options) {\n    var searchString = this.url.toString().replace(/^search:\\/\\//,\"\") \n    var result = \"\"\n    if (searchString.match(\"name=\")) {\n      var filename = searchString.replace(/name=/g,\"\")\n      result += await this.generateResult(\n        FileCache.current().db.files.where(\"name\").equals(filename))\n    // } else if (searchString.match(/^#/)) {\n    //   var tag = searchString\n    //   result += await this.generateResult(\n    //     FileCache.current().db.files.where(\"tags\").notEqual([]).filter(ea => ea.tags.indexOf(tag) != -1))\n    } else {\n      var root = lively4url\n      var count = 0\n      await FileIndex.current().db.files.each(file => {\n        if (file.url.startsWith(root) && file.content) {\n          var m = file.content.match(searchString)\n          if (m) {\n             result += `<li>${++count}. <a href=\"${file.url}\">${file.name}: ${\n                file.title.replace(/</g,\"&lt;\")}</a></li>`\n          }\n        }\n      })\n    }\n    // result = \"<b>nothing found</b>\"  \n    \n    // #Hack, if we are in a \"browser\" just... go forward\n    result += `\n<div>\n<script data-name=\"livelyLoad\" type=\"lively4script\">\nfunction livelyLoad() {\nvar links = this.parentElement.querySelectorAll(\"a\")\n\nif (links.length == 1) {\n\n  if (lively.lastBackButtonClicked && (Date.now() - lively.lastBackButtonClicked < 2000)) {\n    lively.notify(\"Prevent auto navigation... we just clicked back...\")\n    return\n  } \n  lively.notify(\"only one link? Click on it!\")\n  links[0].dispatchEvent( new MouseEvent('click', {\n     view: window,\n     bubbles: true,\n     cancelable: true\n  }))\n}\n}\n</script>\n</div>\n`\n    return new Response(`<h1>Search: ${searchString}</h1>\\n${result}`, {status: 200})\n    \n    \n    // return new Response(\"<h1>Nothing found</h1>\", {status: 200})\n  }\n\n  PUT(options) {\n    return new Response(\"Does not make sense, to PUT a search...\", {status: 400})\n  }\n    \n  OPTIONS() {\n    var result = {\n      name: \"Search\",\n      type: \"directory\",\n      contents: []\n    }\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\nexport class LivelyOpen extends Scheme {\n  \n  get scheme() {\n    return \"open\"\n  }\n\n  resolve() {\n    return true\n  }  \n  \n  async GET(options) {\n    var openString = this.url.toString().replace(/^open:\\/\\//,\"\") \n    var result\n    try {\n      result = await lively.openComponentInWindow(openString)\n      if (result.livelyExample) result.livelyExample(); // fill in with example content}\n    } catch(e) {\n      return new Response(\"failed to open \" + openString, {status: 400})\n    }\n    \n    return new ValueResponse(result, {status: 200});\n    \n  }\n\n  PUT(options) {\n    return new Response(\"Does not make sense, to PUT a search...\", {status: 400})\n  }\n    \n  OPTIONS() {\n    var result = {\n      name: \"open \",\n      type: \"file\",\n      donotfollowpath: true,\n      contents: []\n    }\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\n\nexport class LivelyBrowse extends Scheme {\n  \n  get scheme() {\n    return \"browse\"\n  }\n\n  resolve() {\n    return true\n  }  \n  \n  async GET(options) {\n    var openString = this.url.toString().replace(/^browse:\\/\\//,\"\") \n    var result\n    try {\n      \n      result = await lively.openBrowser(lively4url + \"/\" + openString )\n    } catch(e) {\n      return new Response(\"failed to open \" + openString, {status: 400})\n    }\n    \n    return new ValueResponse(result, {status: 200});\n    \n  }\n\n  PUT(options) {\n    return new Response(\"Does not make sense, to PUT a search...\", {status: 400})\n  }\n    \n  OPTIONS() {\n    var result = {\n      name: \"open \",\n      type: \"file\",\n      donotfollowpath: true,\n      contents: []\n    }\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\n\nexport class LivelyWikipedia extends Scheme {\n  \n  get scheme() {\n    return \"wikipedia\"\n  }\n\n  resolve() {\n    return true\n  }  \n  \n  async GET(options) {\n\n    var result\n    try {\n      var m = this.url.toString().match(/^wikipedia:\\/?\\/?([a-z]*)\\/?(.*)/,\"\") \n      var lang = m[1] || \"en\"\n      var term = m[2] || \"\"\n      result = await lively.openComponentInWindow(\"lively-iframe\")\n      lively.setExtent(result.parentElement, lively.pt(800, 600))\n      result.parentElement.setAttribute(\"title\",\"Wikipedia: \" + term)\n      \n      result.setURL(`https://${lang}.wikipedia.org/wiki/${term}`)\n      result.hideMenubar()\n    } catch(e) {\n      return new Response(\"failed to open \" + term, {status: 400})\n    }\n    return new ValueResponse(result, {status: 200});\n  }\n\n  PUT(options) {\n    return new Response(\"Does not make sense, to PUT a search...\", {status: 400})\n  }\n    \n  OPTIONS() {\n    var result = {\n      name: \"open \",\n      type: \"file\",\n      donotfollowpath: true,\n      contents: []\n    }\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\n\n\n\nexport class LivelyEdit extends LivelyBrowse {\n  \n  get scheme() {\n    return \"edit\"\n  }\n\n  async GET(options) {\n    var openString = this.url.toString().replace(/^edit:\\/\\//,\"\") \n    var result\n    try {\n      \n      result = await lively.openBrowser(lively4url + \"/\" + openString, true )\n    } catch(e) {\n      return new Response(\"failed to open \" + openString, {status: 400})\n    }\n    \n    return new ValueResponse(result, {status: 200});\n    \n  }\n\n}\n\n/*MD ## Cache Scheme\n\nExplicit caching API of requests through the browser cache API on some \n\nThe cache fill be cleared:\n\n1. when PUT/DELETE through cache API\n2. when PUT/DELETE through any other fetch request\n3. when calling invalidate caches\n\n### Open Issues:\n\n- we should clear them on reload/boot any way.... #TODO \n- or be more clever an ask the server if they changed....? #TODO\n\n<style>\n  pre {\n    margin: 10px;\n    padding: 10px;\n    background-color: lightgray  \n  }\n</style>\n\n\n```javascript\nfetch(\"cached:https://lively-kernel.org/lively4/lively4-dummy/foo.js\").then(r => r.text())\n\n\nfetch(\"cached:https://lively-kernel.org/lively4/lively4-dummy/foo.js\", {\n  method: \"PUT\",\n  body: `\nexport function bar() {\n  return 9\n}`\n}).then(r => r.text())\n\n\nfetch(\"https://lively-kernel.org/lively4/lively4-dummy/foo.js\", {\n  method: \"PUT\",\n  body: `\nexport function bar() {\n  return 8\n}`\n}).then(r => r.text())\n```\n\nMD*/\n\n\n/*MD # Cache\n\n - #TODO does not handle mime type!\n\nMD*/\nexport class CachedRequest extends Scheme {\n  \n  get scheme() {\n    return \"cached\"\n  }\n\n  resolve() {\n    this.realURL = this.url.replace(new RegExp(\"^\" + this.scheme + \":/?/?\"),\"\") // #Hack\n    return true\n  }  \n  \n  get cacheURL() {\n    return this.asCacheURL(this.realURL) \n  }\n  \n  asCacheURL(url) {\n    return \"https://\" + url // Hack, to convice the CACHE API \n  }\n  \n  get promisedCache() {\n    if (!this._promisedCache) {\n      this._promisedCache = self.caches.open(\"PoidCachesScheme\")\n    }\n    return this._promisedCache\n  }\n  \n  async GET(options) {\n    var cache = await this.promisedCache;\n    var request = this.cacheURL  \n    var result = await cache.match(request)\n    if (!result) {\n      result = await fetch(this.realURL)\n      if (!result.ok) {\n        console.error(\"Bad Response Status for: \" + this.realURL)\n      }\n      cache.put(request, result.clone())\n    }\n    return result\n  }\n\n  async PUT(options) {\n    var cache = await this.promisedCache;\n    cache.delete(this.cacheURL)\n    return fetch(this.realURL, options)\n  }\n\n  async DELETE(options) {\n    var cache = await this.promisedCache;\n    cache.delete(this.cacheURL)\n    return fetch(this.realURL, options)\n  }\n\n  static async invalidateCache(url) {\n    try {\n      var me = new CachedRequest()\n      var cache = await me.promisedCache;\n      cache.delete(me.asCacheURL(url))      \n    } catch(e) {\n      console.log(\"CachePoindError: \", e)\n    }\n  }\n  \n  async OPTIONS(options) {\n    return fetch(this.realURL, options)\n  }\n}\n\n\nif (self.lively4fetchHandlers) {\n  \n  // get rid of old mes?\n  self.lively4fetchHandlers = self.lively4fetchHandlers\n    .filter(ea => !ea.isPolymorphicIdentifierCacheHandler)\n  \n  self.lively4fetchHandlers.push({\n    isPolymorphicIdentifierCacheHandler: true,\n    finsihed(url, options={}) {\n      if (options.method == \"PUT\" || options.method == \"DELETE\") {\n        CachedRequest.invalidateCache(url) \n      }\n      \n    }\n  })  \n}\n\n\n/* \n  EXAMPLES:\n    // fetch(\"query://#haha\", {method: \"PUT\", body: \"<h1>foo</h1>heyho\"})\n    fetch(\"query://#haha\")\n*/\nexport class ElementQuery extends Scheme {\n  \n  get scheme() {\n    return \"query\"\n  }\n  \n  static pathToElement(elementURL) {\n    var selector = elementURL.replace(/^[a-zA-Z]+:\\/\\//,\"\") // .replace(/\\./,\"\\\\.\")\n    selector = decodeURI(selector)\n    var element = document.body\n    for(var subSelector of selector.split(\"/\")) {\n      if (subSelector == \"\") {\n        // nothing\n      } else if (subSelector == \"..\") {\n        if (element) {\n          element = element.parentElement          \n        }\n      } else {\n        try {\n          element = element.querySelector(subSelector)\n        } catch(e) {\n          console.warn(\"query error \" + e)\n          return undefined\n        }              \n      }\n    }\n    return element\n  }\n  \n  resolve() {\n    this.element = ElementQuery.pathToElement(this.url)\n    return this.element\n  }\n  \n  GET(options) {\n    var element = this.element\n    if (element) {\n      return new ValueResponse(element, {status: 200});\n    }\n    return super.GET(options)\n  }\n  \n  elementToURI(element) {\n    if (!element.parentElement) {\n      return this.scheme + \"://\"\n    }\n    var url = this.elementToURI(element.parentElement) \n    if (element.id) {\n      url += \"/\" + this.elementIdQuery(element) \n    }\n    return url\n  }\n  \n  elementIdQuery(element) {\n    return \"#\" + element.id.replace(/\\./g, \"\\\\.\")\n  }\n  \n  elementToStat(element, withChildren) {\n    return {\n      name: element.id ? this.elementIdQuery(element) : element.tagName, // quote points, because they are SYNTAX\n      type: \"element\",\n      parent: this.elementToURI(element.parentElement), // URI to parent element / file / for navigation...\n      contents: withChildren ? (Array.from(element.childNodes)\n        .filter(ea => ea.id)\n        .map(ea => this.elementToStat(ea, false))) : undefined\n    }\n  }\n  \n  OPTIONS() {\n    if (this.element) {\n      return new Response(JSON.stringify(this.elementToStat(this.element, true)))\n    }\n    return new Response(\"We cannot do that\", {status: 400})\n  }\n}\n\n\n/* \n  EXAMPLES:\n    fetch(\"queryall://div\")\n*/\nexport class ElementQueryAll extends Scheme {\n  \n  get scheme() {\n    return \"queryall\"\n  }\n\n  \n  static pathToElements(elementURL) {\n    var selector = elementURL.replace(/^[a-zA-Z]+:\\/\\//,\"\").replace(/\\./,\"\\\\.\")\n    selector = decodeURI(selector)\n    if (selector  == \"\") return document\n    try {\n      var elements = Array.from(document.querySelectorAll(selector))\n    } catch(e) {\n      console.warn(\"query error \" + e)\n      return undefined\n    }\n    return elements\n  }\n  \n  resolve() {\n    this.elements = ElementQueryAll.pathToElements(this.url)\n    return this.elements\n  }\n  \n  GET(options) {\n    if (this.elements) {\n      return new ValueResponse(this.elements, {status: 200});\n    }\n    return super.GET(options)\n  }\n  \n}\n\n/* \n  EXAMPLES:\n    fetch(\"innerhtml://#haha\", {method: \"PUT\", body: \"<h1>foo</h1>heyho\"})\n    fetch(\"innerhtml://#haha\").then(t => t.text())\n*/\nexport class InnerHTMLElementQuery extends ElementQuery {\n  get scheme() {\n    return \"innerhtml\"\n  }\n\n  GET(options) {\n    var element = this.element\n    if (element) {\n      return new Response(element.innerHTML, {status: 200})      \n\n    }\n    return super.GET(options)\n  }\n\n  PUT(options) {\n    var element = this.element\n    if (element) {\n      element.innerHTML = options && options.body ? options.body : \"\" \n      return new Response(\"\")\n    }\n    return super.PUT(options)\n  }\n  \n \n}\n\nexport class StringScheme extends Scheme {\n\n  get scheme() { return \"string\"; }\n  resolve() { return true; }\n\n  GET(options) {\n    const string = new URL(this.url).pathname;\n    return new ValueResponse(string, {status: 200})      \n  }\n\n}\n\nexport class NumberScheme extends Scheme {\n\n  get scheme() { return \"number\"; }\n  resolve() { return true; }\n\n  GET(options) {\n    const content = new URL(this.url).pathname;\n    return new ValueResponse(parseFloat(content), {status: 200})      \n  }\n\n}\n\nexport class DateScheme extends Scheme {\n\n  get scheme() { return \"date\"; }\n  resolve() { return true; }\n\n  GET(options) {\n    const content = new URL(this.url).pathname;\n    return new ValueResponse(new Date(parseInt(content)), {status: 200})      \n  }\n\n}\n\nexport class BooleanScheme extends Scheme {\n\n  get scheme() { return \"bool\"; }\n  resolve() { return true; }\n\n  GET(options) {\n    const content = new URL(this.url).pathname;\n    return new ValueResponse(content === 'true' ? true : false, {status: 200})\n  }\n\n}\n\nexport class Lively4URLScheme extends Scheme {\n  \n  get scheme() {\n    return \"lively4url\";\n  }\n\n  resolve() {\n    return true;\n  }  \n  \n  _fetch(options) {\n    const filePath = lively4url + \"/\" + new URL(this.url).pathname;\n    lively.warn(filePath, options && options.method)\n    return fetch(lively4url + \"/\" + new URL(this.url).pathname, options);\n  }\n  \n  async GET(options) {\n    return this._fetch(options);\n  }\n\n  PUT(options) {\n    return this._fetch(options);\n  }\n    \n  OPTIONS(options) {\n    return this._fetch(options);\n  }\n}\n\nexport class GSScheme_Stub extends Scheme {\n  \n  get scheme() {\n    return \"gs\";\n  }\n\n  resolve() {\n    return true\n  }\n\n  static async delegatee() {\n    if (this._delegatee) {\n      return this._delegatee;\n    } else {\n      return this._delegateePromise = this._delegateePromise || new Promise(resolve => this._delegateeResolve = resolve);\n    }\n  }\n\n  static delegateTo(Scheme) {\n    this._delegatee = Scheme;\n    this._delegateeResolve && this._delegateeResolve(this._delegatee);\n  }\n\n  async holdOff(methodName, ...args) {\n    const NewScheme = await GSScheme_Stub.delegatee();\n    this.migrateTo(NewScheme);\n    return this[methodName](...args);\n  }\n\n  async GET(...args) { return this.holdOff('GET', ...args); }\n  async PUT(...args) { return this.holdOff('PUT', ...args); }\n  async OPTIONS(...args) { return this.holdOff('OPTIONS', ...args); }\n  async POST(...args) { return this.holdOff('POST', ...args); }\n  async DELETE(...args) { return this.holdOff('DELETE', ...args); }\n}\n\nimport { loadJSON, saveJSON, hasItem} from 'src/client/utils/local-storage.js'\n\nexport class LocalStorageFileSystem {\n\n  constructor(key) {\n    this._key = key\n  }\n  \n  create(init = {}) {\n    localStorage.setItem(this._key, JSON.stringify(init))\n  }\n  remove() {\n    localStorage.removeItem(this._key)\n  }\n  \n  exists() {\n    return localStorage::hasItem(this._key)\n  }\n  get root() {\n    return localStorage::loadJSON(this._key)\n  }\n  set root(fs) {\n    return localStorage::saveJSON(this._key, fs)\n  }\n\n  getFile(path) {\n    let entry = this.root;\n    const remainingPath = path.split('/')\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      entry = entry[currentPath];\n      if (!entry) {\n        throw new Error(`no file found at ${path}.`)\n      }\n    }\n    return entry;\n  }\n\n  setFile(path, text) {\n    const remainingPath = path.split('/')\n    const fileName = remainingPath.pop()\n\n    const root = this.root\n    let folder = root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (currentPath === '') {\n        continue\n      }\n      if (typeof folder !== 'object') {\n        throw new Error(`${currentPath} is no folder`)\n      }\n      folder = folder[currentPath];\n    }\n\n    folder[fileName] = text;\n    this.root = root;\n  }\n\n  existFile(path) {\n    const remainingPath = path.split('/')\n\n    let file = this.root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (currentPath === '') {\n        continue\n      }\n      if (typeof file !== 'object') {\n        return false\n      }\n      file = file[currentPath];\n    }\n\n    return typeof file === 'string';\n  }\n  \n  deleteFile(path) {\n    const remainingPath = path.split('/')\n    const fileName = remainingPath.pop()\n\n    const root = this.root\n    let folder = root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (currentPath === '') {\n        continue\n      }\n      if (typeof folder !== 'object') {\n        throw new Error(`${currentPath} is no folder`)\n      }\n      folder = folder[currentPath];\n    }\n\n    delete folder[fileName];\n    this.root = root;\n  }\n\n  existFolder(path) {\n    const remainingPath = path.split('/')\n\n    let folder = this.root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (currentPath === '') {\n        continue\n      }\n      if (typeof folder !== 'object') {\n        return false\n      }\n      folder = folder[currentPath];\n    }\n\n    return typeof folder === 'object';\n  }\n  \n}\n\nexport class LocalStorageFileSystemScheme extends Scheme {\n\n  resolve() {\n    this.fs = new LocalStorageFileSystem(this.lsfsKey)\n    this.initFS();\n\n    return true\n  }  \n\n  /*MD ## constants MD*/\n\n  get scheme() {\n    return \"lsfs\"\n  }\n  \n  get lsfsKey() {\n    return 'LocalStorageFileSystem';\n  }\n  \n  /*MD ## root access MD*/\n  get root() {\n    const config = localStorage::loadJSON(this.lsfsKey);\n    if (config) {\n      return config;\n    }\n    return this.defaultConfig();\n  }\n  set root(fs) {\n    this.initFS();\n\n    return localStorage::saveJSON(this.lsfsKey, fs);\n  }\n  resetFS() {\n    return localStorage.removeItem(this.lsfsKey);\n  }\n  withRoot(callback) {\n    const root = this.root;\n    callback(root);\n    this.root = root;\n  }\n\n  testing() {\n    'lsfs://foo.js'.fetchText();\n  }\n  initFS() {\n    if (this.fs.exists()) {\n      return;\n    }\n\n    this.fs.create({\n      sub: {\n        'bar.js': 'lively.notify(\"bar\");'\n      },\n      'foo.js': 'lively.notify(\"foo\");'\n    });\n  }\n\n  get path() {\n    return this.url.replace(/^lsfs:\\/\\//gi, '');\n  }\n\n  GET(options) {\n    if (!this.url.startsWith('lsfs://')) {\n      this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n\n    // this is a file\n    if (!this.url.endsWith('/')) {\n      try {\n        const content = this.fs.getFile(this.path)\n        return this.text(content)\n      } catch (e) {\n        return this.fail(`Error in GET ${this.url}: ${e.message}`)\n      }\n    }\n\n    return this.fail(`getting folders not supported yet (${this.url})`);\n  }\n\n  async PUT(options, newfile) {\n    if (!this.url.startsWith('lsfs://')) {\n      this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    // this is a file\n    if (!this.url.endsWith('/')) {\n      try {\n        const content = this.fs.setFile(this.path, (options && options.body) ? options.body : '')\n        return this.text('works!')\n      } catch (e) {\n        return this.fail(`Error in PUT ${this.url}: ${e.message}`)\n      }\n    }\n\n    return this.fail(`putting folders not supported yet (${this.url})`);\n  }\n  \n  fileToStat(element, withChildren) {\n    return {\n      name: element.name,\n      parent: LivelyFile.fileToURI(element.parentElement),\n      type: element.tagName == \"LIVELY-FILE\" ? \"file\" : \"directory\",\n      contents: withChildren ? (Array.from(element.childNodes)\n        .filter(ea => ea.name && ea.classList && ea.classList.contains(\"lively-content\"))\n        .map(ea => this.fileToStat(ea, false))) : undefined\n    }\n  }\n  \n  static fileToURI(file) {\n    if (!file.parentElement) {\n      return this.scheme + \"://\"\n    }\n    var url = this.fileToURI(file.parentElement) \n    if (file.name) {\n      url += \"/\" + file.name\n    } else {\n      // we should not allow this?\n    }\n    return url\n  }\n  \n  OPTIONS() {\n    var element = this.element\n    if (element) {\n      return new Response(JSON.stringify(this.fileToStat(element, true)))\n    }\n    return new Response(\"We cannot do that\", {status: 400})\n  }\n  \n  MKCOL() {\n    if (!this.url.startsWith('lsfs://')) {\n      this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    // this is a file\n    if (!this.url.endsWith('/')) {\n      try {\n        const content = this.fs.setFile(this.path, (options && options.body) ? options.body : '')\n        return this.text('works!')\n      } catch (e) {\n        return this.fail(`Error in PUT ${this.url}: ${e.message}`)\n      }\n    }\n\n    return this.fail(`putting folders not supported yet (${this.url})`);\n\n    var element = this.element\n    if (element) {\n      return new Response(JSON.stringify(this.fileToStat(element, true)))\n    }\n    return new Response(\"We cannot do that\", {status: 400})\n  }\n  \n  fail(message) {\n    return new Response(message, {status: 400});\n  }\n  response(content, contentType) {\n    return new Response(content, {\n      headers: {\n        \"content-type\": contentType\n      },\n      status: 200\n    });\n  }\n  json(json) {\n    var content = JSON.stringify(json, undefined, 2);\n    return this.response(content, \"application/json\");\n  }\n  text(text, contentType = \"text\") {\n    return this.response(text, contentType);\n  }\n\n}\n\nexport default class PolymorphicIdentifier {\n  \n  get isPolymorphicIdentifierHandler() {\n    return true;\n  } \n  \n  static get isPolymorphicIdentifierHandler() {\n    return true;\n  } \n  \n  static load() {\n    [\n      LivelyFile, \n      ElementQuery, \n      ElementQueryAll, \n      InnerHTMLElementQuery, \n      LivelySearch,\n      LivelyOpen,\n      LivelyBrowse,\n      LivelyWikipedia,\n      LivelyEdit,\n      CachedRequest,\n      StringScheme,\n      NumberScheme,\n      DateScheme,\n      BooleanScheme,\n      Lively4URLScheme,\n      GSScheme_Stub,\n      LocalStorageFileSystemScheme,\n    ].forEach(scheme => this.register(scheme));\n  }\n  \n  static url(request) {\n    if (request && request.url) {\n      return request.url.toString()\n    } else {\n      return request.toString()\n    }\n  }\n  \n  // #Refactor schemeFor\n  static schemaFor(url) {\n    var m = url.match(/^([A-Za-z0-9]+):\\/?\\/?/) // \n    if (!m || !this.schemas) return\n    return this.schemas[m[1]]  \n  }\n  \n  static register(scheme) {\n    if (!this.schemas) this.schemas = {};\n    this.schemas[scheme.scheme] = scheme\n  }\n  \n  static handle(request, options) {\n    var url = this.url(request)\n    var schema = PolymorphicIdentifier.schemaFor(url)\n    if (!schema) return\n    var handler = new schema(url)\n    handler.result = handler.handle(options)\n    return handler\n  }  \n}\n\n\n// overwriting \"fetch\" instead doing it in the service worker has the advantage \n// of havving access to the browser, which we would have to implement through an additional \n// channel back... \n// And we do it because we can support arbitrary URLs that way and don't have to missuse HTTP // requests to https://lively4/\n\n// ContextJS seems to have a problem with this.. so we do it manaally\n\n\nif (self.lively4fetchHandlers) {\n  \n  // get rid of old mes?\n  debugger\n  debugger\n  self.lively4fetchHandlers = self.lively4fetchHandlers\n    .filter(ea => !ea.isPolymorphicIdentifierHandler)\n  \n  self.lively4fetchHandlers.push(PolymorphicIdentifier)  \n\n}\n\n// if (!window.originalFetch) window.originalFetch = window.fetch\n// window.fetch = async function(request, options, ...rest) {\n//   var handler = PolymorphicIdentifier.handle(request, options)\n//   if (handler) return handler.result;\n//   // #TODO: lazy loading of schemes should go here\n//   return window.originalFetch.apply(window, [request, options, ...rest])\n// }\n\n\n\n\nif (!navigator.serviceWorker) {\n  console.warn(\"POID... could not register message handler with no-existing service worker\")\n} else {\n  lively.removeEventListener(\"poid\", navigator.serviceWorker)\n  lively.addEventListener(\"poid\", navigator.serviceWorker, \"message\", async (evt) => {\n    try {\n      if(!evt.data.name || !evt.data.name.match('swx:pi:')) return; // not for me\n        \n      let m = evt.data.path.match(/^\\/([a-zA-Z0-9]+)(?:\\/(.*))?$/)\n      if (!m) {\n        debugger\n        throw new Error(\"Requested path does not fit a scheme! path='\" + evt.data.path +\"'\")        \n      }\n      let url= m[1] + \"://\" + m[2]    \n      if (!evt.ports[0]) {\n        console.log(\"poid.js got message... but could not answer\")\n        return \n      }\n      if(evt.data.name == 'swx:pi:GET') {\n        evt.ports[0].postMessage({content: await fetch(url).then(r => r.blob())}); \n      } else if(evt.data.name == 'swx:pi:PUT') {\n        evt.ports[0].postMessage({\n          content: await fetch(url, {\n            method: \"PUT\", \n            body: event.data.content\n          }).then(r => r.blob())}); \n      } else if(evt.data.name == 'swx:pi:OPTIONS') {\n        evt.ports[0].postMessage({content: await fetch(url, {\n          method: \"OPTIONS\"\n        }).then(r => r.blob())}); \n      }\n    } catch(err) {\n      evt.ports[0].postMessage({error: err});\n    }\n  });\n}\n\n\nPolymorphicIdentifier.load()\n\n// window.fetch  = window.originalFetch\n// fetch(\"https://lively-kernel.org/lively4/lively4-jens/README.md\")t\n\n\n\n\n"]}