sw.js 1.6 KB

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