{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stephelm/src/client/files-caches.js"],"names":["Files","uniq","self","lively4fetchLog","updateCachedFilesList","oldlist","fetch","lively4url","then","r","text","split","newlist","Array","from","filter","ea","method","map","url","startsWith","match","replace","list","concat","sort","body","join","purgeTranspiledFiles","transpiledFiles","walkDir","log","eaURL","defaultFileList","headers","filelist","json","invalidateTranspiledFiles","files","Map","file","contents","path","name","set","transpiledPath","transpiled","get","modified","jsURL","mapURL","invalidateOptionsFiles","optionsPath","opotionsFile","optionsURL","ensureBootlistOptionsFiles","bootfiles","optionsContents","nocommit","console","navigator","serviceWorker","warn","lively","removeEventListener","addEventListener","evt","data","cachedFileMap","push","time","performance","now","err","error"],"mappings":"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","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"]}