@@ -33,9 +33,11 @@ import { generateLicenseFile } from '../../scripts/generate-license.js';
3333import corePkg from '../core/package.json' with { type : 'json' } ;
3434
3535const projectDir = dirname ( fileURLToPath ( import . meta. url ) ) ;
36+ const repoDir = join ( projectDir , '..' , '..' ) ;
3637const TEST_PACKAGE_NAME = 'vitest' ;
3738const CORE_PACKAGE_NAME = '@voidzero-dev/vite-plus-core' ;
3839const NATIVE_BUILD_TIME_PATH = join ( projectDir , 'binding' , 'vite-plus.build-time' ) ;
40+ const CARGO_MANIFEST_PATHS = [ join ( repoDir , 'Cargo.toml' ) , join ( repoDir , 'rolldown' , 'Cargo.toml' ) ] ;
3941const UTC_BUILD_TIME_RE = / ^ \d { 4 } - \d { 2 } - \d { 2 } T \d { 2 } : \d { 2 } : \d { 2 } Z $ / ;
4042
4143// Browser providers projected under ./test/* and ./test/browser/providers/* so the
@@ -636,12 +638,14 @@ interface ToolchainConfig {
636638 } > ;
637639}
638640
641+ interface CargoPackage {
642+ name : string ;
643+ version : string ;
644+ source : string | null ;
645+ }
646+
639647interface CargoMetadata {
640- packages : Array < {
641- name : string ;
642- version : string ;
643- source : string | null ;
644- } > ;
648+ packages : CargoPackage [ ] ;
645649}
646650
647651interface ResolvedToolchainNode {
@@ -663,16 +667,29 @@ async function readPackageVersion(packageJsonPath: string, label: string): Promi
663667 return pkg . version ;
664668}
665669
666- function readCargoMetadata ( ) : CargoMetadata {
667- const repoDir = join ( projectDir , '..' , '..' ) ;
668- const stdout = execFileSync ( 'cargo' , [ 'metadata' , '--locked' , '--format-version' , '1' ] , {
669- cwd : repoDir ,
670- encoding : 'utf8' ,
671- maxBuffer : 64 * 1024 * 1024 ,
672- } ) ;
670+ function readCargoMetadata ( manifestPath : string ) : CargoMetadata {
671+ const stdout = execFileSync (
672+ 'cargo' ,
673+ [ 'metadata' , '--locked' , '--format-version' , '1' , '--manifest-path' , manifestPath ] ,
674+ {
675+ cwd : repoDir ,
676+ encoding : 'utf8' ,
677+ maxBuffer : 64 * 1024 * 1024 ,
678+ } ,
679+ ) ;
673680 return JSON . parse ( stdout ) as CargoMetadata ;
674681}
675682
683+ function readCargoPackageMetadata ( ) : CargoMetadata {
684+ const packages = new Map < string , CargoPackage > ( ) ;
685+ for ( const manifestPath of CARGO_MANIFEST_PATHS ) {
686+ for ( const pkg of readCargoMetadata ( manifestPath ) . packages ) {
687+ packages . set ( `${ pkg . name } \0${ pkg . version } \0${ pkg . source ?? '' } ` , pkg ) ;
688+ }
689+ }
690+ return { packages : [ ...packages . values ( ) ] } ;
691+ }
692+
676693function resolveCargoPackage ( metadata : CargoMetadata , packageName : string ) {
677694 const matches = metadata . packages . filter ( ( pkg ) => pkg . name === packageName ) ;
678695 if ( matches . length !== 1 ) {
@@ -833,7 +850,7 @@ async function syncToolchainExports() {
833850 validateToolchainConfig ( config ) ;
834851
835852 const cliVersion = await readPackageVersion ( join ( projectDir , 'package.json' ) , 'vite-plus' ) ;
836- const cargoMetadata = readCargoMetadata ( ) ;
853+ const cargoMetadata = readCargoPackageMetadata ( ) ;
837854 const buildTime = await resolveNativeBuildTime ( ) ;
838855 const nodes = await Promise . all (
839856 config . nodes . map ( ( node ) => resolveToolchainNode ( node , cargoMetadata , cliVersion , buildTime ) ) ,
0 commit comments