mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-19 01:24:18 +00:00
68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
// This service worker is needed for Golden Retriever plugin,
|
||
// only include if you’ve enabled it
|
||
// https://uppy.io/docs/golden-retriever/
|
||
|
||
/* globals clients */
|
||
/* eslint-disable no-restricted-globals */
|
||
|
||
const fileCache = Object.create(null)
|
||
|
||
function getCache (name) {
|
||
if (!fileCache[name]) {
|
||
fileCache[name] = Object.create(null)
|
||
}
|
||
return fileCache[name]
|
||
}
|
||
|
||
self.addEventListener('install', (event) => {
|
||
console.log('Installing Uppy Service Worker...')
|
||
|
||
event.waitUntil(Promise.resolve()
|
||
.then(() => self.skipWaiting()))
|
||
})
|
||
|
||
self.addEventListener('activate', (event) => {
|
||
event.waitUntil(self.clients.claim())
|
||
})
|
||
|
||
function sendMessageToAllClients (msg) {
|
||
clients.matchAll().then((clients) => {
|
||
clients.forEach((client) => {
|
||
client.postMessage(msg)
|
||
})
|
||
})
|
||
}
|
||
|
||
function addFile (store, file) {
|
||
getCache(store)[file.id] = file.data
|
||
console.log('Added file blob to service worker cache:', file.data)
|
||
}
|
||
|
||
function removeFile (store, fileID) {
|
||
delete getCache(store)[fileID]
|
||
console.log('Removed file blob from service worker cache:', fileID)
|
||
}
|
||
|
||
function getFiles (store) {
|
||
sendMessageToAllClients({
|
||
type: 'uppy/ALL_FILES',
|
||
store,
|
||
files: getCache(store),
|
||
})
|
||
}
|
||
|
||
self.addEventListener('message', (event) => {
|
||
switch (event.data.type) {
|
||
case 'uppy/ADD_FILE':
|
||
addFile(event.data.store, event.data.file)
|
||
break
|
||
case 'uppy/REMOVE_FILE':
|
||
removeFile(event.data.store, event.data.fileID)
|
||
break
|
||
case 'uppy/GET_FILES':
|
||
getFiles(event.data.store)
|
||
break
|
||
|
||
default: throw new Error('unreachable')
|
||
}
|
||
})
|