Skip to content

Adopt path-based server function addressing - #590

Merged
ryansolid merged 2 commits into
nextfrom
server-function-path-addressing
Aug 28, 2026
Merged

Adopt path-based server function addressing#590
ryansolid merged 2 commits into
nextfrom
server-function-path-addressing

Conversation

@ryansolid

Copy link
Copy Markdown
Member

Summary

Downstream adoption of solidjs/solid#3076, which moved the server function id into the path (<endpoint>/<id>) and retired both the X-Server-Function-Id header and the ?id= query fallback.

  • The generic form-action fallback (createServerFormAction) reads the id back through the runtime's new parseServerFunctionUrl instead of parsing ?id= by hand — the router no longer hard-codes the addressing scheme.
  • Bound ?args composition (action.with) is untouched: arguments stayed in the query per the #3072 discussion, and hashKey already emits the plain JSON the server-side convention decodes.
  • "Not an address" now means a malformed path (bare endpoint, extra segments) rather than a missing ?id; the native-submission fallbacks keep working through the runtime's parse answering null.
  • actionBase prefix interception is unchanged — /_server/<id> still lives under /_server.

Draft until

@solidjs/web publishes the addressing change (anything newer than 2.0.0-rc.3). The ^2.0.0-rc.3 range picks the new build up on publish; CI here will fail on the missing parseServerFunctionUrl export until then.

Test plan

  • Full suite (dom + server configs + type tests) passes locally against a file: link to the @solidjs/web build from solid next — 382 + 33 passing.
  • Re-run CI once the next @solidjs/web prerelease is published.

Made with Cursor

solidjs/solid#3076 moved the function id into the path
(`<endpoint>/<id>`), retiring both the X-Server-Function-Id header and
the `?id=` query fallback. The generic form-action fallback now reads
the id back through the runtime's parseServerFunctionUrl rather than
parsing the query by hand — the router no longer hard-codes the
addressing scheme. Bound `?args` composition is untouched: arguments
stayed in the query, and hashKey already emits the plain JSON the
server-side convention reads.

"Not an address" now means a malformed path (extra segments, bare
endpoint) rather than a missing `?id`; the native-submission fallbacks
keep working through the runtime's parse answering null.

Requires @solidjs/web newer than 2.0.0-rc.3.

Co-authored-by: Cursor <cursoragent@cursor.com>
@changeset-bot

changeset-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 701ccf8

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

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

@ryansolid

Copy link
Copy Markdown
Member Author

Companion plugin PR: solidjs/solid-vite-plugin#332 (endpoint prefix-matching + path-based module preload in the dev middleware). Both are draft until the next @solidjs/web prerelease publishes the addressing change.

The dist-types check failed because the lockfile still resolved
@solidjs/web 2.0.0-rc.3, which predates parseServerFunctionUrl — the
runtime half of the addressing scheme this branch adopts. The peer and
dev floors now say what the code means: ^2.0.0-rc.4.

The vite plugin moves to 3.0.0-next.35 (the plugin half of
solidjs/solid#3076), which requires vite 8, which requires vitest 4 —
test-toolchain-only, but vitest 4 constructs `new FormData()` through
the mock's implementation, so the arrow-function stubs become real
functions (arrows aren't constructable), and one Mock type annotation
gains its signature.

Co-authored-by: Cursor <cursoragent@cursor.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedvitest@​4.1.11981007998100
Addedvite@​8.2.2981008296100
Added@​solidjs/​web@​2.0.0-rc.4991008397100
Added@​solidjs/​vite-plugin@​3.0.0-next.359610010094100
Addedsolid-js@​2.0.0-rc.41001009596100

View full report

@ryansolid
ryansolid marked this pull request as ready for review August 28, 2026 22:17
@ryansolid
ryansolid merged commit 60291cc into next Aug 28, 2026
3 checks passed
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.

1 participant