{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-livelyenergy/src/client/poid.js"],"names":["FileIndex","FileCache","ValueResponse","constructor","value","status","_value","object","text","json","jsonString","JSON","stringify","parse","blob","Error","Scheme","url","scheme","GET","Response","PUT","OPTIONS","POST","DELETE","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","PolymorphicIdentifier","isPolymorphicIdentifierHandler","load","forEach","register","schemaFor","schemas","schema","handler","navigator","serviceWorker","removeEventListener","addEventListener","evt","data","path","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  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    }\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\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\n\nexport default class PolymorphicIdentifier {\n  \n  get isPolymorphicIdentifierHandler() {\n    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    ].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"]}