Skip to content

Commit fd9ed3a

Browse files
authored
fix(nodejs): check all importers to detect dev deps from pnpm-lock.yaml file (#7387)
1 parent c929290 commit fd9ed3a

File tree

4 files changed

+49
-13
lines changed

4 files changed

+49
-13
lines changed

pkg/dependency/parser/nodejs/pnpm/parse.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,11 @@ type LockFile struct {
3737
Packages map[string]PackageInfo `yaml:"packages,omitempty"`
3838

3939
// V9
40-
Importers Importer `yaml:"importers,omitempty"`
40+
Importers map[string]Importer `yaml:"importers,omitempty"`
4141
Snapshots map[string]Snapshot `yaml:"snapshots,omitempty"`
4242
}
4343

4444
type Importer struct {
45-
Root RootImporter `yaml:".,omitempty"`
46-
}
47-
48-
type RootImporter struct {
4945
Dependencies map[string]ImporterDepVersion `yaml:"dependencies,omitempty"`
5046
DevDependencies map[string]ImporterDepVersion `yaml:"devDependencies,omitempty"`
5147
}
@@ -167,6 +163,18 @@ func (p *Parser) parseV9(lockFile LockFile) ([]ftypes.Package, []ftypes.Dependen
167163

168164
}
169165

166+
// Parse `Importers` to find all direct dependencies
167+
devDeps := make(map[string]string)
168+
deps := make(map[string]string)
169+
for _, importer := range lockFile.Importers {
170+
for n, v := range importer.DevDependencies {
171+
devDeps[n] = v.Version
172+
}
173+
for n, v := range importer.Dependencies {
174+
deps[n] = v.Version
175+
}
176+
}
177+
170178
for depPath, pkgInfo := range lockFile.Packages {
171179
name, ver, ref := p.parseDepPath(depPath, lockVer)
172180
parsedVer := p.parseVersion(depPath, ver, lockVer)
@@ -179,10 +187,10 @@ func (p *Parser) parseV9(lockFile LockFile) ([]ftypes.Package, []ftypes.Dependen
179187
// We will update `Dev` field later.
180188
dev := true
181189
relationship := ftypes.RelationshipIndirect
182-
if dep, ok := lockFile.Importers.Root.DevDependencies[name]; ok && dep.Version == ver {
190+
if v, ok := devDeps[name]; ok && p.trimPeerDeps(v, lockVer) == ver {
183191
relationship = ftypes.RelationshipDirect
184192
}
185-
if dep, ok := lockFile.Importers.Root.Dependencies[name]; ok && p.trimPeerDeps(dep.Version, lockVer) == ver {
193+
if v, ok := deps[name]; ok && p.trimPeerDeps(v, lockVer) == ver {
186194
relationship = ftypes.RelationshipDirect
187195
dev = false // mark root direct deps to update `dev` field of their child deps.
188196
}

pkg/dependency/parser/nodejs/pnpm/parse_test.go

-6
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ func TestParse(t *testing.T) {
5959
want: pnpmV9,
6060
wantDeps: pnpmV9Deps,
6161
},
62-
{
63-
name: "v9",
64-
file: "testdata/pnpm-lock_v9.yaml",
65-
want: pnpmV9,
66-
wantDeps: pnpmV9Deps,
67-
},
6862
{
6963
name: "v9 with cyclic dependencies import",
7064
file: "testdata/pnpm-lock_v9_cyclic_import.yaml",

pkg/dependency/parser/nodejs/pnpm/parse_testcase.go

+13
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,13 @@ var (
752752
Version: "0.4.0",
753753
Relationship: ftypes.RelationshipIndirect,
754754
},
755+
{
756+
757+
Name: "await-sleep",
758+
Version: "0.0.1",
759+
Dev: true,
760+
Relationship: ftypes.RelationshipDirect,
761+
},
755762
{
756763
757764
Name: "debug",
@@ -843,6 +850,12 @@ var (
843850
Version: "8.1.0",
844851
Relationship: ftypes.RelationshipDirect,
845852
},
853+
{
854+
855+
Name: "sleep-utils",
856+
Version: "1.0.3",
857+
Relationship: ftypes.RelationshipDirect,
858+
},
846859
{
847860
848861
Name: "statuses",

pkg/dependency/parser/nodejs/pnpm/testdata/pnpm-lock_v9.yaml

+21
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ importers:
4040
specifier: 2.0.0
4141
version: 2.0.0
4242

43+
subdir:
44+
dependencies:
45+
sleep-utils:
46+
specifier: 1.0.3
47+
version: 1.0.3
48+
49+
devDependencies:
50+
await-sleep:
51+
specifier: ^0.0.1
52+
version: 0.0.1
53+
4354
packages:
4455

4556
@@ -52,6 +63,9 @@ packages:
5263
5364
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
5465

66+
67+
resolution: {integrity: sha512-H3X3eAxwGpeNIk/yvFOs8g7500Q1YvzrxjSC9TNgLGtjrMFxPwhDdcT34QNs2iGWpZ+5WKkMJdjDoYs+Sw+TaA==}
68+
5569
5670
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
5771
engines: {node: '>=6.0'}
@@ -117,6 +131,9 @@ packages:
117131
118132
resolution: {integrity: sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==}
119133

134+
135+
resolution: {integrity: sha512-uJW7WDHISE1zJIdvoIewcdmis3pBvJhM30rni2gH7fHhV1NkTWLKw3J6CPRFdg3h+rFChFHzAgbkCKUErd4s8Q==}
136+
120137
121138
resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==}
122139
engines: {node: '>= 0.6'}
@@ -134,6 +151,8 @@ snapshots:
134151

135152
136153

154+
155+
137156
138157
dependencies:
139158
ms: 2.0.0
@@ -186,6 +205,8 @@ snapshots:
186205
optionalDependencies:
187206
asap: 2.0.6
188207

208+
209+
189210
190211

191212

0 commit comments

Comments
 (0)