Packages
plinth
0.10.2
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 { Result$Ok, Result$Error } from "./gleam.mjs";
export function self() {
const s = globalThis
if (s.ServiceWorkerGlobalScope && s instanceof ServiceWorkerGlobalScope) {
return Result$Ok(s)
}
return Result$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 Result$Ok(event.respondWith(response))
} catch (error) {
return Result$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 Result$Ok(client)
}
return Result$Error()
}
export async function openWindow(self, url) {
return await self.clients.openWindow(url)
}
export async function register(scriptURL) {
try {
return Result$Ok(await navigator.serviceWorker.register(scriptURL))
} catch (error) {
return Result$Error(error.toString())
}
}
export async function ready() {
return navigator.serviceWorker.ready
}
export function active(registration) {
const serviceWorker = registration.active
if (serviceWorker) {
return Result$Ok(serviceWorker)
} else {
return Result$Error()
}
}
export function installing(registration) {
const serviceWorker = registration.installing
if (serviceWorker) {
return Result$Ok(serviceWorker)
} else {
return Result$Error()
}
}
export function waiting(registration) {
const serviceWorker = registration.waiting
if (serviceWorker) {
return Result$Ok(serviceWorker)
} else {
return Result$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)
}