Skip to content

Commit 089d959

Browse files
committed
fix: simplify paths logic
1 parent 17a36cd commit 089d959

File tree

4 files changed

+29
-64
lines changed

4 files changed

+29
-64
lines changed

build/main.js

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24383,21 +24383,23 @@ var visitorKeys = [
2438324383
["peerDependency", "peerDependencies"],
2438424384
["optionalDependency", "optionalDependencies"]
2438524385
];
24386-
function traverseInternal(node, visitor, parentMap) {
24386+
function traverseInternal(node, visitor, path2) {
2438724387
for (const [visitorKey, nodeKey] of visitorKeys) {
2438824388
if (visitor[visitorKey]) {
24389+
const newPath = [...path2, node];
2438924390
for (const dep of node[nodeKey]) {
24390-
parentMap.set(dep, node);
24391-
if (visitor[visitorKey](dep, node, parentMap) !== false) {
24392-
traverseInternal(dep, visitor, parentMap);
24391+
if (path2.includes(dep)) {
24392+
continue;
24393+
}
24394+
if (visitor[visitorKey](dep, node, newPath) !== false) {
24395+
traverseInternal(dep, visitor, newPath);
2439324396
}
2439424397
}
2439524398
}
2439624399
}
2439724400
}
2439824401
function traverse(node, visitor) {
24399-
const parentMap = /* @__PURE__ */ new WeakMap();
24400-
return traverseInternal(node, visitor, parentMap);
24402+
return traverseInternal(node, visitor, []);
2440124403
}
2440224404

2440324405
// node_modules/lockparse/lib/main.js
@@ -24859,36 +24861,18 @@ function getLsCommand(lockfilePath, packageName) {
2485924861
}
2486024862
return void 0;
2486124863
}
24862-
function getParentPath(node, parentMap) {
24863-
const parentPath = [];
24864-
if (!parentMap) {
24865-
return parentPath;
24866-
}
24867-
const seen = /* @__PURE__ */ new WeakSet();
24868-
let currentParent = parentMap.get(node);
24869-
while (currentParent) {
24870-
parentPath.push(`${currentParent.name}@${currentParent.version}`);
24871-
if (seen.has(currentParent)) {
24872-
parentPath.push("(circular)");
24873-
break;
24874-
}
24875-
seen.add(currentParent);
24876-
currentParent = parentMap.get(currentParent);
24877-
}
24878-
return parentPath;
24879-
}
2488024864
function computeParentPaths(lockfile, duplicateDependencyNames, dependencyMap) {
2488124865
const parentPaths = /* @__PURE__ */ new Map();
24882-
const visitorFn = (node, _parent, parentMap) => {
24883-
if (!duplicateDependencyNames.has(node.name)) {
24866+
const visitorFn = (node, _parent, path2) => {
24867+
if (!duplicateDependencyNames.has(node.name) || !path2) {
2488424868
return;
2488524869
}
2488624870
const versionSet = dependencyMap.get(node.name);
2488724871
if (!versionSet) {
2488824872
return;
2488924873
}
24890-
const parentPath = getParentPath(node, parentMap);
24891-
parentPaths.set(`${node.name}@${node.version}`, parentPath.join(" -> "));
24874+
const parentPath = path2.map((node2) => `${node2.name}@${node2.version}`).join(" -> ");
24875+
parentPaths.set(`${node.name}@${node.version}`, parentPath);
2489224876
};
2489324877
const visitor = {
2489424878
dependency: visitorFn,

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"@types/node": "^24.9.0",
4545
"esbuild": "^0.25.11",
4646
"eslint": "^9.38.0",
47-
"lockparse": "^0.4.0",
47+
"lockparse": "^0.5.0",
4848
"module-replacements": "^2.9.0",
4949
"pkg-types": "^2.3.0",
5050
"prettier": "^3.6.2",

src/checks/duplicates.ts

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import {type ParsedLockFile, traverse, type ParsedDependency} from 'lockparse';
1+
import {
2+
type ParsedLockFile,
3+
traverse,
4+
type ParsedDependency,
5+
type VisitorFn
6+
} from 'lockparse';
27

38
function getLsCommand(
49
lockfilePath: string,
@@ -19,49 +24,25 @@ function getLsCommand(
1924
return undefined;
2025
}
2126

22-
function getParentPath(
23-
node: ParsedDependency,
24-
parentMap: WeakMap<ParsedDependency, ParsedDependency> | undefined
25-
): string[] {
26-
const parentPath: string[] = [];
27-
if (!parentMap) {
28-
return parentPath;
29-
}
30-
const seen = new WeakSet<ParsedDependency>();
31-
let currentParent = parentMap.get(node);
32-
while (currentParent) {
33-
parentPath.push(`${currentParent.name}@${currentParent.version}`);
34-
if (seen.has(currentParent)) {
35-
parentPath.push('(circular)');
36-
break;
37-
}
38-
seen.add(currentParent);
39-
currentParent = parentMap.get(currentParent);
40-
}
41-
return parentPath;
42-
}
43-
4427
function computeParentPaths(
4528
lockfile: ParsedLockFile,
4629
duplicateDependencyNames: Set<string>,
4730
dependencyMap: Map<string, Set<string>>
4831
): Map<string, string> {
4932
const parentPaths = new Map<string, string>();
5033

51-
const visitorFn = (
52-
node: ParsedDependency,
53-
_parent: ParsedDependency | null,
54-
parentMap?: WeakMap<ParsedDependency, ParsedDependency>
55-
) => {
56-
if (!duplicateDependencyNames.has(node.name)) {
34+
const visitorFn: VisitorFn = (node, _parent, path) => {
35+
if (!duplicateDependencyNames.has(node.name) || !path) {
5736
return;
5837
}
5938
const versionSet = dependencyMap.get(node.name);
6039
if (!versionSet) {
6140
return;
6241
}
63-
const parentPath = getParentPath(node, parentMap);
64-
parentPaths.set(`${node.name}@${node.version}`, parentPath.join(' -> '));
42+
const parentPath = path
43+
.map((node) => `${node.name}@${node.version}`)
44+
.join(' -> ');
45+
parentPaths.set(`${node.name}@${node.version}`, parentPath);
6546
};
6647
const visitor = {
6748
dependency: visitorFn,

0 commit comments

Comments
 (0)