Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
NebulaServices
GitHub Repository: NebulaServices/Nebula
Path: blob/main/public/sw.js
976 views
1
importScripts("/uv/uv.bundle.js");
2
importScripts("/uv/uv.config.js");
3
//importScripts('/scram/scramjet.shared.js');
4
//importScripts('/scram/scramjet.worker.js');
5
importScripts('/scram/scramjet.all.js');
6
importScripts("/workerware/workerware.js");
7
importScripts(__uv$config.sw || "/uv/uv.sw.js");
8
const uv = new UVServiceWorker();
9
const ww = new WorkerWare({ debug: false });
10
const { ScramjetServiceWorker } = $scramjetLoadWorker();
11
const sj = new ScramjetServiceWorker();
12
(async function () {
13
await sj.loadConfig();
14
})();
15
//me when Firefox (thanks vk6)
16
if (navigator.userAgent.includes("Firefox")) {
17
Object.defineProperty(globalThis, "crossOriginIsolated", {
18
value: true,
19
writable: true
20
});
21
}
22
23
//where we handle our plugins!!!
24
self.addEventListener("message", function (event) {
25
console.log(event.data);
26
uv.config.inject = [];
27
//loop over the required data (we don't verify here as types will take care of us :D)
28
event.data.forEach((data) => {
29
if (data.remove) {
30
if (data.type === "page") {
31
const idx = uv.config.inject.indexOf(data.host);
32
uv.config.inject.splice(idx, 1);
33
} else if (data.type === "serviceWorker") {
34
ww.deleteByName(data.name);
35
}
36
} else {
37
if (data.type === "page") {
38
uv.config.inject.push({
39
host: data.host,
40
html: data.html,
41
injectTo: data.injectTo
42
});
43
} else if (data.type === "serviceWorker") {
44
const wwFunction = eval(data.function);
45
ww.use({
46
function: wwFunction ? wwFunction : new Function(data.function),
47
name: data.name,
48
events: data.events
49
});
50
} else {
51
console.error("NO type exists for that. Only serviceWorker & page exist.");
52
return;
53
}
54
}
55
});
56
});
57
58
self.addEventListener("fetch", function (event) {
59
event.respondWith(
60
(async () => {
61
const wwRes = await ww.run(event)();
62
if (wwRes.includes(null)) {
63
return;
64
}
65
if (event.request.url.startsWith(location.origin + __uv$config.prefix)) {
66
return await uv.fetch(event);
67
}
68
else if (sj.route(event)) {
69
return await sj.fetch(event);
70
}
71
else {
72
return await fetch(event.request);
73
}
74
})()
75
);
76
});
77
78