sw.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* globals clients */
  2. const fileCache = Object.create(null)
  3. function getCache (name) {
  4. if (!fileCache[name]) {
  5. fileCache[name] = Object.create(null)
  6. }
  7. return fileCache[name]
  8. }
  9. self.addEventListener('install', (event) => {
  10. console.log('Installing Uppy Service Worker...')
  11. event.waitUntil(Promise.resolve()
  12. .then(() => self.skipWaiting()))
  13. })
  14. self.addEventListener('activate', (event) => {
  15. event.waitUntil(self.clients.claim())
  16. })
  17. function sendMessageToAllClients (msg) {
  18. clients.matchAll().then((clients) => {
  19. clients.forEach((client) => {
  20. client.postMessage(msg)
  21. })
  22. })
  23. }
  24. function addFile (store, file) {
  25. getCache(store)[file.id] = file.data
  26. console.log('Added file blob to service worker cache:', file.data)
  27. }
  28. function removeFile (store, fileID) {
  29. delete getCache(store)[fileID]
  30. console.log('Removed file blob from service worker cache:', fileID)
  31. }
  32. function getFiles (store) {
  33. sendMessageToAllClients({
  34. type: 'uppy/ALL_FILES',
  35. store: store,
  36. files: getCache(store)
  37. })
  38. }
  39. self.addEventListener('message', (event) => {
  40. switch (event.data.type) {
  41. case 'uppy/ADD_FILE':
  42. addFile(event.data.store, event.data.file)
  43. break
  44. case 'uppy/REMOVE_FILE':
  45. removeFile(event.data.store, event.data.fileID)
  46. break
  47. case 'uppy/GET_FILES':
  48. getFiles(event.data.store)
  49. break
  50. }
  51. })