Skip to content

fix: avoid circular dependency#16115

Merged
Rich-Harris merged 12 commits into
mainfrom
fix-node-import-deadlock
Jun 22, 2026
Merged

fix: avoid circular dependency#16115
Rich-Harris merged 12 commits into
mainfrom
fix-node-import-deadlock

Conversation

@teemingc

@teemingc teemingc commented Jun 22, 2026

Copy link
Copy Markdown
Member

closes #16092

This PR tries to keep the benefits of #16069 while ensuring the Node adapter handler code and the user's server build output are in separate chunks. Doing so avoids the circular dependency that causes the app to crash on startup.


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
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

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 Jun 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1059591

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

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

@svelte-docs-bot

Copy link
Copy Markdown

@teemingc teemingc marked this pull request as ready for review June 22, 2026 08:39
Comment thread packages/adapter-node/index.js Outdated
handler: 'src/handler.js',
shims: 'src/shims.js'
shims: 'src/shims.js',
utils: 'utils.js'

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.

I know it's not specific to this PR but why is this in the root? Feels like it should be src/utils.js no?

@teemingc teemingc Jun 22, 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.

Yeah, it think it was misplaced. It's not imported by any files outside src

Comment thread packages/adapter-node/rollup.config.js Outdated
Comment thread packages/adapter-node/index.js Outdated
Comment on lines +125 to +131
if (id.startsWith(server)) {
return id.slice(server_path_length);
}

if (entry_files.includes(id)) {
return id.slice(build_directory.length);
}

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.

Do we need both of these? It basically prevents any bundling from occurring, which presumably will negatively impact startup time. If we get rid of the first and just keep the second, does the bug still occur? (I don't have a local repro at the moment)

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 tested and the first one is crucial to prevent the circular dep. The second one can be removed

@vercel vercel Bot left a comment

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.

Additional Suggestion:

resolveImportMeta rewrites import.meta.url from the SOURCE module location, so the built Node server resolves dir to build/server/chunks instead of build, causing all static assets, prerendered pages, and read() to 404.

Fix on Vercel

@Rich-Harris Rich-Harris merged commit 6ddf670 into main Jun 22, 2026
27 checks passed
@Rich-Harris Rich-Harris deleted the fix-node-import-deadlock branch June 22, 2026 17:56
@github-actions github-actions Bot mentioned this pull request Jun 22, 2026
Rich-Harris pushed a commit that referenced this pull request Jun 22, 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 main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.67.0

### Minor Changes


- feat: add `prerender.handleInvalidUrl` option for invalid URLs
discovered while crawling
([#16088](#16088))


### Patch Changes


- fix: support `exactOptionalPropertyTypes` for optional form schema
fields ([#15866](#15866))


- fix: avoid unnecessarily overriding a user's Vite 8 `codeSplitting`
setting ([#16118](#16118))
## @sveltejs/adapter-node@5.5.6

### Patch Changes


- fix: avoid circular dependency between server initialisation and hook
retrieval that causes the app to crash on start
([#16115](#16115))


- fix: correctly resolve root directory on the server
([#16114](#16114))


- fix: ensure `ENV_PREFIX` is defined
([#16106](#16106))

- Updated dependencies
[[`cf15fa0`](cf15fa0),
[`5c76121`](5c76121),
[`2992e17`](2992e17)]:
  - @sveltejs/kit@2.67.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions Bot mentioned this pull request Jun 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

adapter-node 5.5.5: top-level await deadlock at server init when a hooks-graph module imports $env/dynamic/private (regression from #16069)

2 participants