Skip to content

Commit ce8e0d1

Browse files
Handle duplicate aliases in yarn v1
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent b24b29f commit ce8e0d1

File tree

4 files changed

+469
-9
lines changed

4 files changed

+469
-9
lines changed

src/packagedcode/npm.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ def parse(cls, location, package_only=False):
881881
with io.open(location, encoding='utf-8') as yl:
882882
yl_dependencies = yl.read().split('\n\n')
883883

884-
dependencies = []
884+
dependencies_by_purl = {}
885885
for yl_dependency in yl_dependencies:
886886
lines = yl_dependency.splitlines(False)
887887
if all(l.startswith('#') or not l.strip() for l in lines):
@@ -986,15 +986,15 @@ def parse(cls, location, package_only=False):
986986
resolved_package_data.dependencies.append(subdep)
987987

988988
# we create a purl with a version, since we are resolved
989-
dep_purl = PackageURL(
989+
dep_purl = str(PackageURL(
990990
type=cls.default_package_type,
991991
namespace=ns,
992992
name=name,
993993
version=version,
994-
)
994+
))
995995

996996
dep = models.DependentPackage(
997-
purl=str(dep_purl),
997+
purl=dep_purl,
998998
extracted_requirement=extracted_requirement,
999999
is_resolved=True,
10001000
# FIXME: these are NOT correct
@@ -1004,8 +1004,14 @@ def parse(cls, location, package_only=False):
10041004
is_direct=False,
10051005
resolved_package=resolved_package_data.to_dict(),
10061006
)
1007-
dependencies.append(dep.to_dict())
10081007

1008+
if not dep_purl in dependencies_by_purl:
1009+
dependencies_by_purl[dep_purl] = dep.to_dict()
1010+
else:
1011+
# We have duplicate dependencies because of aliases
1012+
pass
1013+
1014+
dependencies = list(dependencies_by_purl.values())
10091015
update_dependencies_as_resolved(dependencies=dependencies)
10101016
package_data = dict(
10111017
datasource_id=cls.datasource_id,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+
5+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
6+
version "7.0.0"
7+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
8+
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
9+
dependencies:
10+
ansi-styles "^4.0.0"
11+
string-width "^4.1.0"
12+
strip-ansi "^6.0.0"
13+
14+
wrap-ansi@^5.1.0:
15+
version "5.1.0"
16+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
17+
integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
18+
dependencies:
19+
ansi-styles "^3.2.0"
20+
string-width "^3.0.0"
21+
strip-ansi "^5.0.0"
22+
23+
wrap-ansi@^6.2.0:
24+
version "6.2.0"
25+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
26+
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
27+
dependencies:
28+
ansi-styles "^4.0.0"
29+
string-width "^4.1.0"
30+
strip-ansi "^6.0.0"
31+
32+
wrap-ansi@^7.0.0:
33+
version "7.0.0"
34+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
35+
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
36+
dependencies:
37+
ansi-styles "^4.0.0"
38+
string-width "^4.1.0"
39+
strip-ansi "^6.0.0"
40+
41+
wrap-ansi@^8.1.0:
42+
version "8.1.0"
43+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
44+
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
45+
dependencies:
46+
ansi-styles "^6.1.0"
47+
string-width "^5.0.1"
48+
strip-ansi "^7.0.1"

0 commit comments

Comments
 (0)