Skip to content

fix: keep route module ids ending in a real extension so ecosystem plugins match#2249

Open
birkskyum wants to merge 2 commits into
solidjs:mainfrom
birkskyum:keep-route-module-ids-ending-in-a-real-extension-so-ecosystem-plugins-match
Open

fix: keep route module ids ending in a real extension so ecosystem plugins match#2249
birkskyum wants to merge 2 commits into
solidjs:mainfrom
birkskyum:keep-route-module-ids-ending-in-a-real-extension-so-ecosystem-plugins-match

Conversation

@birkskyum

Copy link
Copy Markdown
Member

Route files are imported through an id carrying the picked exports in the query (routes/api.ts?pick=GET). That leaves the id ending in GET, so any plugin whose filter is anchored on the file extension silently skips route files. unplugin-macros is one example: its default include is /\.[cm]?[jt]sx?$/, so macros in route files are never expanded and evaluate at runtime instead of build time.

toPickId() now appends a lang.<ext> marker (routes/api.ts?pick=GET&lang.ts), the same convention Vue SFCs use for ?vue&type=script&lang.ts. The id ends in a real extension again and those filters match.

The old id shape produced short chunk names only by accident, since extname() swallowed the entire query. Exposing the query turned index-<hash>.js into index.tsx_pick_default_pick__css_lang-<hash>.js, and client chunk filenames are public URLs. sanitizeChunkFileName strips the pick tail before applying rolldown's own rules, so names and hashes are unchanged from before.

Verifying

With a stock Macros() and no user filter config, a macro import in a route file:

before after
server chunk function getRandom() { return Math.random() } random: .2652779648920326
GET /macro x3 three different values same value three times

Dev and production both serve routes at 200 with CSS links, modulepreloads and manifest keys intact. Adds unit tests for toPickId and sanitizeChunkFileName; the existing treeshake and server-secret-leak tests in apps/tests still pass.

@changeset-bot

changeset-bot Bot commented Jul 26, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 5f606cd

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@netlify

netlify Bot commented Jul 26, 2026

Copy link
Copy Markdown

Deploy Preview for solid-start-landing-page ready!

Name Link
🔨 Latest commit 5f606cd
🔍 Latest deploy log https://app.netlify.com/projects/solid-start-landing-page/deploys/6a66062ecfca670008199ced
😎 Deploy Preview https://deploy-preview-2249--solid-start-landing-page.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@pkg-pr-new

pkg-pr-new Bot commented Jul 26, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@solidjs/start@2249

commit: 5f606cd

@birkskyum birkskyum added the 2.x targeting SolidStart 2.x versions label Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

2.x targeting SolidStart 2.x versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug?]: unplugin-macros doesn't work

1 participant