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