UNPKG

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