Skip to content

Commit 6eb1972

Browse files
committed
fix: read both Cargo workspace manifests
1 parent cd26bba commit 6eb1972

1 file changed

Lines changed: 30 additions & 13 deletions

File tree

packages/cli/build.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ import { generateLicenseFile } from '../../scripts/generate-license.js';
3333
import corePkg from '../core/package.json' with { type: 'json' };
3434

3535
const projectDir = dirname(fileURLToPath(import.meta.url));
36+
const repoDir = join(projectDir, '..', '..');
3637
const TEST_PACKAGE_NAME = 'vitest';
3738
const CORE_PACKAGE_NAME = '@voidzero-dev/vite-plus-core';
3839
const 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')];
3941
const 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+
639647
interface CargoMetadata {
640-
packages: Array<{
641-
name: string;
642-
version: string;
643-
source: string | null;
644-
}>;
648+
packages: CargoPackage[];
645649
}
646650

647651
interface 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+
676693
function 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

Comments
 (0)