Skip to content

Commit

Permalink
fix: fixed possible missing fields and dev/optional deps
Browse files Browse the repository at this point in the history
  • Loading branch information
gemaxim committed Apr 29, 2024
1 parent c898448 commit dc40d04
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 7 deletions.
12 changes: 10 additions & 2 deletions lib/dep-graph-builders/pnpm/build-dep-graph-pnpm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@ export const buildDepGraphPnpm = async (
options: PnpmProjectParseOptions,
workspaceArgs?: PnpmWorkspaceArgs,
) => {
const { strictOutOfSync, includeOptionalDeps, pruneWithinTopLevelDeps } =
options;
const {
strictOutOfSync,
includeOptionalDeps,
includeDevDeps,
pruneWithinTopLevelDeps,
} = options;

const depGraphBuilder = new DepGraphBuilder(
{ name: 'pnpm' },
Expand Down Expand Up @@ -51,6 +55,7 @@ export const buildDepGraphPnpm = async (
extractedPnpmPkgs,
strictOutOfSync,
includeOptionalDeps,
includeDevDeps,
// we have rootWorkspaceOverrides if this is workspace pkg with overrides
// at root - therefore it should take precedent
// TODO: inspect if this is needed at all, seems like pnpm resolves everything in lockfile
Expand All @@ -74,6 +79,7 @@ const dfsVisit = async (
extractedPnpmPkgs: NormalisedPnpmPkgs,
strictOutOfSync: boolean,
includeOptionalDeps: boolean,
includeDevDeps: boolean,
overrides: Overrides,
pruneWithinTopLevel: boolean,
lockFileParser: PnpmLockfileParser,
Expand All @@ -92,6 +98,7 @@ const dfsVisit = async (
extractedPnpmPkgs,
strictOutOfSync,
includeOptionalDeps,
includeDevDeps,
lockFileParser,
);

Expand Down Expand Up @@ -138,6 +145,7 @@ const dfsVisit = async (
extractedPnpmPkgs,
strictOutOfSync,
includeOptionalDeps,
includeDevDeps,
overrides,
pruneWithinTopLevel,
lockFileParser,
Expand Down
21 changes: 18 additions & 3 deletions lib/dep-graph-builders/pnpm/lockfile-parser/lockfile-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export abstract class PnpmLockfileParser {
version,
isDev: versionData.dev == 'true',
dependencies: versionData.dependencies,
optionalDependencies: versionData.dependencies,
devDependencies: versionData.devDependencies,
optionalDependencies: versionData.optionalDependencies,
};
packages[`${pkg.name}@${pkg.version}`] = pkg;
},
Expand Down Expand Up @@ -140,19 +141,33 @@ export abstract class PnpmLockfileParser {

const subDeps = this.rawPnpmLock.importers[resolvedPathDep] || {
dependencies: {},
devDependencies: {},
optionalDependencies: {},
};
// todo: consider getting devDependencies, optionaldependencies

const resolvedDeps = this.normalizePackagesDeps(
subDeps.dependencies,
subDeps.dependencies || {},
isDev,
);

const resolvedDevDeps = this.normalizePackagesDeps(
subDeps.devDependencies || {},
true,
);

const resolvedOptionalDeps = this.normalizePackagesDeps(
subDeps.optionalDependencies || {},
true,
);

this.extractedPackages[`${name}@${version}`] = {
name,
version,
id: `${name}@${version}`,
isDev,
dependencies: resolvedDeps,
devDependencies: resolvedDevDeps,
optionalDependencies: resolvedOptionalDeps,
};
}
return version;
Expand Down
1 change: 1 addition & 0 deletions lib/dep-graph-builders/pnpm/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export type NormalisedPnpmPkg = {
id: string;
isDev: boolean;
dependencies: Record<string, string>;
devDependencies: Record<string, string>;
optionalDependencies?: Record<string, string>;
};

Expand Down
10 changes: 9 additions & 1 deletion lib/dep-graph-builders/pnpm/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export const getPnpmChildNode = (
pkgs: NormalisedPnpmPkgs,
strictOutOfSync: boolean,
includeOptionalDeps: boolean,
includeDevDeps: boolean,
lockfileParser: PnpmLockfileParser,
): PnpmNode => {
const resolvedVersion =
Expand Down Expand Up @@ -57,14 +58,21 @@ export const getPnpmChildNode = (
depData.dependencies || {},
depInfo.isDev,
);
const devDependencies = includeDevDeps
? getGraphDependencies(depData.devDependencies || {}, true)
: {};
const optionalDependencies = includeOptionalDeps
? getGraphDependencies(depData.optionalDependencies || {}, depInfo.isDev)
: {};
return {
id: `${name}@${depData.version}`,
name: name,
version: resolvedVersion,
dependencies: { ...dependencies, ...optionalDependencies },
dependencies: {
...dependencies,
...optionalDependencies,
...devDependencies,
},
isDev: depInfo.isDev,
};
}
Expand Down
3 changes: 2 additions & 1 deletion test/jest/dep-graph-builders/pnpm-lock.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ describe.each(['pnpm-lock-v5', 'pnpm-lock-v6'])(
pkgLockContent,
{
includeDevDeps: false,
includeOptionalDeps: true,
includeOptionalDeps: false,
strictOutOfSync: false,
pruneWithinTopLevelDeps: false,
},
Expand All @@ -64,6 +64,7 @@ describe.each(['pnpm-lock-v5', 'pnpm-lock-v6'])(
'utf8',
),
);

expect(
Buffer.from(JSON.stringify(newDepGraph)).toString('base64'),
).toBe(
Expand Down

0 comments on commit dc40d04

Please sign in to comment.