Skip to content

feat: better error messages#16374

Merged
Rich-Harris merged 47 commits into
version-3from
better-error-messages
Jul 18, 2026
Merged

feat: better error messages#16374
Rich-Harris merged 47 commits into
version-3from
better-error-messages

Conversation

@dummdidumm

Copy link
Copy Markdown
Member

closes #11291

This makes the error messages more useful in a couple of contexts:

  • during prerendering, surface the original error, and apply source mapping where possible
  • format the stack better in a few places
  • harden a few places where errors were swallowed, log them to the console now

Error messages are not yet super nicely formatted, so this is one thing that can still be improved.

@pkg-svelte-dev

pkg-svelte-dev Bot commented Jul 16, 2026

Copy link
Copy Markdown

Install the latest version of @sveltejs/kit from 6b22cd7:

pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/6b22cd74dce64b0ba787aa32e909722f33d55a6b

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/kit/pr/16374

@changeset-bot

changeset-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6b22cd7

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

This PR includes changesets to release 2 packages
Name Type
@sveltejs/adapter-node Minor
@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

@svelte-docs-bot

Copy link
Copy Markdown

Comment thread packages/adapter-node/src/handler.js
@Rich-Harris
Rich-Harris marked this pull request as draft July 18, 2026 03:53
Comment thread packages/kit/src/runtime/server/respond.js Outdated
@Rich-Harris
Rich-Harris marked this pull request as ready for review July 18, 2026 17:11
@Rich-Harris

Copy link
Copy Markdown
Member

I would like to get sourcemaps working in production too, but will do that in a follow-up rather than keeping adding to this PR

@Rich-Harris
Rich-Harris merged commit aedaa27 into version-3 Jul 18, 2026
20 of 21 checks passed
@Rich-Harris
Rich-Harris deleted the better-error-messages branch July 18, 2026 17:12
@Rich-Harris Rich-Harris mentioned this pull request Jul 18, 2026
6 tasks
end = i + 1;
}

return line.replace(file, path.posix.relative(process.cwd(), file));

@teemingc teemingc Jul 19, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does this break on Windows if the paths printed are Windows-style?
Also, does it matter if this is process.cwd() rather than the Vite root?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

errr... yes, the posix might be leftover from debugging. lemme open a PR without it and see if it passes CI.

the paths should be relative to the cwd rather than the root — that's what makes them cmd-clickable in your terminal despite not being absolute

Rich-Harris added a commit that referenced this pull request Jul 19, 2026
Follow-up to #16374. Wanted to do this for a long time. Slightly
experimental — anything sourcemap-related always needs battle-testing —
but I'm reasonably sure it won't do any harm in cases where it doesn't
work perfectly.

Whereas #16374 made sourcemaps work during prerendering, this makes them
work in production generally, which includes prerendering and `vite
preview`. It applies three changes:

- it traces locations back to the source on a best-effort basis
- it makes paths relative to the cwd — much shorter and more readable,
but still cmd-clickable
- it truncates the framework's internal stack frames from the bottom

Additionally, it configures Vite to generate sourcemaps for the server
build (but allows that config to be overwritten, if someone really
doesn't want sourcemaps for whatever reason).

This is `vite preview` on `version-3`...

<img width="1379" height="260" alt="image"
src="https://github.com/user-attachments/assets/ebdab846-2beb-4e3b-83e2-0f3527078055"
/>

...and this is on this branch:

<img width="577" height="116" alt="image"
src="https://github.com/user-attachments/assets/d4e4810b-5cd4-4044-bf35-4a3f33d7d38c"
/>

It's not bulletproof. Taking `adapter-node` as an example, if the
emitted `build` directory was deployed without the `.svelte-kit`
directory alongside it, it wouldn't be able to trace all the way back to
the source. For that to happen, we would need to do something like add a
method on `builder` that bundled the sourcemaps, or moved (and adjusted)
them to a new location that _could_ be shipped with the build.

Similarly if an adapter moves files around, or does an additional
bundling step _without_ generating sourcemaps, there's not much we can
do.

But these are fixable things that we can address once this layer is in
place, and we shouldn't let perfect be the enemy of the good.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [ ] 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
- [x] 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.

---------

Co-authored-by: Tee Ming <[email protected]>
Rich-Harris added a commit that referenced this pull request Jul 19, 2026
tiny fix which should have been part of #16374 — we don't need to log
responses multiple times. will self-merge once green
Rich-Harris pushed a commit that referenced this pull request Jul 20, 2026
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/[email protected]

### Major Changes

- breaking: `config` exported from a universal route file takes
precedence over a server one
([#16400](#16400))

- breaking: consistent special filename patterns
([#16382](#16382))

### Minor Changes

- feat: support sourcemaps in production
([#16412](#16412))

- feat: support function validators for environment variables
([#16402](#16402))

- feat: better error logging
([#16374](#16374))

### Patch Changes

- fix: don't treat callable standard schemas as function param matchers
([#16403](#16403))

- fix: reject malformed streamed data encoding
([#16423](#16423))

- fix: hide stack traces for internal errors like 404s
([#16411](#16411))

- perf: match only unpaired surrogates when escaping HTML
([#16407](#16407))

- fix: don't report empty environment variables as missing
([#16401](#16401))

- chore: clarify which hooks run during server route resolution
([#16397](#16397))
## @sveltejs/[email protected]

### Minor Changes

- feat: better error logging
([#16374](#16374))

### Patch Changes

- Updated dependencies
[[`5220191`](5220191),
[`8cb2f7d`](8cb2f7d),
[`b88c7a7`](b88c7a7),
[`a6ea113`](a6ea113),
[`6446f64`](6446f64),
[`58f1789`](58f1789),
[`09774a2`](09774a2),
[`c542fdd`](c542fdd),
[`aedaa27`](aedaa27),
[`428ee1a`](428ee1a),
[`fefb3ae`](fefb3ae)]:
  - @sveltejs/[email protected]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

nicer error logging

3 participants