fix: prevent dev server crash when route files are deleted - #16643
Conversation
|
Install the latest version of pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/d0e2a7d5f62311d284ef789daac1c53013118824Open in Note This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed. |
🦋 Changeset detectedLatest commit: d0e2a7d 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 |
|
Same race can still crash one step later. |
|
After reviewing the commit that introduced this behavior I realized i've been too eager to fix this. @Nic-Polumeyv I'm looking into it, thanks |
|
can someone advise if i should convert this to draft until it's reviewed to avoid running ci/cd when updating the branch with |
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/kit@3.0.0-next.19 ### Major Changes - breaking: move `defineParams` and associated types to `@sveltejs/kit/params` ([#16716](#16716)) - breaking: run all errors through the `handleError` hook ([#16664](#16664)) - breaking: move `Page`, `ReadonlyURL` and `ReadonlyURLSearchParams` from `@sveltejs/kit` to `$app/state` ([#16694](#16694)) - breaking: move `BeforeNavigate`, `OnNavigate`, `AfterNavigate`, `Navigation`, `NavigationTarget`, `NavigationType`, `GotoOptions` and the `Navigation*` variant types from `@sveltejs/kit` to `$app/navigation` ([#16694](#16694)) - breaking: move `ActionResult` and `SubmitFunction` from `@sveltejs/kit` to `$app/forms` ([#16694](#16694)) - breaking: remove `handleValidationError` and pass remote function validation errors to `handleError` with `kind: 'validation'` ([#16672](#16672)) ### Minor Changes - feat: ignore files with + prefix if they contain test/spec/stories ([#16715](#16715)) ### Patch Changes - fix: rebuild the dev manifest when route files disappear during an incremental update ([#16643](#16643)) - fix: externalize `@opentelemetry/api` to prevent bundler chunk colocation between `instrumentation.server.js` and application code ([#16302](#16302)) - fix: surface prerender errors during development ([#16507](#16507)) ## @sveltejs/adapter-node@6.0.0-next.9 ### Patch Changes - fix: externalize `@opentelemetry/api` to prevent bundler chunk colocation between `instrumentation.server.js` and application code ([#16302](#16302)) - Updated dependencies [[`04f9ab4`](04f9ab4), [`1e198bd`](1e198bd), [`813726d`](813726d), [`a115a7b`](a115a7b), [`031ac69`](031ac69), [`dc7442c`](dc7442c), [`19c4478`](19c4478), [`dc7442c`](dc7442c), [`dc7442c`](dc7442c), [`0b3e2b3`](0b3e2b3)]: - @sveltejs/kit@3.0.0-next.19 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tee Ming <chewteeming01@gmail.com>
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/kit@3.0.0-next.19 ### Major Changes - breaking: move `defineParams` and associated types to `@sveltejs/kit/params` ([#16716](#16716)) - breaking: run all errors through the `handleError` hook ([#16664](#16664)) - breaking: move `Page`, `ReadonlyURL` and `ReadonlyURLSearchParams` from `@sveltejs/kit` to `$app/state` ([#16694](#16694)) - breaking: move `BeforeNavigate`, `OnNavigate`, `AfterNavigate`, `Navigation`, `NavigationTarget`, `NavigationType`, `GotoOptions` and the `Navigation*` variant types from `@sveltejs/kit` to `$app/navigation` ([#16694](#16694)) - breaking: move `ActionResult` and `SubmitFunction` from `@sveltejs/kit` to `$app/forms` ([#16694](#16694)) - breaking: remove `handleValidationError` and pass remote function validation errors to `handleError` with `kind: 'validation'` ([#16672](#16672)) ### Minor Changes - feat: ignore files with + prefix if they contain test/spec/stories ([#16715](#16715)) ### Patch Changes - fix: rebuild the dev manifest when route files disappear during an incremental update ([#16643](#16643)) - fix: externalize `@opentelemetry/api` to prevent bundler chunk colocation between `instrumentation.server.js` and application code ([#16302](#16302)) - fix: surface prerender errors during development ([#16507](#16507)) - fix: adjust error overload for optional `App.Error` parameters ([#16725](#16725)) ## @sveltejs/adapter-node@6.0.0-next.9 ### Patch Changes - fix: externalize `@opentelemetry/api` to prevent bundler chunk colocation between `instrumentation.server.js` and application code ([#16302](#16302)) - Updated dependencies [[`04f9ab4`](04f9ab4), [`1e198bd`](1e198bd), [`813726d`](813726d), [`a115a7b`](a115a7b), [`031ac69`](031ac69), [`dc7442c`](dc7442c), [`19c4478`](19c4478), [`dc7442c`](dc7442c), [`dc7442c`](dc7442c), [`0b3e2b3`](0b3e2b3), [`c5d0ce2`](c5d0ce2)]: - @sveltejs/kit@3.0.0-next.19 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
closes #16642
When route files are moved or deleted during development, the existing manifest can temporarily
reference a file that no longer exists. If this happens while SvelteKit is incrementally updating
page options or generated route types, an
ENOENTerror escapes the filesystem watcher andterminates the dev server.
There are two reads affected by this race:
get_page_optionsreads route modules while refreshing their page options.createProxyreads the same modules again while updating generated route types.Commit
8af47eb06deliberately moved the first read outside the static-analysis
tryblock so incorrectly resolvedpaths would remain visible instead of looking like unavailable static analysis. This change
preserves that behavior.
Instead of suppressing missing-file errors at either read site,
sync.updatenow treatsENOENTasan aborted incremental update and reports that a full manifest rebuild is required. The dev watcher
then schedules that rebuild. Persistent path-resolution and filesystem errors remain visible through
the existing full-rebuild error handling, while transient deletion and rename races no longer crash
the process.
The regression tests cover both possible missing-source reads. The type-generation case creates a
realistic pre-existing output directory and verifies that the aborted update does not write a
partial
$types.d.tsfile. A separate test confirms thatget_page_optionscontinues to throw formissing files outside the incremental-update recovery path.
Tests
Focused regression tests:
Additional validation:
pnpm -F @sveltejs/kit test:unit— 722 passed, 110 skippedpnpm -F @sveltejs/kit check— passedgit diff --check— passedPlease don't delete this checklist! Before submitting the PR, please make sure you do the following:
Tests
pnpm testand lint the project withpnpm lintandpnpm checkThe focused tests, the complete
@sveltejs/kitunit suite, and the package type checks pass. Therepository-wide commands in the checklist have not all been run.
Changesets
pnpm changesetand following the prompts. Changesets that add features should beminorand those that fix bugs should bepatch. Please prefix changeset messages withfeat,fix,breaking, orchore.Added a patch changeset for
@sveltejs/kit.Edits