Skip to content

Commit c811f72

Browse files
committed
fix: implemented CR suggestions
1 parent 3d3ab9d commit c811f72

File tree

4 files changed

+44
-34
lines changed

4 files changed

+44
-34
lines changed

scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ import { DependenciesFragment, DevDependenciesFragment, PeerDependenciesFragment
8989
import { dependencyResolverSchema } from './dependency-resolver.graphql';
9090
import type { DependencyDetector } from './detector-hook';
9191
import { DependenciesService } from './dependencies.service';
92-
import { EnvPolicy } from './policy/env-policy';
92+
import { EnvPolicy, type EnvJsoncPolicyEntry } from './policy/env-policy';
9393
import type { ConfigStoreMain } from '@teambit/config-store';
9494
import { ConfigStoreAspect } from '@teambit/config-store';
9595

@@ -1570,21 +1570,20 @@ as an alternative, you can use "+" to keep the same version installed in the wor
15701570
if (!envJsonc.policy) return;
15711571

15721572
const policies = [
1573-
{ field: 'peers', targetField: 'peerDependencies' },
1574-
{ field: 'dev', targetField: 'devDependencies' },
1575-
{ field: 'runtime', targetField: 'dependencies' },
1573+
{ field: 'peers', targetField: 'peerDependencies' as const },
1574+
{ field: 'dev', targetField: 'devDependencies' as const },
1575+
{ field: 'runtime', targetField: 'dependencies' as const },
15761576
];
15771577

15781578
policies.forEach(({ field, targetField }) => {
1579-
// @ts-ignore
1580-
const deps = envJsonc.policy?.[field] || [];
1579+
const deps: EnvJsoncPolicyEntry[] = envJsonc.policy?.[field] || [];
15811580
deps.forEach((dep: any) => {
15821581
pkgs.push({
15831582
name: dep.name,
15841583
currentRange: dep.version,
15851584
source: 'env-jsonc',
15861585
componentId: component.id,
1587-
targetField: targetField as any,
1586+
targetField,
15881587
});
15891588
});
15901589
});
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { EnvPolicy, EnvPolicyConfigObject } from './env-policy';
1+
export { EnvPolicy, EnvPolicyConfigObject, EnvJsoncPolicyEntry } from './env-policy';

scopes/toolbox/json/jsonc-utils/jsonc-utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ export function stringifyJsonc(data: any, formatting: JsoncFormatting): string {
5050
* });
5151
* ```
5252
*/
53-
export function updateJsoncPreservingFormatting(
53+
export function updateJsoncPreservingFormatting<T>(
5454
originalContent: string,
55-
updateFn: (data: any) => any
55+
updateFn: (data: T) => T
5656
): string {
5757
const { data, formatting } = parseJsoncWithFormatting(originalContent);
5858
const updatedData = updateFn(data);
5959
return stringifyJsonc(updatedData, formatting);
60-
}
60+
}

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

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { VariantsAspect } from '@teambit/variants';
2323
import type { Component } from '@teambit/component';
2424
import { ComponentID, ComponentMap } from '@teambit/component';
2525
import { PackageJsonFile } from '@teambit/component.sources';
26+
import { type EnvJsonc } from '@teambit/envs'
2627
import { updateJsoncPreservingFormatting } from '@teambit/toolbox.json.jsonc-utils';
2728
import { createLinks } from '@teambit/dependencies.fs.linked-dependencies';
2829
import pMapSeries from 'p-map-series';
@@ -1010,44 +1011,54 @@ export class InstallMain {
10101011
}
10111012

10121013
async updateEnvJsoncPolicies(outdatedPkgs: MergedOutdatedPkg[]) {
1013-
const updatesByComponentId = groupBy(outdatedPkgs, (pkg) => pkg.componentId?.toString());
1014+
// Group packages by componentId, skipping those without one
1015+
const updatesByComponentId = new Map<string, MergedOutdatedPkg[]>();
1016+
for (const pkg of outdatedPkgs) {
1017+
if (!pkg.componentId) continue;
1018+
const key = pkg.componentId.toString();
1019+
const existing = updatesByComponentId.get(key);
1020+
if (existing) {
1021+
existing.push(pkg);
1022+
} else {
1023+
updatesByComponentId.set(key, [pkg]);
1024+
}
1025+
}
10141026

1015-
await pMapSeries(Object.entries(updatesByComponentId), async ([componentIdStr, pkgs]) => {
1016-
const componentId = await this.workspace.resolveComponentId(componentIdStr);
1027+
await Promise.all(Array.from(updatesByComponentId.values()).map(async (pkgs) => {
1028+
const componentId = pkgs[0].componentId!;
10171029
const component = await this.workspace.get(componentId);
10181030
const envJsoncFile = component.filesystem.files.find((file) => file.relative === 'env.jsonc');
10191031
if (!envJsoncFile) return;
10201032

10211033
const envJsoncContent = envJsoncFile.contents.toString();
1022-
const updatedContent = updateJsoncPreservingFormatting(envJsoncContent, (envJsonc) => {
1034+
const updatedContent = updateJsoncPreservingFormatting(envJsoncContent, (envJsonc: EnvJsonc): EnvJsonc => {
10231035
pkgs.forEach((pkg) => {
1024-
let field: string | undefined;
1025-
if (pkg.targetField === 'devDependencies') field = 'dev';
1026-
if (pkg.targetField === 'dependencies') field = 'runtime';
1027-
if (pkg.targetField === 'peerDependencies') field = 'peers';
1028-
1029-
if (!field) return;
1030-
1031-
// @ts-ignore
1032-
const deps = envJsonc.policy?.[field];
1033-
if (!Array.isArray(deps)) return;
1034-
1035-
const depEntry = deps.find((d: any) => d.name === pkg.name);
1036-
if (depEntry) {
1037-
depEntry.version = pkg.latestRange;
1038-
if (field === 'peers' && depEntry.supportedRange) {
1039-
if (!semver.intersects(pkg.latestRange, depEntry.supportedRange)) {
1040-
depEntry.supportedRange = `${depEntry.supportedRange} || ${pkg.latestRange}`;
1036+
let field: string | undefined;
1037+
if (pkg.targetField === 'devDependencies') field = 'dev';
1038+
if (pkg.targetField === 'dependencies') field = 'runtime';
1039+
if (pkg.targetField === 'peerDependencies') field = 'peers';
1040+
1041+
if (!field) return;
1042+
1043+
const deps = envJsonc.policy?.[field];
1044+
if (!Array.isArray(deps)) return;
1045+
1046+
const depEntry = deps.find(({ name }) => name === pkg.name);
1047+
if (depEntry) {
1048+
depEntry.version = pkg.latestRange;
1049+
if (field === 'peers' && depEntry.supportedRange) {
1050+
if (!semver.intersects(pkg.latestRange, depEntry.supportedRange)) {
1051+
depEntry.supportedRange = `${depEntry.supportedRange} || ${pkg.latestRange}`;
1052+
}
10411053
}
10421054
}
1043-
}
10441055
});
10451056
return envJsonc;
10461057
});
10471058

10481059
const absPath = path.join(this.workspace.componentDir(component.id), 'env.jsonc');
10491060
await fs.writeFile(absPath, updatedContent);
1050-
});
1061+
}));
10511062
}
10521063

10531064
private async _getAllUsedEnvIds(): Promise<ComponentID[]> {

0 commit comments

Comments
 (0)