Skip to content

fix(pack): bundle direct tsdown picomatch require#1732

Merged
fengmk2 merged 3 commits into
mainfrom
codex/fix-tsdown-picomatch-require
Jun 1, 2026
Merged

fix(pack): bundle direct tsdown picomatch require#1732
fengmk2 merged 3 commits into
mainfrom
codex/fix-tsdown-picomatch-require

Conversation

@fengmk2
Copy link
Copy Markdown
Member

@fengmk2 fengmk2 commented Jun 1, 2026

Summary

Fixes the bundled tsdown build so direct createRequire(...)("picomatch") calls are rewritten to the bundled local CJS entry, matching the existing handling for assigned require calls.

This prevents vp pack from depending on an undeclared runtime picomatch resolution when installed with pnpm hoist: false.

Root Cause

The core package build step already scans bundled tsdown output for third-party CJS requires and creates local bundled entry files. It handled patterns like:

const require = createRequire(import.meta.url);
require("pkg");

but missed direct-call patterns like:

createRequire(import.meta.url)("picomatch");

As a result, picomatch remained a runtime package lookup from @voidzero-dev/vite-plus-core/dist/tsdown/main-*.js.

Validation

  • pnpm -F @voidzero-dev/vite-plus-core build
  • pnpm -F vite-plus snap-test-global command-pack-picomatch-hoist-false
  • git diff --check -- packages/core/build-support/find-create-require.ts packages/cli/snap-tests-global/command-pack-picomatch-hoist-false

Fixes #1731


Note

Medium Risk
Changes core build-time AST rewriting for bundled tsdown CJS requires; incorrect detection could break pack/runtime resolution, but scope is limited to the existing replaceThirdPartyCjsRequires path.

Overview
Extends the tsdown re-bundle step’s createRequire scanner so inline createRequire(...)("picomatch") (and similar) calls get rewritten to local bundled CJS entry paths, not only const require = createRequire(...); require("pkg").

The AST helpers now return flat RequireCall lists, share literal-argument extraction, and add findDirectCreateRequireCalls for both static-import and getBuiltinModule createRequire patterns.

Adds a global snap fixture command-pack-picomatch-hoist-false (pnpm hoist: false) to assert vp pack completes without relying on hoisted picomatch.

Reviewed by Cursor Bugbot for commit 03f5f91. Configure here.

@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 1, 2026

Deploy Preview for viteplus-preview canceled.

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

@fengmk2 fengmk2 self-assigned this Jun 1, 2026
@fengmk2 fengmk2 force-pushed the codex/fix-tsdown-picomatch-require branch from caf086f to 4e0ce48 Compare June 1, 2026 05:08
@fengmk2 fengmk2 changed the title [codex] Fix bundled tsdown picomatch require fix(pack): bundle direct tsdown picomatch require Jun 1, 2026
Comment thread packages/cli/snap-tests-global/command-pack-picomatch-hoist-false/steps.json Outdated
@fengmk2
Copy link
Copy Markdown
Member Author

fengmk2 commented Jun 1, 2026

@cursor review

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Jun 1, 2026

Open in StackBlitz

vite-plus

npm i https://pkg.pr.new/voidzero-dev/vite-plus@1732

@voidzero-dev/vite-plus-core

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1732

@voidzero-dev/vite-plus-prompts

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-prompts@1732

@voidzero-dev/vite-plus-test

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1732

@voidzero-dev/vite-plus-cli-darwin-arm64

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-darwin-arm64@1732

@voidzero-dev/vite-plus-cli-darwin-x64

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-darwin-x64@1732

@voidzero-dev/vite-plus-cli-linux-arm64-gnu

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-linux-arm64-gnu@1732

@voidzero-dev/vite-plus-cli-linux-arm64-musl

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-linux-arm64-musl@1732

@voidzero-dev/vite-plus-cli-linux-x64-gnu

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-linux-x64-gnu@1732

@voidzero-dev/vite-plus-cli-linux-x64-musl

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-linux-x64-musl@1732

@voidzero-dev/vite-plus-cli-win32-arm64-msvc

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-win32-arm64-msvc@1732

@voidzero-dev/vite-plus-cli-win32-x64-msvc

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-cli-win32-x64-msvc@1732

@voidzero-dev/vite-plus-darwin-arm64

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-arm64@1732

@voidzero-dev/vite-plus-darwin-x64

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-x64@1732

@voidzero-dev/vite-plus-linux-arm64-gnu

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-gnu@1732

@voidzero-dev/vite-plus-linux-arm64-musl

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-musl@1732

@voidzero-dev/vite-plus-linux-x64-gnu

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-gnu@1732

@voidzero-dev/vite-plus-linux-x64-musl

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-musl@1732

@voidzero-dev/vite-plus-win32-arm64-msvc

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-arm64-msvc@1732

@voidzero-dev/vite-plus-win32-x64-msvc

npm i https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-x64-msvc@1732

commit: 4e0ce48

Comment thread packages/cli/snap-tests-global/command-pack-picomatch-hoist-false/steps.json Outdated
@fengmk2 fengmk2 marked this pull request as ready for review June 1, 2026 06:38
@fengmk2 fengmk2 requested a review from Brooooooklyn June 1, 2026 06:38
@fengmk2
Copy link
Copy Markdown
Member Author

fengmk2 commented Jun 1, 2026

@cursor review

Comment thread packages/core/build-support/find-create-require.ts
@fengmk2
Copy link
Copy Markdown
Member Author

fengmk2 commented Jun 1, 2026

@cursor review

@fengmk2 fengmk2 added test: e2e Auto run e2e tests test: create-e2e Run `vp create` e2e tests labels Jun 1, 2026
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 03f5f91. Configure here.

@fengmk2 fengmk2 force-pushed the codex/fix-tsdown-picomatch-require branch from 03f5f91 to 97317a7 Compare June 1, 2026 07:02
@fengmk2 fengmk2 merged commit ce4509e into main Jun 1, 2026
93 checks passed
@fengmk2 fengmk2 deleted the codex/fix-tsdown-picomatch-require branch June 1, 2026 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg.pr.new test: create-e2e Run `vp create` e2e tests test: e2e Auto run e2e tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bundled tsdown requires undeclared runtime dependency picomatch

2 participants