{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/client/files-caches.js"],"names":["Files","uniq","ensureBootlistOptionsFiles","invalidateOptionsFiles","invalidateTranspiledFiles","deleteTranspiledFile","getTranspiledPath","deleteAssociatedTranspiledFiles","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","path","substring","indexOf","transpiledPath","undefined","jsURL","mapURL","files","Map","file","contents","name","set","transpiled","get","modified","optionsPath","opotionsFile","optionsURL","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\").then(r => r.text())).split(\"\\n\");\n\n  var newlist = Array.from(self.lively4fetchLog.filter(ea => ea.method == \"GET\")).map(ea => ea.url).filter(ea => ea.startsWith(lively4url)).filter(ea => !ea.match(\"lively4bundle.zip\")).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\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\nexport function deleteAssociatedTranspiledFiles(path) {\n  deleteTranspiledFile(getTranspiledPath(path));\n}\n\nexport function getTranspiledPath(path) {\n  return \".transpiled/\" + (path.substring(path.indexOf(\"src/\"))).replace(/\\//g, \"_\");\n}\n\nfunction deleteTranspiledFile(transpiledPath, log = undefined) {\n  var jsURL = lively4url + \"/\" + transpiledPath;\n  var mapURL = lively4url + \"/\" + transpiledPath + \".map.json\";\n  if(log) {\n    log += \"delete \" + jsURL + \"\\n\";\n    log += \"delete \" + mapURL + \"\\n\";\n  }\n  fetch(jsURL, { method: \"DELETE\" });\n  fetch(mapURL, { method: \"DELETE\" });\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 = getTranspiledPath(path);\n      var transpiled = map.get(transpiledPath);\n      if (transpiled) {\n        if (file.modified > transpiled.modified) {\n          deleteTranspiledFile(transpiledPath, log);\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  }\n  return log;\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// 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    } catch (err) {\n      console.error(\"[files] error during swx message handling...\", err);\n    }\n  });\n}"]}