kit icon indicating copy to clipboard operation
kit copied to clipboard

feat: service worker rendering

Open thomasfosterau opened this issue 6 months ago • 2 comments

closes #3498

⚠️ Work in Progress (feedback/suggestions/comments welcome) ⚠️

This PR is an attempt to introduce a minimally-viable version of rendering in Service Workers. It uses the API previously attempted in #5690 and which I’ve described in the discussion #13784.

Currently I am trying to implement rendering in service workers by duplicating and modifying the server runtime and then using a heavily refactored version of the Cloudflare adapter to expose a respond(event: FetchEvent): Promise<Response> function in $service-worker. The service-worker runtime delegates all server loads, actions and endpoints to the server, leaving it up to universal load functions to handle timeouts/connectivity/etc. (as they should already do, right?).

Some unresolved issues at this point:

  • Does there need to be a hooks file for the service worker and server to share, e.g. hooks.ssr.{js,ts}? Maybe a hooks.worker.{js,ts}?
  • How should the respond() function handle requests for assets?
  • How much code could/should the server and service worker runtimes share?

Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

  • [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • [x] This message body should clearly illustrate what problems it solves.
  • [ ] Ideally, include a test that fails without this PR but passes with it.

Tests

  • [ ] Run the tests with pnpm test and lint the project with pnpm lint and pnpm check

Changesets

  • [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpm changeset and following the prompts. Changesets that add features should be minor and those that fix bugs should be patch. Please prefix changeset messages with feat:, fix:, or chore:.

Edits

  • [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed.

thomasfosterau avatar May 15 '25 11:05 thomasfosterau

🦋 Changeset detected

Latest commit: a71ead8b386e91f52e652fbb50f3280860d49f6d

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@sveltejs/kit Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

changeset-bot[bot] avatar May 15 '25 11:05 changeset-bot[bot]

Preview: https://svelte-dev-git-preview-kit-13791-svelte.vercel.app/

svelte-docs-bot[bot] avatar May 15 '25 11:05 svelte-docs-bot[bot]