{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-leo/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","roots","concat","preferences","get","find","eaRoot","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","remainingPath","part","entry","currentPath","shift","setFile","fileName","pop","folder","existFile","deleteFile","deleteEntry","existFolder","createFolder","folderName","deleteFolder","emtryName","statEntry","Object","entries","LocalStorageFileSystemScheme","lsfsKey","initFS","config","defaultConfig","resetFS","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  || 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 roots = [root].concat(lively.preferences.get(\"ExtraSearchRoots\"))\n      var count = 0\n      await FileIndex.current().db.files.each(file => {\n        if (roots.find(eaRoot => file.url.startsWith(eaRoot)) && 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    const remainingPath = path.split('/').filter(part => part !== '')\n    \n    let entry = this.root;\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('/').filter(part => part !== '')\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 (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('/').filter(part => part !== '')\n\n    let file = this.root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\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    this.deleteEntry(path);\n  }\n\n  existFolder(path) {\n    const remainingPath = path.split('/').filter(part => part !== '')\n\n    let folder = this.root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (typeof folder !== 'object') {\n        return false\n      }\n      folder = folder[currentPath];\n    }\n\n    return typeof folder === 'object';\n  }\n\n  createFolder(path) {\n    const remainingPath = path.split('/').filter(part => part !== '')\n    const folderName = remainingPath.pop()\n\n    if (!folderName) {\n      throw new Error('cannot create root');\n    }\n\n    const root = this.root\n    let folder = root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (typeof folder[currentPath] !== 'object') {\n        throw new Error(`${currentPath} is no folder`)\n      }\n      folder = folder[currentPath];\n    }\n    folder[folderName] = {}\n\n    this.root = root;\n  }\n  \n  deleteFolder(path) {\n    this.deleteEntry(path);\n  }\n\n  deleteEntry(path) {\n    const remainingPath = path.split('/').filter(part => part !== '')\n    const emtryName = remainingPath.pop()\n\n    const root = this.root\n    let folder = root;\n    while (remainingPath.length > 0) {\n      let currentPath = remainingPath.shift();\n      if (typeof folder !== 'object') {\n        throw new Error(`${currentPath} is no folder`)\n      }\n      folder = folder[currentPath];\n    }\n\n    delete folder[emtryName];\n    this.root = root;\n  }\n\n\n\n  statEntry(path) {\n    const remainingPath = path.split('/').filter(part => part !== '')\n\n    const root = this.root\n    let entry = root;\n    let currentPath;\n    while (remainingPath.length > 0) {\n      currentPath = remainingPath.shift();\n      if (typeof entry !== 'object') {\n        throw new Error(`${currentPath} is not applied on a folder`)\n      }\n      entry = entry[currentPath];\n    }\n    \n    if (typeof entry === 'string') {\n      return {\n        type: 'file',\n        name: currentPath\n      }\n    }\n\n    if (typeof entry === 'object') {\n      return {\n        type: 'directory',\n        contents: Object.entries(entry).map(([key, value]) => {\n          return {\n            name: key,\n            type: typeof value === 'object' ? 'directory' : 'file'\n          };\n        })\n      }\n    }\n\n    throw new Error(`${entry} is neither a file nor a folder`)\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\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  /*MD ## operations MD*/\n  GET(options) {\n    if (!this.url.startsWith('lsfs://')) {\n      return 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      return 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  OPTIONS() {\n    if (!this.url.startsWith('lsfs://')) {\n      return this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    try {\n      return this.json(this.fs.statEntry(this.path))\n    } catch (e) {\n      return this.fail(`Error in OPTIONS ${this.url}: ${e.message}`)\n    }\n  }\n  \n  MKCOL() {\n    if (!this.url.startsWith('lsfs://')) {\n      return this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    try {\n      this.fs.createFolder(this.path)\n      return this.ok('works!')\n    } catch (e) {\n      return this.fail(`Error in MKCOL ${this.url}: ${e.message}`)\n    }\n  }\n  \n  DELETE() {\n    if (!this.url.startsWith('lsfs://')) {\n      return this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    try {\n      this.fs.deleteEntry(this.path)\n      return this.ok('works!')\n    } catch (e) {\n      return this.fail(`Error in DELETE ${this.url}: ${e.message}`)\n    }\n  }\n  \n  \n  /*MD ## response utils MD*/\n  ok(message) {\n    return new Response(message, {status: 200});\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"]}