sw.js 1.5 KB

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