Skip to content

Commit f62339c

Browse files
committed
feat: add purl to legacy dep tree
This commit adds the optional purl string to the legacy dep tree as well. A previous support already added support for the dep graph, but we also need support in dep tree for it.
1 parent c8542e3 commit f62339c

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

src/legacy/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ interface DepTreeDep {
2121
scope?: 'dev' | 'prod';
2222
pruned?: 'cyclic' | 'true';
2323
};
24+
purl?: string;
2425
}
2526

2627
/**
@@ -53,10 +54,13 @@ async function depTreeToGraph(
5354
depTree: DepTree,
5455
pkgManagerName: string,
5556
): Promise<types.DepGraph> {
56-
const rootPkg = {
57+
const rootPkg: types.PkgInfo = {
5758
name: depTree.name!,
5859
version: depTree.version || undefined,
5960
};
61+
if (depTree.purl) {
62+
rootPkg.purl = depTree.purl;
63+
}
6064

6165
const pkgManagerInfo: types.PkgManager = {
6266
name: pkgManagerName,
@@ -125,6 +129,10 @@ async function buildGraph(
125129
version: dep.version,
126130
};
127131

132+
if (dep.purl) {
133+
depPkg.purl = dep.purl;
134+
}
135+
128136
const depNodeId = getNodeId(depPkg.name, depPkg.version, subtreeHash);
129137

130138
depNodesIds.push(depNodeId);

test/legacy/from-dep-tree.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,46 @@ describe('depTreeToGraph with funky pipes in the version', () => {
260260
});
261261
});
262262

263+
describe('depTreeToGraph with purl', () => {
264+
const depTree = {
265+
name: 'oak',
266+
version: '1.0',
267+
purl: 'pkg:deb/[email protected]',
268+
dependencies: {
269+
foo: {
270+
version: 'v2.3.0',
271+
purl: 'pkg:deb/[email protected]',
272+
},
273+
bar: {
274+
version: '1',
275+
purl: 'pkg:dep/bar@1',
276+
dependencies: {
277+
foo: {
278+
version: 'v2.4.0',
279+
purl: 'pkg:deb/[email protected]',
280+
},
281+
},
282+
},
283+
},
284+
};
285+
286+
let depGraph: types.DepGraph;
287+
test('create', async () => {
288+
depGraph = await depGraphLib.legacy.depTreeToGraph(depTree, 'deb');
289+
expect(depGraph.getPkgs()).toHaveLength(4);
290+
expect(depGraph.getDepPkgs()).toHaveLength(3);
291+
depGraph.getPkgs().forEach((pkg) => expect(pkg.purl).toBeDefined());
292+
});
293+
294+
test('convert to JSON and back', async () => {
295+
const graphJson = depGraph.toJSON();
296+
const restoredGraph = await depGraphLib.createFromJSON(graphJson);
297+
298+
helpers.expectSamePkgs(restoredGraph.getPkgs(), depGraph.getPkgs());
299+
helpers.expectSamePkgs(restoredGraph.getDepPkgs(), depGraph.getDepPkgs());
300+
});
301+
});
302+
263303
describe('depTreeToGraph cycle with root', () => {
264304
const depTree = {
265305
name: 'maple',

0 commit comments

Comments
 (0)