Skip to content

Commit 7e18721

Browse files
committed
fix: resolve '+' using workspaceDeps instead of loading env component
1 parent 43e156c commit 7e18721

File tree

1 file changed

+20
-27
lines changed

1 file changed

+20
-27
lines changed

scopes/workspace/install/install.main.runtime.ts

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ export class InstallMain {
934934
await this.getRootComponentDirByRootId(this.workspace.rootComponentsPath, envId),
935935
{
936936
dependencies: {
937-
...(await this._getEnvDependencies(envId)),
937+
...(await this._getEnvDependencies(envId, workspaceDeps)),
938938
...workspaceDeps,
939939
...(await this._getEnvPackage(envId)),
940940
},
@@ -948,36 +948,29 @@ export class InstallMain {
948948
);
949949
}
950950

951-
private async _getEnvDependencies(envId: ComponentID): Promise<Record<string, string>> {
951+
/**
952+
* Get the env's own peer dependencies from its policy (env.jsonc).
953+
* Resolves "+" version placeholders using workspaceDeps.
954+
*/
955+
private async _getEnvDependencies(
956+
envId: ComponentID,
957+
workspaceDeps: Record<string, string>
958+
): Promise<Record<string, string>> {
952959
const policy = await this.dependencyResolver.getEnvPolicyFromEnvId(envId);
953960
if (!policy) return {};
954961

955-
const filteredEntries = policy.selfPolicy.entries.filter(({ force, value }) => force && value.version !== '-');
956-
957-
// Check if any entry has a "+" version that needs resolving
958-
const hasPlusVersion = filteredEntries.some(({ value }) => value.version === '+');
959-
960-
// Only load the env component if we need to resolve "+" versions
961-
// Loading the env component can have side effects (importing it into scope)
962-
let envDeps: DependencyList | undefined;
963-
if (hasPlusVersion) {
964-
const envComponent = await this.envs.getEnvComponentByEnvId(envId.toString(), envId.toString());
965-
envDeps = envComponent ? this.dependencyResolver.getDependencies(envComponent) : undefined;
966-
}
967-
968962
return Object.fromEntries(
969-
filteredEntries.map(({ dependencyId, value }) => {
970-
let version = value.version;
971-
// Resolve "+" version placeholders by looking up the already resolved version
972-
// from the env component's dependencies (resolved in apply-overrides.resolveEnvPeerDepVersion)
973-
if (version === '+' && envDeps) {
974-
const found = envDeps.findByPkgNameOrCompId(dependencyId);
975-
version = found?.version ? snapToSemver(found.version) : '*';
976-
} else if (version === '+') {
977-
version = '*';
978-
}
979-
return [dependencyId, version];
980-
})
963+
policy.selfPolicy.entries
964+
.filter(({ force, value }) => force && value.version !== '-')
965+
.map(({ dependencyId, value }) => {
966+
let version = value.version;
967+
// Resolve "+" version placeholders using workspace dependencies
968+
// Similar to WorkspaceManifest._resolvePlusVersions
969+
if (version === '+') {
970+
version = workspaceDeps[dependencyId] || '*';
971+
}
972+
return [dependencyId, version];
973+
})
981974
);
982975
}
983976

0 commit comments

Comments
 (0)