Skip to content

Commit 7d596f1

Browse files
Handle yarn package aliases better
Reference: #3555 Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent f814e9c commit 7d596f1

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

src/packagedcode/npm.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import logging
1313
import json
1414
import re
15+
import sys
1516
import urllib.parse
1617
from functools import partial
1718
from itertools import islice
@@ -35,8 +36,10 @@
3536

3637

3738
SCANCODE_DEBUG_PACKAGE = os.environ.get('SCANCODE_DEBUG_PACKAGE', False)
39+
SCANCODE_DEBUG_PACKAGE_NPM = os.environ.get('SCANCODE_DEBUG_PACKAGE_NPM', False)
3840

3941
TRACE = SCANCODE_DEBUG_PACKAGE
42+
TRACE_NPM = SCANCODE_DEBUG_PACKAGE_NPM
4043

4144

4245
def logger_debug(*args):
@@ -45,8 +48,7 @@ def logger_debug(*args):
4548

4649
logger = logging.getLogger(__name__)
4750

48-
if TRACE:
49-
import sys
51+
if TRACE or TRACE_NPM:
5052
logging.basicConfig(stream=sys.stdout)
5153
logger.setLevel(logging.DEBUG)
5254

@@ -643,11 +645,16 @@ def parse(cls, location, package_only=False):
643645
# <alias-package>@npm:<package>
644646
if "@npm:" in ns:
645647
ns = ns.split(':')[1]
648+
if "@npm:" in name:
649+
name = name.split(':')[1]
646650
top_requirements.append((ns, name, constraint,))
647651

648652
else:
649653
raise Exception('Inconsistent content')
650654

655+
if TRACE_NPM:
656+
logger_debug(f'YarnLockV1Handler: parse: top_requirements: {top_requirements}')
657+
651658
# top_requirements should be all for the same package
652659
ns_names = set([(ns, name) for ns, name, _constraint in top_requirements])
653660
assert len(ns_names) == 1, f'Different names for same dependency is not supported: {ns_names!r}'

tests/packagedcode/data/npm/yarn-lock/v1-complex2/yarn.lock-expected

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@
191191
},
192192
{
193193
"purl": "pkg:npm/change-case@5.4.4",
194-
"extracted_requirement": "^5.4.3 ^5.4.4",
194+
"extracted_requirement": "^5.4.3 ^5.4.4 ^5.4.3",
195195
"scope": "dependencies",
196196
"is_runtime": true,
197197
"is_optional": false,
@@ -242,7 +242,7 @@
242242
},
243243
{
244244
"purl": "pkg:npm/esbuild@0.19.12",
245-
"extracted_requirement": "^0.19.3 ~0.19.10",
245+
"extracted_requirement": "^0.19.3 ~0.17.6 || ~0.18.0 || ~0.19.0 ~0.19.10",
246246
"scope": "dependencies",
247247
"is_runtime": true,
248248
"is_optional": false,
@@ -314,7 +314,7 @@
314314
},
315315
{
316316
"purl": "pkg:npm/globby@11.1.0",
317-
"extracted_requirement": "^11.0.3 ^11.0.4 ^11.1.0",
317+
"extracted_requirement": "^11.0.4 ^11.0.3 ^11.0.4 ^11.1.0",
318318
"scope": "dependencies",
319319
"is_runtime": true,
320320
"is_optional": false,
@@ -558,7 +558,7 @@
558558
},
559559
{
560560
"purl": "pkg:npm/string-width@4.2.3",
561-
"extracted_requirement": "^1.0.2 || 2 || 3 || 4 ^4.1.0 ^4.2.0 ^4.2.3",
561+
"extracted_requirement": "^4.2.0 ^1.0.2 || 2 || 3 || 4 ^4.1.0 ^4.2.0 ^4.2.3",
562562
"scope": "dependencies",
563563
"is_runtime": true,
564564
"is_optional": false,
@@ -722,7 +722,7 @@
722722
},
723723
{
724724
"purl": "pkg:npm/strip-ansi@6.0.1",
725-
"extracted_requirement": "^6.0.0 ^6.0.1",
725+
"extracted_requirement": "^6.0.1 ^6.0.0 ^6.0.1",
726726
"scope": "dependencies",
727727
"is_runtime": true,
728728
"is_optional": false,
@@ -846,7 +846,7 @@
846846
},
847847
{
848848
"purl": "pkg:npm/wrap-ansi@7.0.0",
849-
"extracted_requirement": "^7.0.0",
849+
"extracted_requirement": "^7.0.0 ^7.0.0",
850850
"scope": "dependencies",
851851
"is_runtime": true,
852852
"is_optional": false,

0 commit comments

Comments
 (0)