sw.js 1.4 KB

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