Skip to content

Commit 7922295

Browse files
committed
Add basic npm overrides parsing to package.json
Signed-off-by: Diviz Bansal <bansalkrrish36@gmail.com>
1 parent e795bc6 commit 7922295

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

src/packagedcode/npm.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,10 @@ def _parse(cls, json_data, package_only=False):
578578
if value:
579579
extra_data[extra_data_field] = value
580580

581+
overrides = json_data.get('overrides')
582+
if overrides:
583+
extra_data['overrides'] = overrides
584+
581585
package.extra_data = extra_data
582586

583587
for source, func in field_mappers:

tests/packagedcode/data/npm/alias/package.json.expected

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,27 @@
6464
],
6565
"engines": {
6666
"node": "20 || >=22"
67-
}
68-
},
67+
},
68+
"overrides": {
69+
"braces@3": "^3.0.3",
70+
"axios@1.0.0 - 1.5.1": "^1.7.2",
71+
"netlify-cli": {
72+
"braces": "^3.0.3",
73+
"micromatch": "^4.0.7",
74+
"chokidar": {
75+
"braces": "^3.0.3"
76+
},
77+
"http-proxy-middleware": {
78+
"micromatch": {
79+
".": "^4.0.7",
80+
"braces": "^3.0.3"
81+
}
82+
}
83+
},
84+
"micromatch@4.0.5": "^4.0.7",
85+
"tar@6.1.11": "6.2"
86+
}
87+
},
6988
"dependencies": [
7089
{
7190
"purl": "pkg:npm/strip-ansi",
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "my-override-example",
3+
"version": "1.0.0",
4+
"overrides": {
5+
"@npm/foo": "1.0.0",
6+
"@npm/bar@2.0.0": {
7+
"@npm/foo": "2.5.0"
8+
}
9+
}
10+
}
11+

tests/packagedcode/test_npm.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,24 @@ def test_npm_scan_with_private_package_json_and_yarn_lock(self):
543543
expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES
544544
)
545545

546+
def test_parse_npm_package_json_with_overrides(self):
547+
# 1) Point to your test package.json that has an "overrides" field
548+
test_file = self.get_test_loc('npm/overrides_test/package.json')
549+
550+
# 2) Parse it using the NpmPackageJsonHandler
551+
packages = npm.NpmPackageJsonHandler.parse(test_file)
552+
packages = list(packages) # Convert generator to list
553+
554+
# 3) Sanity check: We should get exactly 1 package
555+
assert len(packages) == 1
556+
package = packages[0]
557+
558+
# 4) Verify that "overrides" got captured in extra_data
559+
assert 'overrides' in package.extra_data
560+
assert package.extra_data['overrides'].get('@npm/foo') == '1.0.0'
561+
# If you have nested overrides, check those too:
562+
# e.g. assert package.extra_data['overrides']['@npm/bar@2.0.0']['@npm/foo'] == '2.5.0'
563+
546564

547565
test_data = [
548566
(['MIT'], 'mit'),

0 commit comments

Comments
 (0)