{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/client/files-caches.js"],"names":["updateCachedFilesList","list","lively4fetchLog","filter","ea","method","url","match","lively4url","map","replace","uniq","sort","fetch","body","join","purgeTranspiledFiles","transpiledFiles","walkDir","log","eaURL","defaultFileList","headers","filelist","then","r","json","invalidateTranspiledFiles","files","Map","file","contents","path","name","set","transpiledPath","transpiled","get","modified","jsURL","mapURL","invalidateOptionsFiles","optionsPath","opotionsFile","optionsURL","ensureBootlistOptionsFiles","bootfiles","text","split","optionsContents","nocommit","console","Files","self","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  var list = self.lively4fetchLog.filter(ea => ea.method == \"GET\")\n              .filter(ea => ea.url.match(lively4url))\n              .filter(ea => !ea.url.match(\"lively4bundle.zip\")) \n              .map(ea => ea.url.replace(lively4url + \"/\",\"\"))\n              ::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"]}