Skip to content

fix: ensure CSS URLs are correct when inlining client stylesheets#15153

Merged
elliott-with-the-longest-name-on-github merged 44 commits into
mainfrom
fix-missing-css-with-inlining-enabled
Jan 27, 2026
Merged

fix: ensure CSS URLs are correct when inlining client stylesheets#15153
elliott-with-the-longest-name-on-github merged 44 commits into
mainfrom
fix-missing-css-with-inlining-enabled

Conversation

@teemingc

@teemingc teemingc commented Jan 11, 2026

Copy link
Copy Markdown
Member

fixes #13878
closes #15147

This PR replaces the janky server-client css mapping (introduced by me) with simply replacing the asset URL references with the correct path when we inline the styles. Not only does this massively simplify things, it allows us to correctly prefix the paths based on the settings from paths.relative or path.assets.


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

Tests

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

Changesets

  • 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

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

@changeset-bot

changeset-bot Bot commented Jan 11, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3b89c6b

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 Patch

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

Comment on lines +12 to +13
"test:dev": "DEV=true playwright test && DEV=true PATHS_ASSETS=https://cdn.example.com/stuff playwright test",
"test:build": "playwright test && PATHS_ASSETS=https://cdn.example.com/stuff playwright test",

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seemed like the easiest way to test both CSS inlining with and without paths.assets without introducing another test matrix.

paths.assets replaces the CSS asset urls at build time but paths.relative does it at runtime

Comment thread packages/kit/src/utils/css.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
* @returns {string}
*/
export function replace_css_relative_url(contents, base) {
return contents.replaceAll(/url\((['"]?)\.\//ig, `url($1${base}/`);

@teemingc teemingc Jan 12, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fortunately, we don't have to worry about the @import 'app.css' case that omits the url(...) syntax because Vite inlines the referenced stylesheet even when referenced by more than one other stylesheet https://vite.dev/guide/features#import-inlining-and-rebasing

Comment thread packages/kit/src/utils/css.spec.js
Comment thread packages/kit/src/utils/css.js Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I pushed some whitespace-handling changes just to guard against edge cases (I don't think we actually have to worry about them because I don't think Vite will output CSS like that... but better to be safe).

The only other edge cases I can think of:

  • Is it a problem that this doesn't work on relative paths without ./ in front of them? i.e. url(img.png) won't get transformed.
  • This will replace content inside strings. So if you had the CSS content: "Example: If you were to put url(./rickroll.gif) here...", it would get modified, in spite of being a string. I don't see a way around this other than actually parsing the CSS contents with a CSS parser...

@teemingc

teemingc commented Jan 13, 2026

Copy link
Copy Markdown
Member Author

Is it a problem that this doesn't work on relative paths without ./ in front of them? i.e. url(img.png) won't get transformed.

I think after Vite processes the CSS the urls are always prefixed with ./ but I can check how it’s handled from both the static folder or otherwise to see if they do end up this way.

This will replace content inside strings. So if you had the CSS content: "Example: If you were to put url(./rickroll.gif) here...", it would get modified, in spite of being a string. I don't see a way around this other than actually parsing the CSS contents with a CSS parser...

Yeah, I think I should try out a CSS parser. Otherwise, maybe we’d have to do a negative lookahead. Are there any CSS parsers that you’d recommend?

EDIT: I see we were previously using csstree in Svelte so we can probably try that?

@teemingc

teemingc commented Jan 13, 2026

Copy link
Copy Markdown
Member Author
  • Is it a problem that this doesn't work on relative paths without ./ in front of them? i.e. url(img.png) won't get transformed.

So I did some testing and here are the results:

  1. If the asset can be found, it's always suffixed with ./ and lives next to the CSS file.
  2. If the asset can be found and it's located in the static folder, it's suffixed with ../../../ because static assets are located at the root path and it's relative to _app/immutable/assets.
  3. If the asset can't be found, the url value remains the same.

@teemingc teemingc force-pushed the fix-missing-css-with-inlining-enabled branch from 09886d8 to df13a14 Compare January 14, 2026 08:04
@teemingc teemingc changed the title fix: use regex to replace CSS paths instead of mapping server CSS fix: fix CSS URL paths of client stylesheets Jan 14, 2026
@teemingc teemingc marked this pull request as draft January 14, 2026 10:29
@teemingc

teemingc commented Jan 14, 2026

Copy link
Copy Markdown
Member Author
  • We'll use the Svelte CSS parser to identify declaration values and avoid accidentally affecting comments, strings, etc.
  • We'll also transform the stored CSS from a string to a function so we can easily plug in the relative path at runtime
  • We'll need to handle the case where the asset path is referencing something from the root because it was placed in a static dir. I've already added a test for this.

@teemingc teemingc changed the title fix: fix CSS URL paths of client stylesheets fix: ensure CSS URLs are correct when inlining client stylesheets Jan 22, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking awesome, tysm

Comment thread packages/kit/test/apps/options/test/test.js
Comment thread packages/kit/src/utils/css.spec.js Outdated
Comment thread packages/kit/src/utils/css.spec.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
Comment thread packages/kit/src/utils/css.js Outdated
const url_value_match = /url\(\s*(['"]?)(.*?)\1\s*\)/i.exec(url_declaration);
if (!url_value_match) continue;

const [, , url] = url_value_match;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you could use non-capturing groups ((?:)) for the stuff you don't actually want to capture to avoid these weird commas

@teemingc teemingc Jan 27, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The quotation's using a capture group so that it matches against the same type of closing quotation mark. This avoids matching a double quote in a single quoted string.

Unfortunately, this doesn't account for backslashed quotes in the same string

@teemingc teemingc Jan 27, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I've fixed the escaped characters edge case but the CSS parser is duplicating the escaped characters in the declaration value it returns. I think we need to avoid adding the same characters twice here https://github.com/sveltejs/svelte/blob/9662010a135937b7a920eaf93933be7b8b0c9c9e/packages/svelte/src/compiler/phases/1-parse/read/style.js#L508-L525 Currently, a string such as \s becomes \\ss in the returned AST

EDIT: opened a PR for it here sveltejs/svelte#17554

EDIT2: We just need to wait for sveltejs/svelte#17555 to be merged and update the Svelte version in Kit to get the tests passing

Comment thread packages/kit/src/utils/css.js
Comment thread packages/kit/src/utils/css.js
Comment thread packages/kit/src/utils/css.js Outdated
* @param {string} value
* @returns {string}
*/
function tippex_comments_and_strings(value) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did have to google what tippex meant :laugh:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fixed several tippex function edge cases and pushed a bunch of test cases to make sure it never regresses -- thank you so much for your work on this gnarly bug. Great job!

@elliott-with-the-longest-name-on-github elliott-with-the-longest-name-on-github merged commit 52965cf into main Jan 27, 2026
25 checks passed
@elliott-with-the-longest-name-on-github elliott-with-the-longest-name-on-github deleted the fix-missing-css-with-inlining-enabled branch January 27, 2026 21:38
@github-actions github-actions Bot mentioned this pull request Jan 27, 2026
KiraPC pushed a commit to KiraPC/sveltekit that referenced this pull request Feb 5, 2026
…eltejs#15153)

* add fix and test
format

* add unit test

* changeset

* add test for inlining conditionally rendered component css

* format

* Apply suggestion from @teemingc

* Apply suggestion from @teemingc

* Update css.js

* handle whitespace, add some additional test cases

* add failing test for assets in static dir

* bump svelte

* this should just work

* fix lockfile

* ok its working now

* last fix

* format

* push wip

* tests are passing

* split tests

* rename parser to parse

* hoist regexes

* use test.each

* add test for content and comments

* rename assets to paths_assets

* add tests for escaped characters

* add test for encoded characters

* safeguard against trailing slashes

* decode vite asset filenames

* a bit of clean up

* oops

* tippex comments

* tippex strings

* tippex wip

* harden comment and escaped character tests

* account for nested app dir

* bump svelte

* chore: fix tippex and add test cases

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
teemingc added a commit that referenced this pull request Feb 5, 2026
* fix(adapter-node): validate ORIGIN env var at startup (#14978)

- Add parse_origin() utility to validate and normalize origin URLs
- Server now fails fast with clear error for invalid ORIGIN
- Automatically normalize default ports and strip path/query/hash
- Add tests for origin validation

* add changeset

* chore(deps): update pnpm to v10.25.0 (#15043)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: Test remote functions with full-async setup (#15033)

* checkpoint

* donesies

* fix: lockfile

* update svelte-check

* add .env for test app

* fix flaky test

* polyfill withResolvers

* chore(deps): update actions/upload-artifact action to v6 (#15057)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update pnpm to v10.26.0 (#15065)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix: make typescript an optional peer dependency (#15074)

Co-authored-by: Ben McCann <[email protected]>

* docs: update Wrangler command for Cloudflare Workers testing (#15077)

* chore(deps): update pnpm to v10.26.2 (#15072)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* docs: clarify remote function import (#15082)

Tiny detail to make it super clear the import is for remote functions.

* docs: update description for `static` folder (#15087)

Co-authored-by: Ben McCann <[email protected]>

* chore: upgrade Playwright (#15089)

* chore: Upgrade Playwright

* checkpoint, not sure what else is going wrong

* i have never been so happy to see a test failure

* fix lockfile maybe

* fix: remove playwright

* more flaky tests

* fix clicknav

* fix another flaky test

* improve further

* another clicknav usage

* chore: upgrade jws (#15095)

* chore: upgrade js-yaml (#15096)

* feat: expose `waitUntil` also for serverless runtime & add docs (#14725)

* improvement: expose `waitUntil` also for serverless runtime & add documentation

* changeset

* revert previous changes and add docs

* revert previous changes

* change changeset

---------

Co-authored-by: Tee Ming <[email protected]>

* chore(deps): update vitest monorepo to v4 (major) (#14789)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tee Ming <[email protected]>

* fix: avoid overridden Vite config warning with Vitest 4 (#15121)

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Ben McCann <[email protected]>

* docs: remove `$lib` path customization (#14812)

* docs: remove `$lib` path customization

Updated documentation for $lib import alias in SvelteKit.

* Update documentation/docs/98-reference/26-$lib.md

Co-authored-by: Tee Ming <[email protected]>

* chore: remove deprecated comment

---------

Co-authored-by: Tee Ming <[email protected]>

* fix: use hasOwn check when deep-setting object properties (#15127)

* Version Packages (#15091)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: upgrade to pnpm 10.27.0 (#15128)

* fix: add `has(name, value)` overload for URLSearchParams (#15076)

* Add support for SearchParams.has(name, value) overload

* generate changeset

* Update .changeset/sharp-tires-work.md

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* Apply suggestions from code review

Co-authored-by: Tee Ming <[email protected]>

* fix: support instrumentation for `vite preview` (#15105)

The `instrumentation.server.js` file is now imported when running
`vite preview`. Unfortunately, since it's not the first thing that's
imported (all of Vite's depedencies are imported first), some
instrumentation that rely on monkey-patching imports might not work
properly, but at least we're importing it before the server code.
However, this matches the existing behaviour of `vite dev`.

See: https://github.com/sveltejs/kit/blob/51214794b40b2fc533b06cb8344e84e661f90be0/packages/kit/src/exports/vite/dev/index.js#L507-L513

* chore: run pnpm dedupe (#15134)

* fix: add `experimental.forkPreloads` flag (#15135)

* feat: add `experimental.enhancedPreloading` flag

Adds a new experimental flag to gate the use of Svelte's `fork` API for
preloading. The flag defaults to `false`, disabling the fork-based
preloading behavior until explicitly enabled.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* changeste

* chore: rename `enhancedPreloading` to `forkPreloads`

Co-Authored-By: Claude Opus 4.5 <[email protected]>

---------

Co-authored-by: Claude Opus 4.5 <[email protected]>

* chore: fix prettier ignoring source code in with build in the name (#15133)

* avoid prettier ignoring files that contain build in their name

* fix global ignore ignoring directories with build name

* prettier

* Update .prettierignore

* Update .prettierignore

* Version Packages (#15129)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* breaking: remove `buttonProps` from experimental remote form functions (#14622)

* breaking: remove `buttonProps` from experimental remote form functions

use e.g. `<button {...myForm.fields.action.as('submit', 'register')}>Register</button>` button instead

* fix

* error in dev on buttonProps access

* fix

* fix tests

* tweak

* regenerate

---------

Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* Revert "breaking: remove `buttonProps` from experimental remote form function…" (#15143)

This reverts commit 4f9870d.

* feat: add env vars for keepAliveTimeout and headersTimeout (#15125)

* Check for and apply timeouts for keepAlive and headers

* Update docs with new timeout env vars

* Add changeset for new timeouts

* Run the formatter

* Tweak the docs wording a bit

* Check for empty vars before parsing and validating

* Update documentation/docs/25-build-and-deploy/40-adapter-node.md

Co-authored-by: Tee Ming <[email protected]>

* Add a timeout_env helper with corresponding tests

* fix: convert adapter-node tests to TypeScript for project service compatibility

The tsconfig include pattern with brace expansion {js,ts} was not being
recognized by TypeScript's project service used by ESLint. Split into
separate patterns and converted test files to TypeScript.

* format

---------

Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* chore: Add AGENTS.md, symlink copilot instructions (#15145)

* chore: Add AGENTS.md, symlink copilot instructions

* clean up

* Version Packages (#15146)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: remove unused is_http_method helper and method set to (#15152)

* fix: avoid overriding Vite default `base` when running Vitest 4 (#14866)

* using same default base

* add changeset

* kit_base_path kit_paths_base ><

* Apply suggestion from @teemingc

---------

Co-authored-by: Tee Ming <[email protected]>

* docs: remove old references about `invalid.fieldName(...)` for issues (#15118)

* Initial plan

* docs: fix invalid() documentation to reflect actual API

Co-authored-by: teemingc <[email protected]>

* docs: add changeset for invalid() documentation fix

Co-authored-by: teemingc <[email protected]>

* Delete .changeset/brown-impalas-judge.md

* Clarify usage of invalid function in validation

Updated the explanation of the `invalid` function to include its origin from `@sveltejs/kit` and clarified its usage.

* Update documentation/docs/20-core-concepts/60-remote-functions.md

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* fix: await initialization on every request to prevent race condition (#15161)

* fix(adapter-cloudflare): await initialization on every request to prevent race condition

* Create changeset

Changeset funny-pets-melt.md + version bump (patch)

* Apply suggestion from @teemingc

---------

Co-authored-by: Tee Ming <[email protected]>

* chore: Upgrade devalue (#15172)

* Merge commit from fork

* ensure decoded resolved path is compared with decoded url.pathname

* remote resources shouldn't be rerouted

* actually it doesn't matter because reroute doesn't run anyway

* add validations for node adapter host, protocol, and port

* edge case

* there

* changeset

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update handler.js

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update packages/adapter-node/src/handler.js

Co-authored-by: Ben McCann <[email protected]>

* wrap fetch call

* Apply suggestion from @teemingc

---------

Co-authored-by: Ben McCann <[email protected]>

* Merge commit from fork

* fix: Add length checks to remote forms

* don't pre-instantiate a huge buffer

* Update .changeset/thin-dodos-reply.md

Co-authored-by: Ben McCann <[email protected]>

* move errors to util function

* test: avoid preallocating remote form buffers

* test: make remote form allocation regression fail on old code

---------

Co-authored-by: Ottomated <[email protected]>
Co-authored-by: ottomated <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Junha Heo <[email protected]>

* chore: Upgrade svelte (#15173)

* lockfile

* Version Packages (#15162)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: fix lint errors (#15174)

* generate types

* format

* chore: replace `netlify-cli` with `@netlify/dev` (#14686)

* chore: replace netlify-cli with netlify dev package

* update lockfile

* match modern netlify build output

* add doc

* remove srvx because it doesn't work with node 18

* format

* switch to node

* fix format and lint ignore

* no more srvx

* try installing deno for netlify edge in github action

* oops indentation

* pass port in through npm script

* remove port from npm script

* log when server started

* prettier

* generate types

---------

Co-authored-by: Tee Ming <[email protected]>

* chore: update suggestion message (#15165)

* chore: upgrade dependencies (#15176)

* chore: prevent two concurrent running release workflows (#15160)

* Revert "Revert "breaking: remove `buttonProps` from experimental remote form …" (#15144)

This reverts commit 3305022.

* fix: compatibility with vite-plugin-svelte@7 (#15179)

* Version Packages (#15177)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: docs update on `vitePreprocess` (#15185)

* fix: don't send "Vary: Accept-Encoding" header when precompress=false (#15182)

* Disable sirv compression checks when precompress=false

* Add changeset

* Update .changeset/sweet-spoons-study.md

---------

Co-authored-by: Elliott Johnson <[email protected]>

* fix: include `hooks.server` and `hooks.universal` as entrypoints to give them stable manifest identifiers (#15178)

* fix: include `hooks.server` and `hooks.universal` as entrypoints to give them stable manifest identifiers

* changeset

* yep

* lockfile

---------

Co-authored-by: Tee Ming <[email protected]>

* fix: Skip failing tests on async (#15189)

* fix: preload links if href changes (#15191)

* test

* fix

* changeset

* docs: update cloudflare adapter package description and misc (#15164)

* simplify workers and pages distinction

* support workers ci in adapter auto

* add todo

* remove todo

* improve error message

* spacing

* Update packages/adapter-auto/index.js

Co-authored-by: Ben McCann <[email protected]>

* validate main key and fix relative import paths

* better comment

* allow spa static assets configuration

* add validation error reasons

* docs formatting

* make compatibility date generic

* mention workers ci

* grammar

* integrate #14871 thanks to penalosa

* add test for workers_ci

* format

* update test

* split out

* chore

* Update packages/adapter-cloudflare/package.json

Co-authored-by: Elliott Johnson <[email protected]>

---------

Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* fix: ensure injected paths are prefixed with `./` (#15163)

* simplify workers and pages distinction

* support workers ci in adapter auto

* add todo

* remove todo

* improve error message

* spacing

* Update packages/adapter-auto/index.js

Co-authored-by: Ben McCann <[email protected]>

* validate main key and fix relative import paths

* better comment

* allow spa static assets configuration

* add validation error reasons

* docs formatting

* make compatibility date generic

* mention workers ci

* grammar

* integrate #14871 thanks to penalosa

* add test for workers_ci

* format

* update test

* split out adapter-auto changes

* remove unrelated changes

* this too

---------

Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Ben McCann <[email protected]>

* docs: convert `picklist` options to a `const` array (#14616)

* fix: prevent isr routes from handling remote function calls (#15085) (#15098)

* fix: prevent isr routes from handling remote function calls (#15085)

* add changeset for observability changes

* fix: improve `fields` type for generic components (#14974)

* fix: improves fields type for generic components

* changeset

* fix generated types

* cleaner type for intellisense

---------

Co-authored-by: Elliott Johnson <[email protected]>

* Version Packages (#15186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: upgrade dependencies (#15201)

* chore(deps): update dependency @netlify/edge-functions to v3 (#14772)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: add closing angle bracket (#15205)

* fix: reexport browser/dev from esm-env (#15206)

* chore: upgrade netlify/dev library (#15210)

* fix: ensure CSS URLs are correct when inlining client stylesheets (#15153)

* add fix and test
format

* add unit test

* changeset

* add test for inlining conditionally rendered component css

* format

* Apply suggestion from @teemingc

* Apply suggestion from @teemingc

* Update css.js

* handle whitespace, add some additional test cases

* add failing test for assets in static dir

* bump svelte

* this should just work

* fix lockfile

* ok its working now

* last fix

* format

* push wip

* tests are passing

* split tests

* rename parser to parse

* hoist regexes

* use test.each

* add test for content and comments

* rename assets to paths_assets

* add tests for escaped characters

* add test for encoded characters

* safeguard against trailing slashes

* decode vite asset filenames

* a bit of clean up

* oops

* tippex comments

* tippex strings

* tippex wip

* harden comment and escaped character tests

* account for nested app dir

* bump svelte

* chore: fix tippex and add test cases

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* fix: use validated args in batch resolver (#15215)

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rishab49 <[email protected]>

* chore(deps): update dependency set-cookie-parser to v3 (#15155)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix: only match rest params with matchers when the matcher matches (#15216)

* chore: restore previous explicit version for magic-string dependency in package.json of public packages (#15217)

* fix: emit script CSP nonces when  is present if  is also present (#15221)

* Update pnpm-workspace.yaml (#15218)

* fix(kit): properly handle percent-encoded anchors during prerendering (#15231)

* fix(kit): properly handle percent-encoded anchors during prerendering

* changelog

* Apply suggestion from @GauBen

* improve tests

---------

Co-authored-by: Elliott Johnson <[email protected]>

* feat: export type Picture in enhanced-img (#15225)

* feat: export type Picture in enhanced-img

This type is part of public api, so it should be reexported.
Otherwise users have to explicitly add "vite-imagetools", or use hacks
like `typeof import('fake.jpg?enhanced').default`

This type is needed when using `import.meta.glob`, because by default it
is getting typed as `unknown`.

* Apply suggestion from @teemingc

Co-authored-by: Tee Ming <[email protected]>

* tweak

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Tee Ming <[email protected]>

* handle pr review comments

* fix: address PR review comments

* chore: remove obsolete changesets consumed by releases

* Apply suggestion from @elliott-with-the-longest-name-on-github

Co-authored-by: Elliott Johnson <[email protected]>

* cleanup

* silly github

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Ondrej Čierny <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Samuel Plumppu <[email protected]>
Co-authored-by: Scott Wu <[email protected]>
Co-authored-by: Leon Scherer <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Hyunbin Seo <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rory Duncan <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Alois Klink <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: Simon H <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: Andrew Dailey <[email protected]>
Co-authored-by: jyc.dev <[email protected]>
Co-authored-by: Thomas LE JEUNE <[email protected]>
Co-authored-by: Ottomated <[email protected]>
Co-authored-by: ottomated <[email protected]>
Co-authored-by: Junha Heo <[email protected]>
Co-authored-by: Conduitry <[email protected]>
Co-authored-by: Dominik G. <[email protected]>
Co-authored-by: Patrick <[email protected]>
Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Richard Smith <[email protected]>
Co-authored-by: Matt DeKok <[email protected]>
Co-authored-by: Rishab49 <[email protected]>
Co-authored-by: Gautier Ben Aïm <[email protected]>
Co-authored-by: blt-r <[email protected]>
Copilot AI pushed a commit to Stadly/kit that referenced this pull request Mar 6, 2026
…eltejs#15153)

* add fix and test
format

* add unit test

* changeset

* add test for inlining conditionally rendered component css

* format

* Apply suggestion from @teemingc

* Apply suggestion from @teemingc

* Update css.js

* handle whitespace, add some additional test cases

* add failing test for assets in static dir

* bump svelte

* this should just work

* fix lockfile

* ok its working now

* last fix

* format

* push wip

* tests are passing

* split tests

* rename parser to parse

* hoist regexes

* use test.each

* add test for content and comments

* rename assets to paths_assets

* add tests for escaped characters

* add test for encoded characters

* safeguard against trailing slashes

* decode vite asset filenames

* a bit of clean up

* oops

* tippex comments

* tippex strings

* tippex wip

* harden comment and escaped character tests

* account for nested app dir

* bump svelte

* chore: fix tippex and add test cases

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
Copilot AI added a commit to Stadly/kit that referenced this pull request Mar 6, 2026
* fix(adapter-node): validate ORIGIN env var at startup (sveltejs#14978)

- Add parse_origin() utility to validate and normalize origin URLs
- Server now fails fast with clear error for invalid ORIGIN
- Automatically normalize default ports and strip path/query/hash
- Add tests for origin validation

* add changeset

* chore(deps): update pnpm to v10.25.0 (sveltejs#15043)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: Test remote functions with full-async setup (sveltejs#15033)

* checkpoint

* donesies

* fix: lockfile

* update svelte-check

* add .env for test app

* fix flaky test

* polyfill withResolvers

* chore(deps): update actions/upload-artifact action to v6 (sveltejs#15057)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update pnpm to v10.26.0 (sveltejs#15065)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix: make typescript an optional peer dependency (sveltejs#15074)

Co-authored-by: Ben McCann <[email protected]>

* docs: update Wrangler command for Cloudflare Workers testing (sveltejs#15077)

* chore(deps): update pnpm to v10.26.2 (sveltejs#15072)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* docs: clarify remote function import (sveltejs#15082)

Tiny detail to make it super clear the import is for remote functions.

* docs: update description for `static` folder (sveltejs#15087)

Co-authored-by: Ben McCann <[email protected]>

* chore: upgrade Playwright (sveltejs#15089)

* chore: Upgrade Playwright

* checkpoint, not sure what else is going wrong

* i have never been so happy to see a test failure

* fix lockfile maybe

* fix: remove playwright

* more flaky tests

* fix clicknav

* fix another flaky test

* improve further

* another clicknav usage

* chore: upgrade jws (sveltejs#15095)

* chore: upgrade js-yaml (sveltejs#15096)

* feat: expose `waitUntil` also for serverless runtime & add docs (sveltejs#14725)

* improvement: expose `waitUntil` also for serverless runtime & add documentation

* changeset

* revert previous changes and add docs

* revert previous changes

* change changeset

---------

Co-authored-by: Tee Ming <[email protected]>

* chore(deps): update vitest monorepo to v4 (major) (sveltejs#14789)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tee Ming <[email protected]>

* fix: avoid overridden Vite config warning with Vitest 4 (sveltejs#15121)

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Ben McCann <[email protected]>

* docs: remove `$lib` path customization (sveltejs#14812)

* docs: remove `$lib` path customization

Updated documentation for $lib import alias in SvelteKit.

* Update documentation/docs/98-reference/26-$lib.md

Co-authored-by: Tee Ming <[email protected]>

* chore: remove deprecated comment

---------

Co-authored-by: Tee Ming <[email protected]>

* fix: use hasOwn check when deep-setting object properties (sveltejs#15127)

* Version Packages (sveltejs#15091)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: upgrade to pnpm 10.27.0 (sveltejs#15128)

* fix: add `has(name, value)` overload for URLSearchParams (sveltejs#15076)

* Add support for SearchParams.has(name, value) overload

* generate changeset

* Update .changeset/sharp-tires-work.md

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* Apply suggestions from code review

Co-authored-by: Tee Ming <[email protected]>

* fix: support instrumentation for `vite preview` (sveltejs#15105)

The `instrumentation.server.js` file is now imported when running
`vite preview`. Unfortunately, since it's not the first thing that's
imported (all of Vite's depedencies are imported first), some
instrumentation that rely on monkey-patching imports might not work
properly, but at least we're importing it before the server code.
However, this matches the existing behaviour of `vite dev`.

See: https://github.com/sveltejs/kit/blob/51214794b40b2fc533b06cb8344e84e661f90be0/packages/kit/src/exports/vite/dev/index.js#L507-L513

* chore: run pnpm dedupe (sveltejs#15134)

* fix: add `experimental.forkPreloads` flag (sveltejs#15135)

* feat: add `experimental.enhancedPreloading` flag

Adds a new experimental flag to gate the use of Svelte's `fork` API for
preloading. The flag defaults to `false`, disabling the fork-based
preloading behavior until explicitly enabled.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* changeste

* chore: rename `enhancedPreloading` to `forkPreloads`

Co-Authored-By: Claude Opus 4.5 <[email protected]>

---------

Co-authored-by: Claude Opus 4.5 <[email protected]>

* chore: fix prettier ignoring source code in with build in the name (sveltejs#15133)

* avoid prettier ignoring files that contain build in their name

* fix global ignore ignoring directories with build name

* prettier

* Update .prettierignore

* Update .prettierignore

* Version Packages (sveltejs#15129)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* breaking: remove `buttonProps` from experimental remote form functions (sveltejs#14622)

* breaking: remove `buttonProps` from experimental remote form functions

use e.g. `<button {...myForm.fields.action.as('submit', 'register')}>Register</button>` button instead

* fix

* error in dev on buttonProps access

* fix

* fix tests

* tweak

* regenerate

---------

Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* Revert "breaking: remove `buttonProps` from experimental remote form function…" (sveltejs#15143)

This reverts commit 4f9870d.

* feat: add env vars for keepAliveTimeout and headersTimeout (sveltejs#15125)

* Check for and apply timeouts for keepAlive and headers

* Update docs with new timeout env vars

* Add changeset for new timeouts

* Run the formatter

* Tweak the docs wording a bit

* Check for empty vars before parsing and validating

* Update documentation/docs/25-build-and-deploy/40-adapter-node.md

Co-authored-by: Tee Ming <[email protected]>

* Add a timeout_env helper with corresponding tests

* fix: convert adapter-node tests to TypeScript for project service compatibility

The tsconfig include pattern with brace expansion {js,ts} was not being
recognized by TypeScript's project service used by ESLint. Split into
separate patterns and converted test files to TypeScript.

* format

---------

Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* chore: Add AGENTS.md, symlink copilot instructions (sveltejs#15145)

* chore: Add AGENTS.md, symlink copilot instructions

* clean up

* Version Packages (sveltejs#15146)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: remove unused is_http_method helper and method set to (sveltejs#15152)

* fix: avoid overriding Vite default `base` when running Vitest 4 (sveltejs#14866)

* using same default base

* add changeset

* kit_base_path kit_paths_base ><

* Apply suggestion from @teemingc

---------

Co-authored-by: Tee Ming <[email protected]>

* docs: remove old references about `invalid.fieldName(...)` for issues (sveltejs#15118)

* Initial plan

* docs: fix invalid() documentation to reflect actual API

Co-authored-by: teemingc <[email protected]>

* docs: add changeset for invalid() documentation fix

Co-authored-by: teemingc <[email protected]>

* Delete .changeset/brown-impalas-judge.md

* Clarify usage of invalid function in validation

Updated the explanation of the `invalid` function to include its origin from `@sveltejs/kit` and clarified its usage.

* Update documentation/docs/20-core-concepts/60-remote-functions.md

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* fix: await initialization on every request to prevent race condition (sveltejs#15161)

* fix(adapter-cloudflare): await initialization on every request to prevent race condition

* Create changeset

Changeset funny-pets-melt.md + version bump (patch)

* Apply suggestion from @teemingc

---------

Co-authored-by: Tee Ming <[email protected]>

* chore: Upgrade devalue (sveltejs#15172)

* Merge commit from fork

* ensure decoded resolved path is compared with decoded url.pathname

* remote resources shouldn't be rerouted

* actually it doesn't matter because reroute doesn't run anyway

* add validations for node adapter host, protocol, and port

* edge case

* there

* changeset

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update handler.js

* Update handler.js

Co-authored-by: Ben McCann <[email protected]>

* Update packages/adapter-node/src/handler.js

Co-authored-by: Ben McCann <[email protected]>

* wrap fetch call

* Apply suggestion from @teemingc

---------

Co-authored-by: Ben McCann <[email protected]>

* Merge commit from fork

* fix: Add length checks to remote forms

* don't pre-instantiate a huge buffer

* Update .changeset/thin-dodos-reply.md

Co-authored-by: Ben McCann <[email protected]>

* move errors to util function

* test: avoid preallocating remote form buffers

* test: make remote form allocation regression fail on old code

---------

Co-authored-by: Ottomated <[email protected]>
Co-authored-by: ottomated <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Junha Heo <[email protected]>

* chore: Upgrade svelte (sveltejs#15173)

* lockfile

* Version Packages (sveltejs#15162)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: fix lint errors (sveltejs#15174)

* generate types

* format

* chore: replace `netlify-cli` with `@netlify/dev` (sveltejs#14686)

* chore: replace netlify-cli with netlify dev package

* update lockfile

* match modern netlify build output

* add doc

* remove srvx because it doesn't work with node 18

* format

* switch to node

* fix format and lint ignore

* no more srvx

* try installing deno for netlify edge in github action

* oops indentation

* pass port in through npm script

* remove port from npm script

* log when server started

* prettier

* generate types

---------

Co-authored-by: Tee Ming <[email protected]>

* chore: update suggestion message (sveltejs#15165)

* chore: upgrade dependencies (sveltejs#15176)

* chore: prevent two concurrent running release workflows (sveltejs#15160)

* Revert "Revert "breaking: remove `buttonProps` from experimental remote form …" (sveltejs#15144)

This reverts commit 3305022.

* fix: compatibility with vite-plugin-svelte@7 (sveltejs#15179)

* Version Packages (sveltejs#15177)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: docs update on `vitePreprocess` (sveltejs#15185)

* fix: don't send "Vary: Accept-Encoding" header when precompress=false (sveltejs#15182)

* Disable sirv compression checks when precompress=false

* Add changeset

* Update .changeset/sweet-spoons-study.md

---------

Co-authored-by: Elliott Johnson <[email protected]>

* fix: include `hooks.server` and `hooks.universal` as entrypoints to give them stable manifest identifiers (sveltejs#15178)

* fix: include `hooks.server` and `hooks.universal` as entrypoints to give them stable manifest identifiers

* changeset

* yep

* lockfile

---------

Co-authored-by: Tee Ming <[email protected]>

* fix: Skip failing tests on async (sveltejs#15189)

* fix: preload links if href changes (sveltejs#15191)

* test

* fix

* changeset

* docs: update cloudflare adapter package description and misc (sveltejs#15164)

* simplify workers and pages distinction

* support workers ci in adapter auto

* add todo

* remove todo

* improve error message

* spacing

* Update packages/adapter-auto/index.js

Co-authored-by: Ben McCann <[email protected]>

* validate main key and fix relative import paths

* better comment

* allow spa static assets configuration

* add validation error reasons

* docs formatting

* make compatibility date generic

* mention workers ci

* grammar

* integrate sveltejs#14871 thanks to penalosa

* add test for workers_ci

* format

* update test

* split out

* chore

* Update packages/adapter-cloudflare/package.json

Co-authored-by: Elliott Johnson <[email protected]>

---------

Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>

* fix: ensure injected paths are prefixed with `./` (sveltejs#15163)

* simplify workers and pages distinction

* support workers ci in adapter auto

* add todo

* remove todo

* improve error message

* spacing

* Update packages/adapter-auto/index.js

Co-authored-by: Ben McCann <[email protected]>

* validate main key and fix relative import paths

* better comment

* allow spa static assets configuration

* add validation error reasons

* docs formatting

* make compatibility date generic

* mention workers ci

* grammar

* integrate sveltejs#14871 thanks to penalosa

* add test for workers_ci

* format

* update test

* split out adapter-auto changes

* remove unrelated changes

* this too

---------

Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Ben McCann <[email protected]>

* docs: convert `picklist` options to a `const` array (sveltejs#14616)

* fix: prevent isr routes from handling remote function calls (sveltejs#15085) (sveltejs#15098)

* fix: prevent isr routes from handling remote function calls (sveltejs#15085)

* add changeset for observability changes

* fix: improve `fields` type for generic components (sveltejs#14974)

* fix: improves fields type for generic components

* changeset

* fix generated types

* cleaner type for intellisense

---------

Co-authored-by: Elliott Johnson <[email protected]>

* Version Packages (sveltejs#15186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: upgrade dependencies (sveltejs#15201)

* chore(deps): update dependency @netlify/edge-functions to v3 (sveltejs#14772)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: add closing angle bracket (sveltejs#15205)

* fix: reexport browser/dev from esm-env (sveltejs#15206)

* chore: upgrade netlify/dev library (sveltejs#15210)

* fix: ensure CSS URLs are correct when inlining client stylesheets (sveltejs#15153)

* add fix and test
format

* add unit test

* changeset

* add test for inlining conditionally rendered component css

* format

* Apply suggestion from @teemingc

* Apply suggestion from @teemingc

* Update css.js

* handle whitespace, add some additional test cases

* add failing test for assets in static dir

* bump svelte

* this should just work

* fix lockfile

* ok its working now

* last fix

* format

* push wip

* tests are passing

* split tests

* rename parser to parse

* hoist regexes

* use test.each

* add test for content and comments

* rename assets to paths_assets

* add tests for escaped characters

* add test for encoded characters

* safeguard against trailing slashes

* decode vite asset filenames

* a bit of clean up

* oops

* tippex comments

* tippex strings

* tippex wip

* harden comment and escaped character tests

* account for nested app dir

* bump svelte

* chore: fix tippex and add test cases

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rich Harris <[email protected]>

* fix: use validated args in batch resolver (sveltejs#15215)

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Rishab49 <[email protected]>

* chore(deps): update dependency set-cookie-parser to v3 (sveltejs#15155)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix: only match rest params with matchers when the matcher matches (sveltejs#15216)

* chore: restore previous explicit version for magic-string dependency in package.json of public packages (sveltejs#15217)

* fix: emit script CSP nonces when  is present if  is also present (sveltejs#15221)

* Update pnpm-workspace.yaml (sveltejs#15218)

* fix(kit): properly handle percent-encoded anchors during prerendering (sveltejs#15231)

* fix(kit): properly handle percent-encoded anchors during prerendering

* changelog

* Apply suggestion from @GauBen

* improve tests

---------

Co-authored-by: Elliott Johnson <[email protected]>

* feat: export type Picture in enhanced-img (sveltejs#15225)

* feat: export type Picture in enhanced-img

This type is part of public api, so it should be reexported.
Otherwise users have to explicitly add "vite-imagetools", or use hacks
like `typeof import('fake.jpg?enhanced').default`

This type is needed when using `import.meta.glob`, because by default it
is getting typed as `unknown`.

* Apply suggestion from @teemingc

Co-authored-by: Tee Ming <[email protected]>

* tweak

---------

Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Tee Ming <[email protected]>

* handle pr review comments

* fix: address PR review comments

* chore: remove obsolete changesets consumed by releases

* Apply suggestion from @elliott-with-the-longest-name-on-github

Co-authored-by: Elliott Johnson <[email protected]>

* cleanup

* silly github

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Ondrej Čierny <[email protected]>
Co-authored-by: Ben McCann <[email protected]>
Co-authored-by: Tee Ming <[email protected]>
Co-authored-by: Samuel Plumppu <[email protected]>
Co-authored-by: Scott Wu <[email protected]>
Co-authored-by: Leon Scherer <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: teemingc <[email protected]>
Co-authored-by: Hyunbin Seo <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rory Duncan <[email protected]>
Co-authored-by: Elliott Johnson <[email protected]>
Co-authored-by: Alois Klink <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: Simon H <[email protected]>
Co-authored-by: Rich Harris <[email protected]>
Co-authored-by: Andrew Dailey <[email protected]>
Co-authored-by: jyc.dev <[email protected]>
Co-authored-by: Thomas LE JEUNE <[email protected]>
Co-authored-by: Ottomated <[email protected]>
Co-authored-by: ottomated <[email protected]>
Co-authored-by: Junha Heo <[email protected]>
Co-authored-by: Conduitry <[email protected]>
Co-authored-by: Dominik G. <[email protected]>
Co-authored-by: Patrick <[email protected]>
Co-authored-by: Chew Tee Ming <[email protected]>
Co-authored-by: Richard Smith <[email protected]>
Co-authored-by: Matt DeKok <[email protected]>
Co-authored-by: Rishab49 <[email protected]>
Co-authored-by: Gautier Ben Aïm <[email protected]>
Co-authored-by: blt-r <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Some CSS styles not applied with non-zero inlineStyleThreshold since v2.21.3

3 participants