{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-particles/src/client/files-caches.js"],"names":["Files","uniq","ensureBootlistOptionsFiles","invalidateOptionsFiles","invalidateTranspiledFiles","defaultFileList","purgeTranspiledFiles","updateCachedFilesList","self","lively4fetchLog","oldlist","fetch","lively4url","then","r","text","split","newlist","Array","from","filter","ea","method","map","url","startsWith","match","replace","list","concat","sort","body","join","transpiledFiles","walkDir","log","eaURL","headers","filelist","json","files","Map","file","contents","path","name","set","transpiledPath","transpiled","get","modified","jsURL","mapURL","optionsPath","opotionsFile","optionsURL","bootfiles","optionsContents","nocommit","console","navigator","serviceWorker","warn","lively","removeEventListener","addEventListener","evt","data","cachedFileMap","push","time","performance","now","err","error"],"mappings":";;;;;;AAAOA,W;;AAICC,U,UAAAA,I;;;;;;;;;;;gDAuGcC,2D;;;;;;;;;;;;;;4CA1BAC,uD;;;;;;;;;;;;;;+CA/BAC,0D;;;;;;;;;;;;;;AAVbC,0D;;;;;;;;;;;;;0CAVaC,qD;;;;;;;;;;;;;;2CAvBAC,sD;;;;;;;;;;;;;;AAPfP,gD;;;;;;;;;AAEPQ,WAAKC,eAAL,GAAuBD,KAAKC,eAAL,IAAwB,EAA/C;;;;;;;;AAEQR,+C;;;;;;;;;AAER;AACO,qBAAeM,qBAAf,GAAuC;AAAA;;AAE5C,YAAIG,UAAU,CAAC,MAAMC,MAAMC,aAAa,uBAAnB,EACJC,IADI,CACCC,KAAKA,EAAEC,IAAF,EADN,CAAP,EACwBC,KADxB,CAC8B,IAD9B,CAAd;;AAIA,YAAIC,UAAUC,MAAMC,IAAN,CAAWX,KAAKC,eAAL,CAAqBW,MAArB,CAA4BC,MAAMA,GAAGC,MAAH,IAAa,KAA/C,CAAX,EACDC,GADC,CACGF,MAAMA,GAAGG,GADZ,EAEDJ,MAFC,CAEMC,MAAMA,GAAGI,UAAH,CAAcb,UAAd,CAFZ,EAGDQ,MAHC,CAGMC,MAAM,CAACA,GAAGK,KAAH,CAAS,mBAAT,CAHb,EAIDH,GAJC,CAIGF,MAAMA,GAAGM,OAAH,CAAWf,aAAa,GAAxB,EAA6B,EAA7B,CAJT,CAAd;;AAMA,YAAIgB,OAAO,qBAAQC,MAAR,CAAenB,OAAf,GAAyBT,IAAzB,kBAAgC6B,IAAhC,EAAX;;AAEA,cAAMnB,MAAMC,aAAa,uBAAnB,EAA4C;AAChDU,kBAAQ,KADwC;AAEhDS,gBAAMH,KAAKI,IAAL,CAAU;AAChB;AADM,WAF0C,EAA5C,CAAN;AAKA,eAAOJ,IAAP;AACD;;;;AAGM,qBAAetB,oBAAf,GAAsC;AAC3C,YAAI2B,kBAAkB,MAAMjC,MAAMkC,OAAN,CAActB,aAAa,eAA3B,CAA5B;AACA,YAAIuB,MAAM,EAAV;AACA,aAAI,IAAIC,KAAR,IAAiBH,eAAjB,EAAkC;AAChCE,iBAAO,MAAMxB,MAAMyB,KAAN,EAAa,EAACd,QAAQ,QAAT,EAAb,CAAb;AACD;AACD;AACA,eAAOW,gBAAgBV,GAAhB,CAAoBF,MAAMA,GAAGM,OAAH,CAAWf,aAAa,eAAxB,EAAyC,EAAzC,CAA1B,CAAP;AACD;;;;AAED,eAASP,eAAT,GAA2B;AACzB,eAAOM,MAAMC,aAAa,GAAnB,EAAwB;AAC7BU,kBAAQ,SADqB;AAE7Be,mBAAS;AACPC,sBAAU;AADH;AAFoB,SAAxB,EAKJzB,IALI,CAKCC,KAAKA,EAAEyB,IAAF,EALN,CAAP;AAMD;;AAGM,qBAAenC,yBAAf,CAAyCoC,KAAzC,EAAgD;AACrDA,gBAAQA,UAAS,MAAMnC,iBAAf,CAAR;;AAEA,YAAI8B,MAAM,EAAV;AACA,YAAIZ,MAAM,IAAIkB,GAAJ,EAAV,CAJqD,CAIjC;AACpB,aAAI,IAAIC,IAAR,IAAgBF,MAAMG,QAAtB,EAAgC;AAC9B,cAAIC,OAAOF,KAAKG,IAAL,CAAUlB,OAAV,CAAkB,OAAlB,EAA2B,EAA3B,CAAX;AACA,cAAIiB,KAAKlB,KAAL,CAAW,iBAAX,CAAJ,EAAmC;AACjCH,gBAAIuB,GAAJ,CAAQF,IAAR,EAAcF,IAAd;AACD;AACF;AACD,aAAI,IAAIA,IAAR,IAAgBF,MAAMG,QAAtB,EAAgC;AAC9B,cAAIC,OAAOF,KAAKG,IAAL,CAAUlB,OAAV,CAAkB,OAAlB,EAA0B,EAA1B,CAAX;AACA,cAAIiB,KAAKlB,KAAL,CAAW,OAAX,CAAJ,EAAyB;AACvB,gBAAIqB,iBAAiB,iBAAiBH,KAAKjB,OAAL,CAAa,KAAb,EAAmB,GAAnB,CAAtC;AACA,gBAAIqB,aAAazB,IAAI0B,GAAJ,CAAQF,cAAR,CAAjB;AACA,gBAAIC,UAAJ,EAAgB;AACd,kBAAIN,KAAKQ,QAAL,GAAgBF,WAAWE,QAA/B,EAAyC;AACvC,oBAAIC,QAAQvC,aAAa,GAAb,GAAmBmC,cAA/B;AACA,oBAAIK,SAASxC,aAAa,GAAb,GAAmBmC,cAAnB,GAAoC,WAAjD;AACAZ,uBAAO,YAAYgB,KAAZ,GAAoB,IAA3B;AACAhB,uBAAO,YAAYiB,MAAZ,GAAqB,IAA5B;AACAzC,sBAAMwC,KAAN,EAAa,EAAC7B,QAAQ,QAAT,EAAb;AACAX,sBAAMyC,MAAN,EAAc,EAAC9B,QAAQ,QAAT,EAAd;AACD;AACF;AACF;AACF;AACD,eAAOa,GAAP;AACD;;;;AAEM,qBAAehC,sBAAf,CAAsCqC,KAAtC,EAA6C;AAClDA,gBAAQA,UAAS,MAAMnC,iBAAf,CAAR;;AAEA,YAAI8B,MAAM,EAAV;AACA,YAAIZ,MAAM,IAAIkB,GAAJ,EAAV,CAJkD,CAI9B;AACpB,aAAI,IAAIC,IAAR,IAAgBF,MAAMG,QAAtB,EAAgC;AAC9B,cAAIC,OAAOF,KAAKG,IAAL,CAAUlB,OAAV,CAAkB,OAAlB,EAA2B,EAA3B,CAAX;AACA,cAAIiB,KAAKlB,KAAL,CAAW,cAAX,CAAJ,EAAgC;AAC9BH,gBAAIuB,GAAJ,CAAQF,IAAR,EAAcF,IAAd;AACD;AACF;AACD,aAAI,IAAIA,IAAR,IAAgBF,MAAMG,QAAtB,EAAgC;AAC9B,cAAIC,OAAOF,KAAKG,IAAL,CAAUlB,OAAV,CAAkB,OAAlB,EAA0B,EAA1B,CAAX;AACE,cAAI0B,cAAc,cAAcT,KAAKjB,OAAL,CAAa,KAAb,EAAmB,GAAnB,CAAhC;AACA,cAAI2B,eAAe/B,IAAI0B,GAAJ,CAAQI,WAAR,CAAnB;AACA,cAAIC,YAAJ,EAAkB;AAChB,gBAAIZ,KAAKQ,QAAL,GAAgBI,aAAaJ,QAAjC,EAA2C;AACzC,kBAAIK,aAAa3C,aAAa,GAAb,GAAmByC,WAApC;AACAlB,qBAAO,YAAYoB,UAAZ,GAAyB,IAAhC;AACA5C,oBAAM4C,UAAN,EAAkB,EAACjC,QAAQ,QAAT,EAAlB;AACD;AACF;AAAG;AACR,eAAOa,GAAP;AACD;;;;AAGM,qBAAejC,0BAAf,GAA4C;AACjD,YAAIsD,YAAY,CAAC,MAAM7C,MAAMC,aAAY,GAAZ,GAAkB,sBAAxB,EAAgDC,IAAhD,CAAqDC,KAAKA,EAAEC,IAAF,EAA1D,CAAP,EAA4EC,KAA5E,CAAkF,IAAlF,CAAhB;AACA,aAAM,IAAIK,EAAV,IAAgBmC,SAAhB,EAA2B;AACzB,cAAIC,kBAAkB,MAAM9C,MAAMU,EAAN,EAAU;AACpCC,oBAAQ;AAD4B,WAAV,EAEzBT,IAFyB,CAEpBC,KAAKA,EAAEC,IAAF,EAFe,CAA5B;;AAIA,cAAIwC,aAAa3C,aAAa,YAAb,GAA4BS,GAAGM,OAAH,CAAW,KAAX,EAAkB,GAAlB,CAA7C;AACA,gBAAMhB,MAAM4C,UAAN,EAAkB;AACtBjC,oBAAQ,KADc;AAEtBS,kBAAM0B,eAFgB;AAGtBpB,qBAAS;AACPqB,wBAAU;AADH;AAHa,WAAlB,CAAN;AAOAC,kBAAQxB,GAAR,CAAY,wDAAwDd,EAApE;AACD;AACF;;AAID;;;;;AAGA,UAAI,CAACuC,UAAUC,aAAf,EAA8B;AAC5BF,gBAAQG,IAAR,CAAa,+EAAb;AACD,OAFD,MAEO;AACLC,eAAOC,mBAAP,CAA2B,OAA3B,EAAoCJ,UAAUC,aAA9C;AACAE,eAAOE,gBAAP,CAAwB,OAAxB,EAAiCL,UAAUC,aAA3C,EAA0D,SAA1D,EAAqE,MAAOK,GAAP,IAAe;AAClF,cAAI;AACF,gBAAGA,IAAIC,IAAJ,CAAStB,IAAT,IAAiB,kBAApB,EAAwC;AACtC,kBAAItB,MAAMvB,MAAMoE,aAAN,EAAV;AACAT,sBAAQxB,GAAR,CAAY,4BAA4B+B,IAAIC,IAAJ,CAAS7C,MAArC,GAA8C,GAA9C,GAAmD4C,IAAIC,IAAJ,CAAS3C,GAAxE;AACAhB,mBAAKC,eAAL,CAAqB4D,IAArB,CAA0B;AACxBC,sBAAMC,YAAYC,GAAZ,EADkB;AAExBlD,wBAAQ4C,IAAIC,IAAJ,CAAS7C,MAFO;AAGxBE,qBAAK0C,IAAIC,IAAJ,CAAS3C;AAHU,eAA1B;AAKD;AAEF,WAXD,CAWE,OAAMiD,GAAN,EAAW;AACXd,oBAAQe,KAAR,CAAc,8CAAd,EAA8DD,GAA9D;AACD;AACF,SAfD;AAgBD","file":"files-caches.js","sourcesContent":["import Files from \"./files.js\"\n\nself.lively4fetchLog = self.lively4fetchLog || []\n\nimport {uniq} from \"utils\"\n\n// _.uniq(that.value.split(\"\\n\")).join(\"\\n\")\nexport async function updateCachedFilesList() {\n  \n  var oldlist = (await fetch(lively4url + \"/.lively4bootfilelist\")\n                  .then(r => r.text())).split(\"\\n\")\n  \n  \n  var newlist = Array.from(self.lively4fetchLog.filter(ea => ea.method == \"GET\"))\n              .map(ea => ea.url)\n              .filter(ea => ea.startsWith(lively4url))\n              .filter(ea => !ea.match(\"lively4bundle.zip\")) \n              .map(ea => ea.replace(lively4url + \"/\", \"\"))\n\n  var list = newlist.concat(oldlist)::uniq().sort()\n  \n  await fetch(lively4url + \"/.lively4bootfilelist\", {\n    method: \"PUT\",\n    body: list.join(\"\\n\")\n    //JSON.stringify(list).replace(/\",/g,'\",\\n') // just a bit pretty print\n  })\n  return list\n}\n\n\nexport async function purgeTranspiledFiles() {\n  var transpiledFiles = await Files.walkDir(lively4url + \"/.transpiled/\")\n  var log = \"\"\n  for(var eaURL of transpiledFiles) {\n    log += await fetch(eaURL, {method: \"DELETE\"})\n  }\n  // should we make it live?\n  return transpiledFiles.map(ea => ea.replace(lively4url + \"/.transpiled/\", \"\"))\n}\n\nfunction defaultFileList() {\n  return fetch(lively4url + \"/\", {\n    method: \"OPTIONS\",\n    headers: {\n      filelist: true\n    }\n  }).then(r => r.json())\n}\n\n\nexport async function invalidateTranspiledFiles(files) {\n  files = files || await defaultFileList()\n  \n  var log = \"\"\n  var map = new Map() // make file lookup faster\n  for(let file of files.contents) {\n    let path = file.name.replace(/^\\.\\//, \"\")\n    if (path.match(/^\\.transpiled\\//)) {\n      map.set(path, file)\n    }\n  }\n  for(let file of files.contents) {\n    var path = file.name.replace(/^\\.\\//,\"\")\n    if (path.match(/\\.js$/)) {\n      var transpiledPath = \".transpiled/\" + path.replace(/\\//g,\"_\")\n      var transpiled = map.get(transpiledPath)\n      if (transpiled) {\n        if (file.modified > transpiled.modified) {\n          var jsURL = lively4url + \"/\" + transpiledPath\n          var mapURL = lively4url + \"/\" + transpiledPath + \".map.json\"\n          log += \"delete \" + jsURL + \"\\n\"\n          log += \"delete \" + mapURL + \"\\n\"\n          fetch(jsURL, {method: \"DELETE\"})\n          fetch(mapURL, {method: \"DELETE\"})\n        }\n      }\n    }\n  }\n  return log\n}\n\nexport async function invalidateOptionsFiles(files) {\n  files = files || await defaultFileList()\n  \n  var log = \"\"\n  var map = new Map() // make file lookup faster\n  for(let file of files.contents) {\n    let path = file.name.replace(/^\\.\\//, \"\")\n    if (path.match(/^\\.options\\//)) {\n      map.set(path, file)\n    }\n  }\n  for(let file of files.contents) {\n    var path = file.name.replace(/^\\.\\//,\"\")\n      var optionsPath = \".options/\" + path.replace(/\\//g,\"_\")\n      var opotionsFile = map.get(optionsPath)\n      if (opotionsFile) {\n        if (file.modified > opotionsFile.modified) {\n          var optionsURL = lively4url + \"/\" + optionsPath\n          log += \"delete \" + optionsURL + \"\\n\"\n          fetch(optionsURL, {method: \"DELETE\"})\n        } \n      }  }\n  return log\n}\n\n\nexport async function ensureBootlistOptionsFiles() {\n  var bootfiles = (await fetch(lively4url +\"/\" + \".lively4bootfilelist\").then(r => r.text())).split(\"\\n\")\n  for  (var ea of bootfiles) {\n    var optionsContents = await fetch(ea, {\n      method: \"OPTIONS\"\n    }).then(r => r.text())\n    \n    var optionsURL = lively4url + \"/.options/\" + ea.replace(/\\//g, \"_\")\n    await fetch(optionsURL, {\n      method: \"PUT\",\n      body: optionsContents, \n      headers: {\n        nocommit: true  \n      }\n    })\n    console.log(\"[files-caches] ensureBootlistOptionsFiles: updated \" + ea)\n  }\n}\n\n\n\n// updateCachedFilesList()\n\n\nif (!navigator.serviceWorker) {\n  console.warn(\"[files]... could not register message handler with no-existing service worker\")\n} else {\n  lively.removeEventListener(\"files\", navigator.serviceWorker)\n  lively.addEventListener(\"files\", navigator.serviceWorker, \"message\", async (evt) => {\n    try {\n      if(evt.data.name == 'swx:fech:request') {\n        var map = Files.cachedFileMap()\n        console.log(\"[files] fetch request: \" + evt.data.method + \" \"+ evt.data.url)\n        self.lively4fetchLog.push({\n          time: performance.now(),\n          method: evt.data.method,\n          url: evt.data.url\n        }) \n      }\n\n    } catch(err) {\n      console.error(\"[files] error during swx message handling...\", err)\n    }\n  });\n}\n"]}