Skip to content

fix(sdk-playground): the Vite config loads on Node 22 before 22.18 - #7805

Open
wonjangcloud9 wants to merge 1 commit into
heygen-com:mainfrom
wonjangcloud9:fix/sdk-playground-config-node-22
Open

wonjangcloud9 wants to merge 1 commit into
heygen-com:mainfrom
wonjangcloud9:fix/sdk-playground-config-node-22

Conversation

@wonjangcloud9

Copy link
Copy Markdown
Contributor

What

packages/sdk-playground's Vite config now loads on every Node 22 release, so bun run build at the repo root finishes on Node 22.0 to 22.17 too.

Why

The README asks for "Node.js 22+" and the packages declare "node": ">=22". On Node 22.16 the root build runs every package and then fails at its last step:

$ bun run build
…
@hyperframes/sdk-playground build: failed to load config from …/packages/sdk-playground/vite.config.ts
@hyperframes/sdk-playground build: error during build:
@hyperframes/sdk-playground build: TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for …/packages/sdk/src/adapters/fs.ts

bun run dev and bun run test in packages/sdk-playground stop with the same error, since both load the same config.

vite.config.ts imports createFsAdapter from @hyperframes/sdk/adapters/fs. When Vite bundles a config file it leaves bare package imports to Node, and that export's import condition is ./src/adapters/fs.ts. Node loads a .ts file without a flag only from 22.18 (type stripping), which is why CI (node-version: 22, currently a later 22.x) does not see it.

Related work

No open or closed issue or PR covers this. I searched "sdk-playground build", "Node 22.18", "type stripping" and "ERR_UNKNOWN_FILE_EXTENSION". #1298 (closed) was a similar symptom in Studio's Vite build from an earlier layout.

How

One line in packages/sdk-playground/vite.config.ts: the adapter is imported by its relative source path (../sdk/src/adapters/fs). Vite bundles relative imports into the config with esbuild, so Node never sees the .ts file. The adapter's own bare import, @hyperframes/core/atomic-file, already has a node condition pointing at dist. The type-only import of @hyperframes/sdk is erased and stays as it is.

I considered --configLoader runner on the three scripts instead; it also works, but it is three flags (and an experimental loader) where one import does it.

Test plan

All on Node 22.16.0, macOS, main 04ee926d.

Before, in packages/sdk-playground: bun run build, bun run test and vite (dev) each fail with the ERR_UNKNOWN_FILE_EXTENSION above.

After:

  • bun run build → ✓ built in 915ms
  • bun run test → 3 files, 5 tests passed
  • bun run typecheck → clean
  • vite --port 5199 → dev server is up
  • root bun run build → every step exits 0, including @hyperframes/sdk-playground build
  • oxlint, oxfmt and node scripts/check-workspace-contracts.mjs are clean

I did not add a test: on Node 22.18 and later (what CI runs) the old import loads too, so a test there would pass with or without the change. I have no newer Node on this machine, so the 22.18+ side is covered by CI on this PR.

🤖 Generated with Claude Code

vite.config.ts imported createFsAdapter from @hyperframes/sdk/adapters/fs.
Vite leaves a bare import in a config file to Node, and that export points at
src/adapters/fs.ts, so Node had to load a .ts file itself. Node only does
that without a flag from 22.18, and on 22.0 to 22.17 build, dev and test all
stopped with ERR_UNKNOWN_FILE_EXTENSION, which also failed the last step of
the root build.

The config now imports the adapter by its relative source path, which Vite
bundles with the config on every Node version.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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