Packages
plinth
0.5.9
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Bindings to Node.js and browser platform APIs
Current section
Files
Jump to
Current section
Files
src/service_worker_ffi.mjs
import { Ok, Error } from "./gleam.mjs";
export function self() {
const s = globalThis
if (s.ServiceWorkerGlobalScope && s instanceof ServiceWorkerGlobalScope) {
return new Ok(s)
}
return new Error("nope")
}
export async function skipWaiting(self) {
return await self.skipWaiting()
}
export function scriptURL(self) {
return self.serviceWorker.scriptURL;
}
export function origin(self) {
return self.origin;
}
export function addFetchListener(self, handler) {
self.addEventListener("fetch", handler)
}
export function addActivateListener(self, handler) {
self.addEventListener("activate", handler)
}
export async function doClaim(self) {
self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim());
});
}
export function fetchEventClient(event) {
return event.client
}
export function onFullMessage(thing, callback) {
thing.addEventListener("message", function (message) {
callback(message);
});
}
export function onMessage(callback) {
window.navigator.serviceWorker.addEventListener("message", function (message) {
callback(message.data);
});
}
export function clientId(event) {
return event.clientId
}
export function request(event) {
return event.request
}
export function respondWith(event, response) {
try {
return new Ok(event.respondWith(response))
} catch (error) {
return new Error(error.toString())
}
}
export function resultingClientId(event) {
return event.resultingClientId
}
export function frameType(client) {
return client.frameType
}
export async function clientGet(self, id) {
const client = await self.clients.get(id)
if (client) {
return new Ok(client)
}
return new Error()
}
export async function openWindow(self, url) {
return await self.clients.openWindow(url)
}
export async function register(scriptURL) {
try {
return new Ok(await navigator.serviceWorker.register(scriptURL))
} catch (error) {
return new Error(error.toString())
}
}
export async function ready() {
return navigator.serviceWorker.ready
}
export function active(registration) {
const serviceWorker = registration.active
if (serviceWorker) {
return new Ok(serviceWorker)
} else {
return new Error()
}
}
export function installing(registration) {
const serviceWorker = registration.installing
if (serviceWorker) {
return new Ok(serviceWorker)
} else {
return new Error()
}
}
export function waiting(registration) {
const serviceWorker = registration.waiting
if (serviceWorker) {
return new Ok(serviceWorker)
} else {
return new Error()
}
}
// TODO remove
export function requestURL(request) {
return request.url
}
export function redirectResponse(url) {
return Response.redirect(url)
}
export function okResponse(body) {
return new Response(body)
}