or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

examples

edge-cases.mdreal-world-scenarios.md
index.md
tile.json

service-worker.mddocs/reference/

Service Worker

Access build artifacts, static files, and prerendered pages in service workers.

Capabilities

Build Artifacts

// From '$service-worker'
const base: string;
const build: string[];
const files: string[];
const prerendered: string[];
const version: string;

Usage:

// src/service-worker.ts
import { build, files, prerendered, version } from '$service-worker';

const CACHE_NAME = `cache-${version}`;
const ASSETS = [...build, ...files, ...prerendered];

self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(CACHE_NAME).then((cache) => {
      return cache.addAll(ASSETS);
    })
  );
});

self.addEventListener('activate', (event) => {
  event.waitUntil(
    caches.keys().then((keys) => {
      return Promise.all(
        keys
          .filter((key) => key !== CACHE_NAME)
          .map((key) => caches.delete(key))
      );
    })
  );
});

self.addEventListener('fetch', (event) => {
  if (event.request.method !== 'GET') return;

  event.respondWith(
    caches.match(event.request).then((cached) => {
      return cached || fetch(event.request);
    })
  );
});

Notes

  • Only available in src/service-worker.ts (or .js)
  • base: The base path of the deployment (equivalent to config.kit.paths.base)
  • build: App build files (JS, CSS)
  • files: Static files from static/ directory
  • prerendered: Prerendered page paths
  • version: App version from config.kit.version.name
  • All paths are absolute (start with /)
  • Use version for cache busting
  • Service worker must be enabled in config: config.kit.serviceWorker.register = true
  • Service worker file must be at src/service-worker.ts
  • Note: There is a base but no assets in service workers, since service workers cannot be used if config.kit.paths.assets is specified