Skip to content

fix(core): resolve Rolldown bindings via platform packages#2067

Open
jong-kyung wants to merge 28 commits into
voidzero-dev:mainfrom
jong-kyung:fix/core-platform-binding-resolution
Open

fix(core): resolve Rolldown bindings via platform packages#2067
jong-kyung wants to merge 28 commits into
voidzero-dev:mainfrom
jong-kyung:fix/core-platform-binding-resolution

Conversation

@jong-kyung

Copy link
Copy Markdown
Collaborator

Summary

Fixes #2054.

This updates @voidzero-dev/vite-plus-core release builds so bundled Rolldown no longer resolves native bindings through vite-plus/binding.

Instead, supported Rolldown native package specifiers are rewritten from:

@rolldown/binding-<platform>

to the matching Vite+ native platform package:

@voidzero-dev/vite-plus-<platform>

vite-plus/binding remains available as a compatibility export.

Why

With pnpm enable-global-virtual-store, core can run from pnpm's global store realpath. In that layout, core cannot
reliably resolve undeclared vite-plus/binding.

This avoids the circular package graph:

vite-plus -> @voidzero-dev/vite-plus-core -> vite-plus/binding

and makes core's native binding resolution use declared optional dependencies instead.

Changes

  • Document the new native binding resolution model in:
    • packages/cli/BUNDLING.md
    • packages/core/BUNDLING.md
  • Map CLI napi.targets to Vite+ native platform package names
  • Add the generated Vite+ native platform packages to core optionalDependencies
  • Rewrite only supported Rolldown native binding specifiers to declared Vite+ platform packages
    • unsupported/fallback Rolldown bindings such as WASI are left unchanged
  • Add tests for:
    • NAPI target -> platform package mapping
    • core optional dependency metadata
  • Pin core native optional dependency versions during release after native addons are published

@netlify

netlify Bot commented Jul 6, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit fdbed44
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a50f0557aba720008601157

@jong-kyung jong-kyung self-assigned this Jul 6, 2026
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 33d915dd59

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
},
"optionalDependencies": {
"@voidzero-dev/vite-plus-darwin-arm64": "0.2.2",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep native optional deps in the version bump

When the release prep workflow bumps versions, it only rewrites the top-level version field in packages/core/package.json (.github/workflows/prepare_release.yml:55-56), leaving these newly added native optional dependency pins at the previous release. The new artifact test also requires each Vite+ native optional dependency to equal corePkgJson.version (packages/core/__tests__/build-artifacts.spec.ts:57), so the next release: v... PR will fail as soon as core is bumped unless the bump path updates these pins too.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what the preferred fix is for this release-flow issue. I avoided updating these pins in prepare_release.yml because the new native packages are not published yet at that point, so resolving exact versions during release prep seemed unsafe.

@fengmk2 Could you advise which approach you'd prefer?

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.

It shouldn't be added here. The napi binary dependency is automatically added by napi-rs/cli during the publishing process in packages/cli/publish-native-addons.ts, so it doesn't need to be depended on at the code level. However, currently it doesn't support automatically adding this dependency configuration to 2 packages. Need @Brooooooklyn to help review whether our approach is correct. I have a feeling something is wrong.

Comment thread packages/core/package.json
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9a4307d07a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts Outdated
Comment thread packages/core/build.ts
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ed475572ba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts
Comment thread packages/core/package.json
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cf5b76793b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts
Comment thread packages/core/package.json
@jong-kyung jong-kyung force-pushed the fix/core-platform-binding-resolution branch from feff11d to 9868852 Compare July 6, 2026 12:40
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 986885258c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts
Comment on lines 803 to +805
};

const { code, errors } = await format(destPkgPath, JSON.stringify(destPkg, null, 2) + '\n', {
destPkg.optionalDependencies = { ...destPkg.optionalDependencies };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Update native deps during version bumps

When the next release PR is created, .github/workflows/prepare_release.yml only bumps the top-level version fields, leaving these newly hard-coded native optional dependency specs at the previous release. The CI build then runs mergePackageJson(), which rewrites them to destPkg.version, so the post-build dirty-tree check in .github/workflows/ci.yml fails; after merge, main would also keep @voidzero-dev/vite-plus-core out of sync with the native packages until the ephemeral publish step patches it. Please update the release-prep path (or stop source builds from rewriting these specs) so the committed package.json stays consistent across version bumps.

Useful? React with 👍 / 👎.

@jong-kyung jong-kyung marked this pull request as ready for review July 7, 2026 02:36
@jong-kyung jong-kyung marked this pull request as draft July 7, 2026 02:36
@jong-kyung jong-kyung marked this pull request as ready for review July 7, 2026 04:57
@jong-kyung jong-kyung requested a review from fengmk2 July 7, 2026 04:59

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ed2773be77

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts Outdated
Comment thread packages/core/build.ts
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fcfaca56bc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/build.ts
@fengmk2

fengmk2 commented Jul 7, 2026

Copy link
Copy Markdown
Member

This change is a bit complex, so I won't merge it in this week's release. I'll review it after today's release is done.

@jong-kyung

Copy link
Copy Markdown
Collaborator Author

This change is a bit complex, so I won't merge it in this week's release. I'll review it after today's release is done.

I agree. I’ll review and address your feedback when you take a look later.

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.

Avoid circular binding resolution between vite-plus-core and vite-plus

2 participants