feat: production sourcemaps#16412
Conversation
|
Install the latest version of pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/955ae8c2bd6c49f18949c9187d4e2f4ba937f42eOpen in |
🦋 Changeset detectedLatest commit: 955ae8c 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 |
|
I think I found a bug. A crafted URL flips a 404 into a 500. curl --path-as-is '/nope' # 404, fine
curl --path-as-is '/file:///a%2Fb:9:9' # 500The cause is that I think either guard fixes it: only tracing real |
| // using `getBuiltinModule` rather than `import` makes this safe to run in non-Node-compatible environments | ||
| const fs = globalThis.process?.getBuiltinModule?.('node:fs'); | ||
| const url = globalThis.process?.getBuiltinModule?.('node:url'); | ||
| const path = globalThis.process?.getBuiltinModule?.('node:path'); | ||
| const module = globalThis.process?.getBuiltinModule?.('node:module'); |
There was a problem hiding this comment.
Unrelated to this PR: we might end up running most of this in the Vite dev server process and communicating the result back to the app runtime process since we can't use these Node.js APIs in for example, workerd, anyway
There was a problem hiding this comment.
Yeah admittedly I hadn't thought about how this interacts with the environment API. On version-3 we just override the fix_stack_trace implementation during dev
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>
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: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 previewonversion-3......and this is on this branch:
It's not bulletproof. Taking
adapter-nodeas an example, if the emittedbuilddirectory was deployed without the.svelte-kitdirectory 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 onbuilderthat 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:
Tests
pnpm testand lint the project withpnpm lintandpnpm checkChangesets
pnpm changesetand following the prompts. Changesets that add features should beminorand those that fix bugs should bepatch. Please prefix changeset messages withfeat:,fix:, orchore:.Edits