chore: read options from one module instead of threading it through the server runtime - #16871
Conversation
|
Install the latest version of pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/ecbc666098d5882feb77c26763f9cc6b4795f691Open in |
🦋 Changeset detectedLatest commit: ecbc666 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
6ff5010 to
b4e3291
Compare
|
I do wonder if this is the direction we really want to go in the long run. I think it looks better now, but it really means we just have more mocking to do in the future if we want to unit test this stuff -- i.e. instead of being able to pass |
|
|
b4e3291 to
ecbc666
Compare
e325d7d
into
version-3
) Several `SSROptions` fields are build-time constants that already exist as defines for the client, `__SVELTEKIT_EMBEDDED__` and `__SVELTEKIT_HASH_ROUTING__`. The server took a second route to the same values through `options`, though `app/paths/internal/server.js` already reads `__SVELTEKIT_APP_DIR__`. This moves the server onto those two and adds defines for `csrf_check_origin`, `link_header_preload`, `paths_origin` and `service_worker`. The app's global name was derived in five places: `exports/vite/index.js` twice, `core/env.js` twice, and `runtime/server/utils.js` in `get_global_name`, which read it back out of `SSROptions.version_hash`. Two of them called `hash(config.version.name)` separately. `get_global_name(version_name, dev)` in `core/utils.js` is now the only derivation, and the server reads the result through `__SVELTEKIT_GLOBAL_NAME__`. `SSROptions.version` had no readers at all. `csp`, `csrf_trusted_origins`, `service_worker_options` and `templates` stay put: a define is a textual substitution, so a structured value gets re-inlined at every read. Stacked on #16871.
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to version-3, this PR will be updated.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ `version-3` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `version-3`.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ # Releases ## @sveltejs/adapter-bun@1.0.0-next.1 ### Minor Changes - feat: add a Bun-native adapter with static file serving and single-executable support ([#16695](#16695)) ### Patch Changes - Updated dependencies [[`9b3d195`](9b3d195), [`385d378`](385d378), [`3782448`](3782448), [`d0d3a33`](d0d3a33), [`4b7a483`](4b7a483), [`e325d7d`](e325d7d), [`4f63c79`](4f63c79)]: - @sveltejs/kit@3.0.0-next.25 ## @sveltejs/kit@3.0.0-next.25 ### Minor Changes - feat: add an `applyReroute` helper for adapters that support split serverless function deployments ([#16665](#16665)) ### Patch Changes - chore: build streamed responses from async generators ([#16847](#16847)) - fix: tweak response logging for remote requests ([#16865](#16865)) - fix: discard invalidation results when a navigation completes while they load ([#16852](#16852)) - fix: route dev-server response logging through Vite's logger so it respects `logLevel` and `customLogger` ([#16858](#16858)) - chore: read build-time config from defines on the server instead of carrying it in `options` ([#16873](#16873)) - chore: read `options` from a single module instead of passing it through the server runtime ([#16871](#16871)) ## @sveltejs/adapter-netlify@7.0.0-next.10 ### Patch Changes - fix: correctly apply `reroute` results for apps configured with split serverless functions ([#16665](#16665)) - Updated dependencies [[`9b3d195`](9b3d195), [`385d378`](385d378), [`3782448`](3782448), [`d0d3a33`](d0d3a33), [`4b7a483`](4b7a483), [`e325d7d`](e325d7d), [`4f63c79`](4f63c79)]: - @sveltejs/kit@3.0.0-next.25 ## @sveltejs/adapter-vercel@7.0.0-next.8 ### Patch Changes - fix: omit ISR data endpoints for server-only routes ([#16731](#16731)) - fix: correctly apply `reroute` results for apps configured with split serverless functions ([#16665](#16665)) - Updated dependencies [[`9b3d195`](9b3d195), [`385d378`](385d378), [`3782448`](3782448), [`d0d3a33`](d0d3a33), [`4b7a483`](4b7a483), [`e325d7d`](e325d7d), [`4f63c79`](4f63c79)]: - @sveltejs/kit@3.0.0-next.25 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
optionsis already a single module-level object:runtime/server/index.jsimports it from<sveltekit:generated>/server.jsandServer.initwriteshooksonto it, so everyServerin a process shares it. It was also passed through 17 parameter positions, frominternal_responddown tostatic_error_page, plus theRemoteInternals.runcallback.It now sits in
runtime/server/internal.jsnext tomanifestandread_implementation, andhooksgets its ownset_hooks()there, sooptionsis immutable build data onceset_optionshas run.set_optionsis called at module scope rather than in the constructor, so it lands before prerendering evaluates the user's remote modules, which happens before anyServeris constructed.fetch.jsrenames its destructured set-cookieoptionstocookie_options, which would otherwise shadow the import.Follow-up to #16605 (comment). Part of #16519.