diff --git a/.changeset/busy-pianos-dress.md b/.changeset/busy-pianos-dress.md new file mode 100644 index 00000000..b57e2da9 --- /dev/null +++ b/.changeset/busy-pianos-dress.md @@ -0,0 +1,5 @@ +--- +"@nodesecure/tree-walker": patch +--- + +fix(tree-walker): LocalDependencyTreeLoader fails resolving symlink location on macos diff --git a/workspaces/scanner/test/depWalker.spec.ts b/workspaces/scanner/test/depWalker.spec.ts index b704b69a..9701f70c 100644 --- a/workspaces/scanner/test/depWalker.spec.ts +++ b/workspaces/scanner/test/depWalker.spec.ts @@ -196,7 +196,7 @@ describe("depWalker", { concurrency: 2 }, () => { { path: "EntryFileAnalyser", filesCount: 17 }, { path: "EntryFileAnalyser", filesCount: 47 }, { path: "EntryFileAnalyser", filesCount: 67 }, - { path: "EntryFileAnalyser", filesCount: 210 }].sort(byFilesCount)); + { path: "EntryFileAnalyser", filesCount: 214 }].sort(byFilesCount)); }); function byFilesCount(a: T, b: T) { diff --git a/workspaces/tree-walker/src/npm/LocalDependencyTreeLoader.ts b/workspaces/tree-walker/src/npm/LocalDependencyTreeLoader.ts index 560ba454..b95e6f88 100644 --- a/workspaces/tree-walker/src/npm/LocalDependencyTreeLoader.ts +++ b/workspaces/tree-walker/src/npm/LocalDependencyTreeLoader.ts @@ -29,23 +29,26 @@ export class LocalDependencyTreeLoader implements LocalDependencyTreeLoaderProvi options: LocalDependencyTreeLoaderOptions = {} ): Promise { const { registry, ...treeDepOptions } = options; + const resolvedLocation = await fs.realpath(location); const arb = new Arborist({ ...utils.NPM_TOKEN, - path: location, + path: resolvedLocation, registry }); try { await fs.access( - path.join(location, "node_modules") + path.join(resolvedLocation, "node_modules") ); await arb.loadActual(); - const treeNode = await arb.buildIdealTree(); + if (!arb.actualTree) { + throw new Error("arborist loadActual fn did not produce a tree"); + } - return TreeDependencies.fromArboristNode(treeNode, treeDepOptions); + return TreeDependencies.fromArboristNode(arb.actualTree, treeDepOptions); } catch { const treeNode = await arb.loadVirtual();