{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/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","ok","message","fail","response","content","contentType","headers","undefined","LivelyFile","pathToFile","fileURL","selector","replace","decodeURI","element","document","body","subSelector","split","parentElement","querySelector","e","console","warn","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","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","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","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","sub","endsWith","stats","DelegationScheme","delegatedURL","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  /*MD ## response utils \n  intended as convenience functions for subclasses\n  MD*/\n\n  ok(message) {\n    return new Response(message, {status: 200});\n  }\n  \n  fail(message) {\n    return new Response(message, {status: 400});\n  }\n\n  response(content, contentType) {\n    return new Response(content, {\n      headers: {\n        \"content-type\": contentType\n      },\n      status: 200\n    });\n  }\n\n  json(json) {\n    var content = JSON.stringify(json, undefined, 2);\n    return this.response(content, \"application/json\");\n  }\n  \n  text(text, contentType = \"text\") {\n    return this.response(text, contentType);\n  }\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.replace(/:/ig, '__') // 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    const parent = path.replace(/[^/]+\\/?$/, '')\n    \n    if (typeof entry === 'string') {\n      return {\n        type: 'file',\n        name: currentPath,\n        parent\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        parent\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  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    // lively.notify(this.url)\n    if (!this.url.startsWith('lsfs://')) {\n      return this.fail(`invalid path given. paths start with \"${this.lsfsKey}\"`);\n    }\n    \n    try {\n      const stats = this.fs.statEntry(this.path)\n      stats.parent = 'lsfs://' + stats.parent//.replace(/\\/$/ig, '')\n      // delete stats.parent\n      // lively.notify(stats.parent)\n      // delete stats.parent\n      return this.json(stats)\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 # DelegationScheme\n\n- simply delegates the request to the url given as its path\n- useful to, for example, break the dependency between two files tracked by SystemJS (using this scheme, you can update the imported file without triggering a rerun of the dependent file)\n\n#### Example\n<button onclick='System.import(\"src/client/bound-eval.js\").then(m => m.default(lively.query(this, \"#example\").innerText))'>run example</button>\n\n<code id='example'>lively.openBrowser('delegate:https://lively-kernel.org/lively4/aexpr/README.md')</code>\n\n MD*/\nexport class DelegationScheme extends Scheme {\n\n  get scheme() {\n    return \"delegate\"\n  }\n  \n  get delegatedURL() {\n    return new URL(this.url).pathname \n  }\n\n  async handle(options) {\n    return fetch(this.delegatedURL, options);\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      DelegationScheme,\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  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"]}