dependabot-bun 0.395.0 → 0.397.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/helpers/package-lock.json +113 -70
- data/lib/dependabot/bun/dependency_files_filterer.rb +8 -7
- data/lib/dependabot/bun/dependency_grapher.rb +8 -10
- data/lib/dependabot/bun/file_parser/bun_lock/record.rb +101 -0
- data/lib/dependabot/bun/file_parser/bun_lock.rb +47 -78
- data/lib/dependabot/bun/file_parser/lockfile_parser.rb +3 -2
- data/lib/dependabot/bun/file_parser.rb +25 -24
- data/lib/dependabot/bun/update_checker/latest_version_finder.rb +0 -15
- data/lib/dependabot/bun/update_checker/version_resolver.rb +59 -81
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b2b3b0451e9df5a0b011f86aa2350c9dfc0e8144ced6556d1425d4a081af8f3
|
|
4
|
+
data.tar.gz: 17a5e6489722676fb3b8939e8f3ce6eddb8f8a3e5afb0738edc7d11cdaab3a16
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0e2b0630b65dd996e8099e5d3600fe082fd6f589d2588960ed94df6ded3c180fba7b32b242e3ba07b85fab5f86c581fa25a7238c62d5191e989e6b6bc72de05f
|
|
7
|
+
data.tar.gz: 33400c832cc9a40a7ca79dde6354eab961e3515194d245e93d7fd2e5909c7b13853f6e3cfc28bb2ff6d76af674eb832b5e43d782f792105f8561cfd43a99bb42
|
data/helpers/package-lock.json
CHANGED
|
@@ -836,10 +836,21 @@
|
|
|
836
836
|
}
|
|
837
837
|
},
|
|
838
838
|
"node_modules/@eslint/eslintrc/node_modules/js-yaml": {
|
|
839
|
-
"version": "4.
|
|
840
|
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.
|
|
841
|
-
"integrity": "sha512-
|
|
839
|
+
"version": "4.3.2",
|
|
840
|
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
|
|
841
|
+
"integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
|
|
842
842
|
"dev": true,
|
|
843
|
+
"funding": [
|
|
844
|
+
{
|
|
845
|
+
"type": "github",
|
|
846
|
+
"url": "https://github.com/sponsors/puzrin"
|
|
847
|
+
},
|
|
848
|
+
{
|
|
849
|
+
"type": "github",
|
|
850
|
+
"url": "https://github.com/sponsors/nodeca"
|
|
851
|
+
}
|
|
852
|
+
],
|
|
853
|
+
"license": "MIT",
|
|
843
854
|
"dependencies": {
|
|
844
855
|
"argparse": "^2.0.1"
|
|
845
856
|
},
|
|
@@ -3632,6 +3643,19 @@
|
|
|
3632
3643
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
3633
3644
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
|
3634
3645
|
},
|
|
3646
|
+
"node_modules/baseline-browser-mapping": {
|
|
3647
|
+
"version": "2.11.23",
|
|
3648
|
+
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz",
|
|
3649
|
+
"integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ==",
|
|
3650
|
+
"dev": true,
|
|
3651
|
+
"license": "Apache-2.0",
|
|
3652
|
+
"bin": {
|
|
3653
|
+
"baseline-browser-mapping": "dist/cli.cjs"
|
|
3654
|
+
},
|
|
3655
|
+
"engines": {
|
|
3656
|
+
"node": ">=6.0.0"
|
|
3657
|
+
}
|
|
3658
|
+
},
|
|
3635
3659
|
"node_modules/bcrypt-pbkdf": {
|
|
3636
3660
|
"version": "1.0.2",
|
|
3637
3661
|
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
|
@@ -3760,9 +3784,9 @@
|
|
|
3760
3784
|
}
|
|
3761
3785
|
},
|
|
3762
3786
|
"node_modules/browserslist": {
|
|
3763
|
-
"version": "4.
|
|
3764
|
-
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.
|
|
3765
|
-
"integrity": "sha512-
|
|
3787
|
+
"version": "4.28.9",
|
|
3788
|
+
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
|
|
3789
|
+
"integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
|
|
3766
3790
|
"dev": true,
|
|
3767
3791
|
"funding": [
|
|
3768
3792
|
{
|
|
@@ -3778,11 +3802,13 @@
|
|
|
3778
3802
|
"url": "https://github.com/sponsors/ai"
|
|
3779
3803
|
}
|
|
3780
3804
|
],
|
|
3805
|
+
"license": "MIT",
|
|
3781
3806
|
"dependencies": {
|
|
3782
|
-
"
|
|
3783
|
-
"
|
|
3784
|
-
"
|
|
3785
|
-
"
|
|
3807
|
+
"baseline-browser-mapping": "^2.11.20",
|
|
3808
|
+
"caniuse-lite": "^1.0.30001810",
|
|
3809
|
+
"electron-to-chromium": "^1.5.420",
|
|
3810
|
+
"node-releases": "^2.0.54",
|
|
3811
|
+
"update-browserslist-db": "^1.3.2"
|
|
3786
3812
|
},
|
|
3787
3813
|
"bin": {
|
|
3788
3814
|
"browserslist": "cli.js"
|
|
@@ -3944,9 +3970,9 @@
|
|
|
3944
3970
|
}
|
|
3945
3971
|
},
|
|
3946
3972
|
"node_modules/caniuse-lite": {
|
|
3947
|
-
"version": "1.0.
|
|
3948
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
3949
|
-
"integrity": "sha512-
|
|
3973
|
+
"version": "1.0.30001810",
|
|
3974
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
|
|
3975
|
+
"integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
|
|
3950
3976
|
"dev": true,
|
|
3951
3977
|
"funding": [
|
|
3952
3978
|
{
|
|
@@ -3961,7 +3987,8 @@
|
|
|
3961
3987
|
"type": "github",
|
|
3962
3988
|
"url": "https://github.com/sponsors/ai"
|
|
3963
3989
|
}
|
|
3964
|
-
]
|
|
3990
|
+
],
|
|
3991
|
+
"license": "CC-BY-4.0"
|
|
3965
3992
|
},
|
|
3966
3993
|
"node_modules/caseless": {
|
|
3967
3994
|
"version": "0.12.0",
|
|
@@ -4505,10 +4532,11 @@
|
|
|
4505
4532
|
}
|
|
4506
4533
|
},
|
|
4507
4534
|
"node_modules/electron-to-chromium": {
|
|
4508
|
-
"version": "1.
|
|
4509
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.
|
|
4510
|
-
"integrity": "sha512-
|
|
4511
|
-
"dev": true
|
|
4535
|
+
"version": "1.5.427",
|
|
4536
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz",
|
|
4537
|
+
"integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==",
|
|
4538
|
+
"dev": true,
|
|
4539
|
+
"license": "ISC"
|
|
4512
4540
|
},
|
|
4513
4541
|
"node_modules/emittery": {
|
|
4514
4542
|
"version": "0.13.1",
|
|
@@ -4587,10 +4615,11 @@
|
|
|
4587
4615
|
}
|
|
4588
4616
|
},
|
|
4589
4617
|
"node_modules/escalade": {
|
|
4590
|
-
"version": "3.
|
|
4591
|
-
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.
|
|
4592
|
-
"integrity": "sha512-
|
|
4618
|
+
"version": "3.2.0",
|
|
4619
|
+
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
|
4620
|
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
|
4593
4621
|
"dev": true,
|
|
4622
|
+
"license": "MIT",
|
|
4594
4623
|
"engines": {
|
|
4595
4624
|
"node": ">=6"
|
|
4596
4625
|
}
|
|
@@ -8141,9 +8170,10 @@
|
|
|
8141
8170
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
|
8142
8171
|
},
|
|
8143
8172
|
"node_modules/js-yaml": {
|
|
8144
|
-
"version": "3.
|
|
8145
|
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.
|
|
8146
|
-
"integrity": "sha512-
|
|
8173
|
+
"version": "3.15.2",
|
|
8174
|
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz",
|
|
8175
|
+
"integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==",
|
|
8176
|
+
"license": "MIT",
|
|
8147
8177
|
"dependencies": {
|
|
8148
8178
|
"argparse": "^1.0.7",
|
|
8149
8179
|
"esprima": "^4.0.0"
|
|
@@ -9242,10 +9272,14 @@
|
|
|
9242
9272
|
"dev": true
|
|
9243
9273
|
},
|
|
9244
9274
|
"node_modules/node-releases": {
|
|
9245
|
-
"version": "2.0.
|
|
9246
|
-
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.
|
|
9247
|
-
"integrity": "sha512-
|
|
9248
|
-
"dev": true
|
|
9275
|
+
"version": "2.0.55",
|
|
9276
|
+
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz",
|
|
9277
|
+
"integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==",
|
|
9278
|
+
"dev": true,
|
|
9279
|
+
"license": "MIT",
|
|
9280
|
+
"engines": {
|
|
9281
|
+
"node": ">=18"
|
|
9282
|
+
}
|
|
9249
9283
|
},
|
|
9250
9284
|
"node_modules/nopt": {
|
|
9251
9285
|
"version": "8.0.0",
|
|
@@ -14483,10 +14517,11 @@
|
|
|
14483
14517
|
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
|
14484
14518
|
},
|
|
14485
14519
|
"node_modules/picocolors": {
|
|
14486
|
-
"version": "1.
|
|
14487
|
-
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.
|
|
14488
|
-
"integrity": "sha512-
|
|
14489
|
-
"dev": true
|
|
14520
|
+
"version": "1.1.1",
|
|
14521
|
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
|
14522
|
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
14523
|
+
"dev": true,
|
|
14524
|
+
"license": "ISC"
|
|
14490
14525
|
},
|
|
14491
14526
|
"node_modules/picomatch": {
|
|
14492
14527
|
"version": "2.3.1",
|
|
@@ -15937,9 +15972,9 @@
|
|
|
15937
15972
|
}
|
|
15938
15973
|
},
|
|
15939
15974
|
"node_modules/update-browserslist-db": {
|
|
15940
|
-
"version": "1.
|
|
15941
|
-
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.
|
|
15942
|
-
"integrity": "sha512-
|
|
15975
|
+
"version": "1.3.3",
|
|
15976
|
+
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
|
|
15977
|
+
"integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
|
|
15943
15978
|
"dev": true,
|
|
15944
15979
|
"funding": [
|
|
15945
15980
|
{
|
|
@@ -15955,9 +15990,10 @@
|
|
|
15955
15990
|
"url": "https://github.com/sponsors/ai"
|
|
15956
15991
|
}
|
|
15957
15992
|
],
|
|
15993
|
+
"license": "MIT",
|
|
15958
15994
|
"dependencies": {
|
|
15959
|
-
"escalade": "^3.
|
|
15960
|
-
"picocolors": "^1.
|
|
15995
|
+
"escalade": "^3.2.0",
|
|
15996
|
+
"picocolors": "^1.1.1"
|
|
15961
15997
|
},
|
|
15962
15998
|
"bin": {
|
|
15963
15999
|
"update-browserslist-db": "cli.js"
|
|
@@ -16979,9 +17015,9 @@
|
|
|
16979
17015
|
"dev": true
|
|
16980
17016
|
},
|
|
16981
17017
|
"js-yaml": {
|
|
16982
|
-
"version": "4.
|
|
16983
|
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.
|
|
16984
|
-
"integrity": "sha512-
|
|
17018
|
+
"version": "4.3.2",
|
|
17019
|
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
|
|
17020
|
+
"integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
|
|
16985
17021
|
"dev": true,
|
|
16986
17022
|
"requires": {
|
|
16987
17023
|
"argparse": "^2.0.1"
|
|
@@ -19052,6 +19088,12 @@
|
|
|
19052
19088
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
19053
19089
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
|
19054
19090
|
},
|
|
19091
|
+
"baseline-browser-mapping": {
|
|
19092
|
+
"version": "2.11.23",
|
|
19093
|
+
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz",
|
|
19094
|
+
"integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ==",
|
|
19095
|
+
"dev": true
|
|
19096
|
+
},
|
|
19055
19097
|
"bcrypt-pbkdf": {
|
|
19056
19098
|
"version": "1.0.2",
|
|
19057
19099
|
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
|
@@ -19163,15 +19205,16 @@
|
|
|
19163
19205
|
}
|
|
19164
19206
|
},
|
|
19165
19207
|
"browserslist": {
|
|
19166
|
-
"version": "4.
|
|
19167
|
-
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.
|
|
19168
|
-
"integrity": "sha512-
|
|
19208
|
+
"version": "4.28.9",
|
|
19209
|
+
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
|
|
19210
|
+
"integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
|
|
19169
19211
|
"dev": true,
|
|
19170
19212
|
"requires": {
|
|
19171
|
-
"
|
|
19172
|
-
"
|
|
19173
|
-
"
|
|
19174
|
-
"
|
|
19213
|
+
"baseline-browser-mapping": "^2.11.20",
|
|
19214
|
+
"caniuse-lite": "^1.0.30001810",
|
|
19215
|
+
"electron-to-chromium": "^1.5.420",
|
|
19216
|
+
"node-releases": "^2.0.54",
|
|
19217
|
+
"update-browserslist-db": "^1.3.2"
|
|
19175
19218
|
}
|
|
19176
19219
|
},
|
|
19177
19220
|
"bser": {
|
|
@@ -19296,9 +19339,9 @@
|
|
|
19296
19339
|
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
|
|
19297
19340
|
},
|
|
19298
19341
|
"caniuse-lite": {
|
|
19299
|
-
"version": "1.0.
|
|
19300
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
19301
|
-
"integrity": "sha512-
|
|
19342
|
+
"version": "1.0.30001810",
|
|
19343
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
|
|
19344
|
+
"integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
|
|
19302
19345
|
"dev": true
|
|
19303
19346
|
},
|
|
19304
19347
|
"caseless": {
|
|
@@ -19718,9 +19761,9 @@
|
|
|
19718
19761
|
}
|
|
19719
19762
|
},
|
|
19720
19763
|
"electron-to-chromium": {
|
|
19721
|
-
"version": "1.
|
|
19722
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.
|
|
19723
|
-
"integrity": "sha512-
|
|
19764
|
+
"version": "1.5.427",
|
|
19765
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz",
|
|
19766
|
+
"integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==",
|
|
19724
19767
|
"dev": true
|
|
19725
19768
|
},
|
|
19726
19769
|
"emittery": {
|
|
@@ -19787,9 +19830,9 @@
|
|
|
19787
19830
|
}
|
|
19788
19831
|
},
|
|
19789
19832
|
"escalade": {
|
|
19790
|
-
"version": "3.
|
|
19791
|
-
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.
|
|
19792
|
-
"integrity": "sha512-
|
|
19833
|
+
"version": "3.2.0",
|
|
19834
|
+
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
|
19835
|
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
|
19793
19836
|
"dev": true
|
|
19794
19837
|
},
|
|
19795
19838
|
"escape-string-regexp": {
|
|
@@ -22388,9 +22431,9 @@
|
|
|
22388
22431
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
|
22389
22432
|
},
|
|
22390
22433
|
"js-yaml": {
|
|
22391
|
-
"version": "3.
|
|
22392
|
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.
|
|
22393
|
-
"integrity": "sha512-
|
|
22434
|
+
"version": "3.15.2",
|
|
22435
|
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz",
|
|
22436
|
+
"integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==",
|
|
22394
22437
|
"requires": {
|
|
22395
22438
|
"argparse": "^1.0.7",
|
|
22396
22439
|
"esprima": "^4.0.0"
|
|
@@ -23242,9 +23285,9 @@
|
|
|
23242
23285
|
"dev": true
|
|
23243
23286
|
},
|
|
23244
23287
|
"node-releases": {
|
|
23245
|
-
"version": "2.0.
|
|
23246
|
-
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.
|
|
23247
|
-
"integrity": "sha512-
|
|
23288
|
+
"version": "2.0.55",
|
|
23289
|
+
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz",
|
|
23290
|
+
"integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==",
|
|
23248
23291
|
"dev": true
|
|
23249
23292
|
},
|
|
23250
23293
|
"nopt": {
|
|
@@ -27123,9 +27166,9 @@
|
|
|
27123
27166
|
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
|
27124
27167
|
},
|
|
27125
27168
|
"picocolors": {
|
|
27126
|
-
"version": "1.
|
|
27127
|
-
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.
|
|
27128
|
-
"integrity": "sha512-
|
|
27169
|
+
"version": "1.1.1",
|
|
27170
|
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
|
27171
|
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
27129
27172
|
"dev": true
|
|
27130
27173
|
},
|
|
27131
27174
|
"picomatch": {
|
|
@@ -28229,13 +28272,13 @@
|
|
|
28229
28272
|
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
|
28230
28273
|
},
|
|
28231
28274
|
"update-browserslist-db": {
|
|
28232
|
-
"version": "1.
|
|
28233
|
-
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.
|
|
28234
|
-
"integrity": "sha512-
|
|
28275
|
+
"version": "1.3.3",
|
|
28276
|
+
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
|
|
28277
|
+
"integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
|
|
28235
28278
|
"dev": true,
|
|
28236
28279
|
"requires": {
|
|
28237
|
-
"escalade": "^3.
|
|
28238
|
-
"picocolors": "^1.
|
|
28280
|
+
"escalade": "^3.2.0",
|
|
28281
|
+
"picocolors": "^1.1.1"
|
|
28239
28282
|
}
|
|
28240
28283
|
},
|
|
28241
28284
|
"uri-js": {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "dependabot/utils"
|
|
5
|
+
require "dependabot/package/npm_package_json"
|
|
5
6
|
require "dependabot/bun/file_parser/lockfile_parser"
|
|
6
7
|
require "sorbet-runtime"
|
|
7
8
|
|
|
@@ -87,7 +88,7 @@ module Dependabot
|
|
|
87
88
|
def workspaces_lockfile?(lockfile)
|
|
88
89
|
return false unless ["yarn.lock", "package-lock.json", "pnpm-lock.yaml", "bun.lock"].include?(lockfile.name)
|
|
89
90
|
|
|
90
|
-
return false unless
|
|
91
|
+
return false unless root_package_json_document.workspaces? || dependency_files.any? do |file|
|
|
91
92
|
file.name.end_with?("pnpm-workspace.yaml") && File.dirname(file.name) == File.dirname(lockfile.name)
|
|
92
93
|
end
|
|
93
94
|
|
|
@@ -114,14 +115,14 @@ module Dependabot
|
|
|
114
115
|
)
|
|
115
116
|
end
|
|
116
117
|
|
|
117
|
-
sig { returns(
|
|
118
|
-
def
|
|
119
|
-
@
|
|
118
|
+
sig { returns(Dependabot::Package::NpmPackageJson) }
|
|
119
|
+
def root_package_json_document
|
|
120
|
+
@root_package_json_document ||= T.let(
|
|
120
121
|
begin
|
|
121
122
|
package = T.must(dependency_files.find { |f| f.name == "package.json" })
|
|
122
|
-
|
|
123
|
+
Dependabot::Package::NpmPackageJson.from_file(package)
|
|
123
124
|
end,
|
|
124
|
-
T.nilable(
|
|
125
|
+
T.nilable(Dependabot::Package::NpmPackageJson)
|
|
125
126
|
)
|
|
126
127
|
end
|
|
127
128
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "sorbet-runtime"
|
|
@@ -110,17 +110,15 @@ module Dependabot
|
|
|
110
110
|
def fetch_package_relationships
|
|
111
111
|
return {} unless lockfile
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return {} unless packages.is_a?(Hash)
|
|
113
|
+
packages = FileParser::BunLock.new(T.must(lockfile)).records
|
|
114
|
+
return {} unless packages
|
|
116
115
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
next unless entry.is_a?(Array) && entry.first.is_a?(String)
|
|
116
|
+
packages.each_with_object({}) do |(_key, record), rels|
|
|
117
|
+
next unless record.graph_compatible?
|
|
120
118
|
|
|
121
|
-
parent_name =
|
|
122
|
-
children =
|
|
123
|
-
next
|
|
119
|
+
parent_name = record.name
|
|
120
|
+
children = record.dependency_names
|
|
121
|
+
next if children.empty?
|
|
124
122
|
|
|
125
123
|
rels[parent_name] = children
|
|
126
124
|
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
require "dependabot/bun/file_parser/bun_lock"
|
|
6
|
+
require "dependabot/package/npm_lockfile_details"
|
|
7
|
+
|
|
8
|
+
module Dependabot
|
|
9
|
+
module Bun
|
|
10
|
+
class FileParser < Dependabot::FileParsers::Base
|
|
11
|
+
class BunLock
|
|
12
|
+
class Record
|
|
13
|
+
extend T::Sig
|
|
14
|
+
|
|
15
|
+
sig { params(data: Object, path: String, context: String).void }
|
|
16
|
+
def initialize(data, path:, context:)
|
|
17
|
+
@data = data
|
|
18
|
+
@path = path
|
|
19
|
+
@context = context
|
|
20
|
+
@entry = T.let(nil, T.nilable(T::Array[Object]))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { returns(T::Boolean) }
|
|
24
|
+
def graph_compatible?
|
|
25
|
+
data = @data
|
|
26
|
+
data.is_a?(Array) && T.cast(data.first, Object).is_a?(String)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig { returns(String) }
|
|
30
|
+
def name
|
|
31
|
+
name = resolution_label.split(/(?<=\w)\@/).first
|
|
32
|
+
invalid!("#{@context}[0] must contain a package name") unless name
|
|
33
|
+
|
|
34
|
+
name
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
sig { returns(T.nilable(String)) }
|
|
38
|
+
def version
|
|
39
|
+
Version.semver_for(package_resolution)&.to_s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
sig { returns(Dependabot::Package::NpmLockfileDetails) }
|
|
43
|
+
def lookup_details
|
|
44
|
+
semver = version
|
|
45
|
+
Dependabot::Package::NpmLockfileDetails.new(
|
|
46
|
+
version: semver,
|
|
47
|
+
resolution: semver ? nil : package_resolution
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
sig { returns(T::Array[String]) }
|
|
52
|
+
def dependency_names
|
|
53
|
+
details = entry[2]
|
|
54
|
+
return [] if details.nil?
|
|
55
|
+
|
|
56
|
+
invalid!("#{@context} details must be an object") unless details.is_a?(Hash)
|
|
57
|
+
dependencies = T.cast(details["dependencies"], Object)
|
|
58
|
+
return [] if dependencies.nil?
|
|
59
|
+
|
|
60
|
+
invalid!("#{@context}.dependencies must be an object") unless dependencies.is_a?(Hash)
|
|
61
|
+
dependencies.keys.map do |raw_name|
|
|
62
|
+
child = T.cast(raw_name, Object)
|
|
63
|
+
invalid!("#{@context}.dependencies keys must be strings") unless child.is_a?(String)
|
|
64
|
+
|
|
65
|
+
child
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
sig { returns(T::Array[Object]) }
|
|
72
|
+
def entry
|
|
73
|
+
return @entry if @entry
|
|
74
|
+
|
|
75
|
+
data = @data
|
|
76
|
+
invalid!("#{@context} must be an array") unless data.is_a?(Array)
|
|
77
|
+
@entry = data.map { |value| T.cast(value, Object) }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
sig { returns(String) }
|
|
81
|
+
def resolution_label
|
|
82
|
+
label = entry.first
|
|
83
|
+
invalid!("#{@context}[0] must be a string") unless label.is_a?(String)
|
|
84
|
+
|
|
85
|
+
label
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
sig { returns(T.nilable(String)) }
|
|
89
|
+
def package_resolution
|
|
90
|
+
resolution_label.split(/(?<=\w)\@/)[1]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
sig { params(message: String).returns(T.noreturn) }
|
|
94
|
+
def invalid!(message)
|
|
95
|
+
raise DependencyFileNotParseable.new(@path, "Invalid bun.lock file: #{message}")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "yaml"
|
|
5
5
|
require "dependabot/errors"
|
|
6
|
+
require "dependabot/bun/file_parser"
|
|
6
7
|
require "dependabot/bun/bun_package_manager"
|
|
7
8
|
require "dependabot/bun/helpers"
|
|
8
9
|
require "sorbet-runtime"
|
|
@@ -13,22 +14,19 @@ module Dependabot
|
|
|
13
14
|
class BunLock
|
|
14
15
|
extend T::Sig
|
|
15
16
|
|
|
17
|
+
require_relative "bun_lock/record"
|
|
18
|
+
|
|
16
19
|
sig { params(dependency_file: DependencyFile).void }
|
|
17
20
|
def initialize(dependency_file)
|
|
18
21
|
@dependency_file = dependency_file
|
|
22
|
+
@parsed = T.let(nil, T.nilable(T::Hash[Object, Object]))
|
|
23
|
+
@records = T.let(nil, T.nilable(T::Hash[String, Record]))
|
|
19
24
|
end
|
|
20
25
|
|
|
21
|
-
sig { returns(T::Hash[
|
|
26
|
+
sig { returns(T::Hash[Object, Object]) }
|
|
22
27
|
def parsed
|
|
23
28
|
@parsed ||= begin
|
|
24
|
-
content =
|
|
25
|
-
# Since bun.lock is a JSONC file, which is a subset of YAML, we can use YAML to parse it
|
|
26
|
-
YAML.load(T.must(@dependency_file.content))
|
|
27
|
-
rescue Psych::SyntaxError => e
|
|
28
|
-
raise_invalid!("malformed JSONC at line #{e.line}, column #{e.column}")
|
|
29
|
-
end
|
|
30
|
-
raise_invalid!("expected to be an object") unless content.is_a?(Hash)
|
|
31
|
-
|
|
29
|
+
content = parse_document
|
|
32
30
|
version = content["lockfileVersion"]
|
|
33
31
|
raise_invalid!("expected 'lockfileVersion' to be an integer") unless version.is_a?(Integer)
|
|
34
32
|
raise_invalid!("expected 'lockfileVersion' to be >= 0") unless version >= 0
|
|
@@ -45,7 +43,23 @@ module Dependabot
|
|
|
45
43
|
end
|
|
46
44
|
end
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
content
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
private :parsed
|
|
50
|
+
|
|
51
|
+
sig { returns(T.nilable(T::Hash[String, Record])) }
|
|
52
|
+
def records
|
|
53
|
+
return @records if @records
|
|
54
|
+
|
|
55
|
+
packages = parsed["packages"]
|
|
56
|
+
return unless packages.is_a?(Hash)
|
|
57
|
+
|
|
58
|
+
@records = packages.to_h do |raw_key, value|
|
|
59
|
+
key = T.cast(raw_key, Object)
|
|
60
|
+
raise_invalid!("expected package keys to be strings") unless key.is_a?(String)
|
|
61
|
+
|
|
62
|
+
[key, Record.new(T.cast(value, Object), path: @dependency_file.path, context: "packages.#{key}")]
|
|
49
63
|
end
|
|
50
64
|
end
|
|
51
65
|
|
|
@@ -56,24 +70,19 @@ module Dependabot
|
|
|
56
70
|
# bun.lock v0 format:
|
|
57
71
|
# https://github.com/oven-sh/bun/blob/c130df6c589fdf28f9f3c7f23ed9901140bc9349/src/install/bun.lock.zig#L595-L605
|
|
58
72
|
|
|
59
|
-
packages =
|
|
60
|
-
raise_invalid!("expected 'packages' to be an object") unless packages
|
|
61
|
-
|
|
62
|
-
packages.each do |key, details|
|
|
63
|
-
raise_invalid!("expected 'packages.#{key}' to be an array") unless details.is_a?(Array)
|
|
73
|
+
packages = records
|
|
74
|
+
raise_invalid!("expected 'packages' to be an object") unless packages
|
|
64
75
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
name, version = resolution.split(/(?<=\w)\@/)
|
|
76
|
+
packages.each_value do |record|
|
|
77
|
+
name = record.name
|
|
69
78
|
next if name.empty?
|
|
70
79
|
|
|
71
|
-
semver =
|
|
80
|
+
semver = record.version
|
|
72
81
|
next unless semver
|
|
73
82
|
|
|
74
83
|
dependency_set << Dependency.new(
|
|
75
84
|
name: name,
|
|
76
|
-
version: semver
|
|
85
|
+
version: semver,
|
|
77
86
|
package_manager: "bun",
|
|
78
87
|
requirements: []
|
|
79
88
|
)
|
|
@@ -83,33 +92,27 @@ module Dependabot
|
|
|
83
92
|
end
|
|
84
93
|
|
|
85
94
|
sig do
|
|
86
|
-
params(dependency_name: String,
|
|
87
|
-
.returns(T.nilable(
|
|
95
|
+
params(dependency_name: String, _requirement: T.nilable(String), _manifest_name: String)
|
|
96
|
+
.returns(T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
88
97
|
end
|
|
89
|
-
def details(dependency_name,
|
|
90
|
-
|
|
91
|
-
return unless packages.is_a?(Hash)
|
|
92
|
-
|
|
93
|
-
candidates =
|
|
94
|
-
packages
|
|
95
|
-
.select { |name, _| name == dependency_name }
|
|
96
|
-
.values
|
|
97
|
-
|
|
98
|
-
# If there's only one entry for this dependency, use it, even if
|
|
99
|
-
# the requirement in the lockfile doesn't match
|
|
100
|
-
if candidates.one?
|
|
101
|
-
parse_details(candidates.first)
|
|
102
|
-
else
|
|
103
|
-
candidate = candidates.find do |label, _|
|
|
104
|
-
label.scan(/(?<=\w)\@(?:npm:)?([^\s,]+)/).flatten.include?(requirement)
|
|
105
|
-
end&.last
|
|
106
|
-
parse_details(candidate)
|
|
107
|
-
end
|
|
98
|
+
def details(dependency_name, _requirement, _manifest_name)
|
|
99
|
+
records&.[](dependency_name)&.lookup_details
|
|
108
100
|
end
|
|
109
101
|
|
|
110
102
|
private
|
|
111
103
|
|
|
112
|
-
sig {
|
|
104
|
+
sig { returns(T::Hash[Object, Object]) }
|
|
105
|
+
def parse_document
|
|
106
|
+
# Since bun.lock is a JSONC file, which is a subset of YAML, we can use YAML to parse it
|
|
107
|
+
content = T.cast(YAML.load(T.must(@dependency_file.content)), Object)
|
|
108
|
+
raise_invalid!("expected to be an object") unless content.is_a?(Hash)
|
|
109
|
+
|
|
110
|
+
content.to_h { |key, value| [T.cast(key, Object), T.cast(value, Object)] }
|
|
111
|
+
rescue Psych::SyntaxError => e
|
|
112
|
+
raise_invalid!("malformed JSONC at line #{e.line}, column #{e.column}")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
sig { params(message: String).returns(T.noreturn) }
|
|
113
116
|
def raise_invalid!(message)
|
|
114
117
|
raise Dependabot::DependencyFileNotParseable.new(@dependency_file.path, "Invalid bun.lock file: #{message}")
|
|
115
118
|
end
|
|
@@ -124,40 +127,6 @@ module Dependabot
|
|
|
124
127
|
"The bun version Dependabot runs supports up to " \
|
|
125
128
|
"#{BunPackageManager::MAX_SUPPORTED_LOCKFILE_VERSION}."
|
|
126
129
|
end
|
|
127
|
-
|
|
128
|
-
sig do
|
|
129
|
-
params(entry: T.nilable(T::Array[T.untyped])).returns(T.nilable(T::Hash[String, T.untyped]))
|
|
130
|
-
end
|
|
131
|
-
def parse_details(entry)
|
|
132
|
-
return unless entry.is_a?(Array)
|
|
133
|
-
|
|
134
|
-
# Either:
|
|
135
|
-
# - "{name}@{version}", registry, details, integrity
|
|
136
|
-
# - "{name}@{resolution}", details
|
|
137
|
-
resolution = entry.first
|
|
138
|
-
return unless resolution.is_a?(String)
|
|
139
|
-
|
|
140
|
-
name, version = resolution.split(/(?<=\w)\@/)
|
|
141
|
-
semver = Version.semver_for(version)
|
|
142
|
-
|
|
143
|
-
if semver
|
|
144
|
-
registry, details, integrity = entry[1..3]
|
|
145
|
-
{
|
|
146
|
-
"name" => name,
|
|
147
|
-
"version" => semver.to_s,
|
|
148
|
-
"registry" => registry,
|
|
149
|
-
"details" => details,
|
|
150
|
-
"integrity" => integrity
|
|
151
|
-
}
|
|
152
|
-
else
|
|
153
|
-
details = entry[1]
|
|
154
|
-
{
|
|
155
|
-
"name" => name,
|
|
156
|
-
"resolution" => version,
|
|
157
|
-
"details" => details
|
|
158
|
-
}
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
130
|
end
|
|
162
131
|
end
|
|
163
132
|
end
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
require "dependabot/dependency_file"
|
|
5
5
|
require "dependabot/bun/file_parser"
|
|
6
6
|
require "dependabot/bun/helpers"
|
|
7
|
+
require "dependabot/package/npm_lockfile_details"
|
|
7
8
|
require "sorbet-runtime"
|
|
8
9
|
|
|
9
10
|
module Dependabot
|
|
@@ -45,10 +46,10 @@ module Dependabot
|
|
|
45
46
|
|
|
46
47
|
sig do
|
|
47
48
|
params(dependency_name: String, requirement: T.nilable(String), manifest_name: String)
|
|
48
|
-
.returns(T.nilable(
|
|
49
|
+
.returns(T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
49
50
|
end
|
|
50
51
|
def lockfile_details(dependency_name:, requirement:, manifest_name:)
|
|
51
|
-
details = T.let(nil, T.nilable(
|
|
52
|
+
details = T.let(nil, T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
52
53
|
potential_lockfiles_for_manifest(manifest_name).each do |lockfile|
|
|
53
54
|
details = lockfile_for(lockfile).details(dependency_name, requirement, manifest_name)
|
|
54
55
|
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
require "cgi/escape"
|
|
7
7
|
require "dependabot/dependency"
|
|
8
|
+
require "dependabot/package/npm_lockfile_details"
|
|
9
|
+
require "dependabot/package/npm_package_json"
|
|
8
10
|
require "dependabot/file_parsers"
|
|
9
11
|
require "dependabot/file_parsers/base"
|
|
10
12
|
require "dependabot/shared_helpers"
|
|
@@ -28,6 +30,7 @@ module Dependabot
|
|
|
28
30
|
require_relative "file_parser/lockfile_parser"
|
|
29
31
|
|
|
30
32
|
DEPENDENCY_TYPES = %w(dependencies devDependencies optionalDependencies).freeze
|
|
33
|
+
ALIAS_PROTOCOL = "npm:"
|
|
31
34
|
GIT_URL_REGEX = %r{
|
|
32
35
|
(?<git_prefix>^|^git.*?|^github:|^bitbucket:|^gitlab:|github\.com/)
|
|
33
36
|
(?<username>[a-z0-9-]+)/
|
|
@@ -98,7 +101,7 @@ module Dependabot
|
|
|
98
101
|
def package_manager_helper
|
|
99
102
|
@package_manager_helper ||= T.let(
|
|
100
103
|
PackageManagerHelper.new(
|
|
101
|
-
|
|
104
|
+
package_json_document.package_manager_config,
|
|
102
105
|
lockfiles,
|
|
103
106
|
registry_config_files,
|
|
104
107
|
credentials
|
|
@@ -121,9 +124,9 @@ module Dependabot
|
|
|
121
124
|
}
|
|
122
125
|
end
|
|
123
126
|
|
|
124
|
-
sig { returns(
|
|
125
|
-
def
|
|
126
|
-
|
|
127
|
+
sig { returns(Dependabot::Package::NpmPackageJson) }
|
|
128
|
+
def package_json_document
|
|
129
|
+
Dependabot::Package::NpmPackageJson.from_file(package_json)
|
|
127
130
|
rescue JSON::ParserError
|
|
128
131
|
raise Dependabot::DependencyFileNotParseable, package_json.path
|
|
129
132
|
end
|
|
@@ -162,16 +165,14 @@ module Dependabot
|
|
|
162
165
|
dependency_set = DependencySet.new
|
|
163
166
|
|
|
164
167
|
package_files.each do |file|
|
|
165
|
-
|
|
168
|
+
manifest = Dependabot::Package::NpmPackageJson.from_file(file)
|
|
166
169
|
|
|
167
170
|
# TODO: Currently, Dependabot can't handle flat dependency files
|
|
168
171
|
# (and will error at the FileUpdater stage, because the
|
|
169
172
|
# UpdateChecker doesn't take account of flat resolution).
|
|
170
|
-
next if
|
|
171
|
-
|
|
172
|
-
self.class.each_dependency(json) do |name, requirement, type|
|
|
173
|
-
next unless requirement.is_a?(String)
|
|
173
|
+
next if manifest.flat?
|
|
174
174
|
|
|
175
|
+
manifest.each_dependency do |name, requirement, type|
|
|
175
176
|
# Skip dependencies using Yarn workspace cross-references as requirements
|
|
176
177
|
next if requirement.start_with?("workspace:", "catalog:")
|
|
177
178
|
|
|
@@ -202,7 +203,7 @@ module Dependabot
|
|
|
202
203
|
end
|
|
203
204
|
|
|
204
205
|
sig do
|
|
205
|
-
params(file: DependencyFile, type:
|
|
206
|
+
params(file: DependencyFile, type: String, name: String, requirement: String)
|
|
206
207
|
.returns(T.nilable(Dependency))
|
|
207
208
|
end
|
|
208
209
|
def build_dependency(file:, type:, name:, requirement:)
|
|
@@ -274,7 +275,7 @@ module Dependabot
|
|
|
274
275
|
|
|
275
276
|
sig { params(requirement: String).returns(T::Boolean) }
|
|
276
277
|
def alias_package?(requirement)
|
|
277
|
-
requirement.start_with?(
|
|
278
|
+
requirement.start_with?(ALIAS_PROTOCOL)
|
|
278
279
|
end
|
|
279
280
|
|
|
280
281
|
sig { params(requirement: String).returns(T::Boolean) }
|
|
@@ -296,21 +297,21 @@ module Dependabot
|
|
|
296
297
|
|
|
297
298
|
sig { params(name: String).returns(T::Boolean) }
|
|
298
299
|
def aliased_package_name?(name)
|
|
299
|
-
name.include?("@#{
|
|
300
|
+
name.include?("@#{ALIAS_PROTOCOL}")
|
|
300
301
|
end
|
|
301
302
|
|
|
302
303
|
sig { returns(T::Array[String]) }
|
|
303
304
|
def workspace_package_names
|
|
304
305
|
@workspace_package_names ||= T.let(
|
|
305
306
|
package_files.filter_map do |f|
|
|
306
|
-
|
|
307
|
+
Dependabot::Package::NpmPackageJson.from_file(f).name
|
|
307
308
|
end,
|
|
308
309
|
T.nilable(T::Array[String])
|
|
309
310
|
)
|
|
310
311
|
end
|
|
311
312
|
|
|
312
313
|
sig do
|
|
313
|
-
params(requirement: String, lockfile_details: T.nilable(
|
|
314
|
+
params(requirement: String, lockfile_details: T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
314
315
|
.returns(T.nilable(T.any(String, Integer, Gem::Version)))
|
|
315
316
|
end
|
|
316
317
|
def version_for(requirement, lockfile_details)
|
|
@@ -332,10 +333,10 @@ module Dependabot
|
|
|
332
333
|
end
|
|
333
334
|
end
|
|
334
335
|
|
|
335
|
-
sig { params(lockfile_details: T.nilable(
|
|
336
|
+
sig { params(lockfile_details: T.nilable(Dependabot::Package::NpmLockfileDetails)).returns(T.nilable(String)) }
|
|
336
337
|
def git_revision_for(lockfile_details)
|
|
337
|
-
version =
|
|
338
|
-
resolved =
|
|
338
|
+
version = lockfile_details&.version
|
|
339
|
+
resolved = lockfile_details&.resolved
|
|
339
340
|
[
|
|
340
341
|
version&.split("#")&.last,
|
|
341
342
|
resolved&.split("#")&.last,
|
|
@@ -375,11 +376,11 @@ module Dependabot
|
|
|
375
376
|
end
|
|
376
377
|
|
|
377
378
|
sig do
|
|
378
|
-
params(lockfile_details: T.nilable(
|
|
379
|
+
params(lockfile_details: T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
379
380
|
.returns(T.nilable(T.any(String, Integer, Gem::Version)))
|
|
380
381
|
end
|
|
381
382
|
def lockfile_version_for(lockfile_details)
|
|
382
|
-
semver_version_for(lockfile_details&.
|
|
383
|
+
semver_version_for(lockfile_details&.version)
|
|
383
384
|
end
|
|
384
385
|
|
|
385
386
|
sig { params(version: T.nilable(String)).returns(T.nilable(T.any(String, Integer, Gem::Version))) }
|
|
@@ -398,17 +399,17 @@ module Dependabot
|
|
|
398
399
|
end
|
|
399
400
|
|
|
400
401
|
sig do
|
|
401
|
-
params(name: String, requirement: String, lockfile_details: T.nilable(
|
|
402
|
+
params(name: String, requirement: String, lockfile_details: T.nilable(Dependabot::Package::NpmLockfileDetails))
|
|
402
403
|
.returns(T.nilable(T::Hash[Symbol, T.untyped]))
|
|
403
404
|
end
|
|
404
405
|
def source_for(name, requirement, lockfile_details)
|
|
405
406
|
return git_source_for(requirement) if git_url?(requirement)
|
|
406
407
|
|
|
407
|
-
resolved_url = lockfile_details&.
|
|
408
|
+
resolved_url = lockfile_details&.resolved
|
|
408
409
|
|
|
409
|
-
resolution = lockfile_details&.
|
|
410
|
-
|
|
411
|
-
resolved_url = CGI.unescape(
|
|
410
|
+
resolution = lockfile_details&.resolution
|
|
411
|
+
package_url = resolution&.[](/__archiveUrl=(.+)/, 1)
|
|
412
|
+
resolved_url = CGI.unescape(package_url) if package_url
|
|
412
413
|
|
|
413
414
|
return unless resolved_url
|
|
414
415
|
return unless resolved_url.start_with?("http")
|
|
@@ -171,14 +171,6 @@ module Dependabot
|
|
|
171
171
|
possible_releases
|
|
172
172
|
end
|
|
173
173
|
|
|
174
|
-
sig do
|
|
175
|
-
params(filter_ignored: T::Boolean)
|
|
176
|
-
.returns(T::Array[T::Array[T.untyped]])
|
|
177
|
-
end
|
|
178
|
-
def possible_versions_with_details(filter_ignored: true)
|
|
179
|
-
possible_releases(filter_ignored: filter_ignored).map { |r| [r.version, r.details] }
|
|
180
|
-
end
|
|
181
|
-
|
|
182
174
|
sig do
|
|
183
175
|
params(releases: T::Array[Dependabot::Package::PackageRelease])
|
|
184
176
|
.returns(T::Array[Dependabot::Package::PackageRelease])
|
|
@@ -242,13 +234,6 @@ module Dependabot
|
|
|
242
234
|
.sort_by(&:version).reverse
|
|
243
235
|
end
|
|
244
236
|
|
|
245
|
-
sig { returns(T::Array[[Dependabot::Version, T::Hash[String, T.anything]]]) }
|
|
246
|
-
def possible_previous_versions_with_details
|
|
247
|
-
possible_previous_releases.map do |r|
|
|
248
|
-
[r.version, r.details]
|
|
249
|
-
end
|
|
250
|
-
end
|
|
251
|
-
|
|
252
237
|
sig { override.returns(T::Boolean) }
|
|
253
238
|
def cooldown_enabled?
|
|
254
239
|
true
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "sorbet-runtime"
|
|
@@ -6,6 +6,7 @@ require "sorbet-runtime"
|
|
|
6
6
|
require "dependabot/errors"
|
|
7
7
|
require "dependabot/git_commit_checker"
|
|
8
8
|
require "dependabot/logger"
|
|
9
|
+
require "dependabot/package/npm_registry_package"
|
|
9
10
|
require "dependabot/bun/dependency_files_filterer"
|
|
10
11
|
require "dependabot/bun/file_parser"
|
|
11
12
|
require "dependabot/bun/file_updater/npmrc_builder"
|
|
@@ -17,6 +18,7 @@ require "dependabot/bun/requirement"
|
|
|
17
18
|
require "dependabot/bun/update_checker"
|
|
18
19
|
require "dependabot/bun/version"
|
|
19
20
|
require "dependabot/shared_helpers"
|
|
21
|
+
require "dependabot/update_checkers/peer_dependency_conflict"
|
|
20
22
|
|
|
21
23
|
# rubocop:disable-next Metrics/ClassLength
|
|
22
24
|
module Dependabot
|
|
@@ -27,6 +29,8 @@ module Dependabot
|
|
|
27
29
|
|
|
28
30
|
require_relative "latest_version_finder"
|
|
29
31
|
|
|
32
|
+
PeerDependencyConflict = Dependabot::UpdateCheckers::PeerDependencyConflict
|
|
33
|
+
|
|
30
34
|
TIGHTLY_COUPLED_MONOREPOS = T.let(
|
|
31
35
|
{
|
|
32
36
|
"vue" => %w(vue vue-template-compiler)
|
|
@@ -70,7 +74,7 @@ module Dependabot
|
|
|
70
74
|
update_cooldown: T.nilable(Dependabot::Package::ReleaseCooldownOptions)
|
|
71
75
|
).void
|
|
72
76
|
end
|
|
73
|
-
def initialize(
|
|
77
|
+
def initialize(
|
|
74
78
|
dependency:,
|
|
75
79
|
dependency_files:,
|
|
76
80
|
credentials:,
|
|
@@ -101,9 +105,9 @@ module Dependabot
|
|
|
101
105
|
@paths_requiring_update_check = T.let(nil, T.nilable(T::Array[String]))
|
|
102
106
|
@top_level_dependencies = T.let(nil, T.nilable(T::Array[Dependabot::Dependency]))
|
|
103
107
|
@old_peer_dependency_errors = T.let(
|
|
104
|
-
nil, T.nilable(T::Array[
|
|
108
|
+
nil, T.nilable(T::Array[PeerDependencyConflict])
|
|
105
109
|
)
|
|
106
|
-
@peer_dependency_errors = T.let(nil, T.nilable(T::Array[
|
|
110
|
+
@peer_dependency_errors = T.let(nil, T.nilable(T::Array[PeerDependencyConflict]))
|
|
107
111
|
end
|
|
108
112
|
|
|
109
113
|
sig { returns(T.nilable(T.any(String, Gem::Version))) }
|
|
@@ -150,7 +154,7 @@ module Dependabot
|
|
|
150
154
|
)
|
|
151
155
|
}]
|
|
152
156
|
newly_broken_peer_reqs_on_dep.each do |peer_req|
|
|
153
|
-
dep_name = peer_req.
|
|
157
|
+
dep_name = peer_req.requiring_dep_name
|
|
154
158
|
dep = top_level_dependencies.find { |d| d.name == dep_name }
|
|
155
159
|
|
|
156
160
|
# Can't handle reqs from sub-deps or git source deps (yet)
|
|
@@ -226,8 +230,8 @@ module Dependabot
|
|
|
226
230
|
|
|
227
231
|
@resolve_latest_previous_version[dep] ||= begin
|
|
228
232
|
relevant_versions = latest_version_finder(dependency)
|
|
229
|
-
.
|
|
230
|
-
.map(&:
|
|
233
|
+
.possible_previous_releases
|
|
234
|
+
.map(&:version)
|
|
231
235
|
reqs = dep.requirements.filter_map(&:requirement_string)
|
|
232
236
|
.map { |r| requirement_class.requirements_array(r) }
|
|
233
237
|
|
|
@@ -388,7 +392,7 @@ module Dependabot
|
|
|
388
392
|
}]
|
|
389
393
|
end
|
|
390
394
|
|
|
391
|
-
sig { returns(T::Array[
|
|
395
|
+
sig { returns(T::Array[PeerDependencyConflict]) }
|
|
392
396
|
def peer_dependency_errors
|
|
393
397
|
return @peer_dependency_errors if @peer_dependency_errors
|
|
394
398
|
|
|
@@ -396,7 +400,7 @@ module Dependabot
|
|
|
396
400
|
@peer_dependency_errors
|
|
397
401
|
end
|
|
398
402
|
|
|
399
|
-
sig { returns(T::Array[
|
|
403
|
+
sig { returns(T::Array[PeerDependencyConflict]) }
|
|
400
404
|
def old_peer_dependency_errors
|
|
401
405
|
return @old_peer_dependency_errors if @old_peer_dependency_errors
|
|
402
406
|
|
|
@@ -409,7 +413,7 @@ module Dependabot
|
|
|
409
413
|
sig do
|
|
410
414
|
params(
|
|
411
415
|
version: T.nilable(T.any(String, Gem::Version))
|
|
412
|
-
).returns(T::Array[
|
|
416
|
+
).returns(T::Array[PeerDependencyConflict])
|
|
413
417
|
end
|
|
414
418
|
def fetch_peer_dependency_errors(version:)
|
|
415
419
|
# TODO: Add all of the error handling that the FileUpdater does
|
|
@@ -421,7 +425,7 @@ module Dependabot
|
|
|
421
425
|
|
|
422
426
|
paths_requiring_update_check.flat_map do |path|
|
|
423
427
|
run_checker(path: path, version: version)
|
|
424
|
-
end
|
|
428
|
+
end
|
|
425
429
|
end
|
|
426
430
|
rescue SharedHelpers::HelperSubprocessFailed
|
|
427
431
|
# Fall back to allowing the version through. Whatever error
|
|
@@ -430,12 +434,12 @@ module Dependabot
|
|
|
430
434
|
[]
|
|
431
435
|
end
|
|
432
436
|
|
|
433
|
-
sig { params(message: String).returns(T::Array[
|
|
437
|
+
sig { params(message: String).returns(T::Array[PeerDependencyConflict]) }
|
|
434
438
|
def handle_peer_dependency_errors(message)
|
|
435
|
-
errors = []
|
|
439
|
+
errors = T.let([], T::Array[T::Hash[String, T.nilable(String)]])
|
|
436
440
|
if message.match?(NPM6_PEER_DEP_ERROR_REGEX)
|
|
437
441
|
message.scan(NPM6_PEER_DEP_ERROR_REGEX) do
|
|
438
|
-
errors << Regexp.last_match
|
|
442
|
+
errors << T.must(Regexp.last_match).named_captures
|
|
439
443
|
end
|
|
440
444
|
elsif message.match?(NPM8_PEER_DEP_ERROR_REGEX)
|
|
441
445
|
message.scan(NPM8_PEER_DEP_ERROR_REGEX) do
|
|
@@ -444,45 +448,15 @@ module Dependabot
|
|
|
444
448
|
else
|
|
445
449
|
raise
|
|
446
450
|
end
|
|
447
|
-
errors
|
|
448
|
-
end
|
|
449
|
-
|
|
450
|
-
sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
|
451
|
-
def unmet_peer_dependencies
|
|
452
|
-
peer_dependency_errors
|
|
453
|
-
.map { |captures| error_details_from_captures(captures) }
|
|
454
|
-
end
|
|
455
|
-
|
|
456
|
-
sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
|
457
|
-
def old_unmet_peer_dependencies
|
|
458
|
-
old_peer_dependency_errors
|
|
459
|
-
.map { |captures| error_details_from_captures(captures) }
|
|
460
|
-
end
|
|
461
|
-
|
|
462
|
-
sig do
|
|
463
|
-
params(captures: T.any(T::Hash[String, T.nilable(String)], String))
|
|
464
|
-
.returns(T::Hash[Symbol, T.nilable(String)])
|
|
451
|
+
errors.filter_map { |captures| PeerDependencyConflict.from_captures(captures) }
|
|
465
452
|
end
|
|
466
|
-
def error_details_from_captures(captures)
|
|
467
|
-
return {} unless captures.is_a?(Hash)
|
|
468
453
|
|
|
469
|
-
|
|
470
|
-
requiring_dep_captures = captures.fetch("requiring_dep")
|
|
471
|
-
return {} unless required_dep_captures && requiring_dep_captures
|
|
472
|
-
|
|
473
|
-
{
|
|
474
|
-
requirement_name: required_dep_captures.sub(/@[^@]+$/, ""),
|
|
475
|
-
requirement_version: required_dep_captures.split("@").last&.delete('"'),
|
|
476
|
-
requiring_dep_name: requiring_dep_captures.sub(/@[^@]+$/, "")
|
|
477
|
-
}
|
|
478
|
-
end
|
|
479
|
-
|
|
480
|
-
sig { returns(T::Array[T::Hash[Symbol, T.nilable(String)]]) }
|
|
454
|
+
sig { returns(T::Array[PeerDependencyConflict]) }
|
|
481
455
|
def relevant_unmet_peer_dependencies # rubocop:disable Metrics/PerceivedComplexity
|
|
482
456
|
relevant_unmet_peer_dependencies =
|
|
483
|
-
|
|
484
|
-
dep
|
|
485
|
-
dep
|
|
457
|
+
peer_dependency_errors.select do |dep|
|
|
458
|
+
dep.requirement_name == dependency.name ||
|
|
459
|
+
dep.requiring_dep_name == dependency.name
|
|
486
460
|
end
|
|
487
461
|
|
|
488
462
|
unless dependency_group.nil?
|
|
@@ -490,8 +464,8 @@ module Dependabot
|
|
|
490
464
|
# the update is also updating those dependencies.
|
|
491
465
|
relevant_unmet_peer_dependencies.reject! do |dep|
|
|
492
466
|
dependency_group&.dependencies&.any? do |group_dep|
|
|
493
|
-
dep
|
|
494
|
-
dep
|
|
467
|
+
dep.requirement_name == group_dep.name ||
|
|
468
|
+
dep.requiring_dep_name == group_dep.name
|
|
495
469
|
end
|
|
496
470
|
end
|
|
497
471
|
end
|
|
@@ -500,10 +474,7 @@ module Dependabot
|
|
|
500
474
|
|
|
501
475
|
# Prune out any pre-existing warnings
|
|
502
476
|
relevant_unmet_peer_dependencies.reject do |issue|
|
|
503
|
-
|
|
504
|
-
old_issue.slice(:requirement_name, :requiring_dep_name) ==
|
|
505
|
-
issue.slice(:requirement_name, :requiring_dep_name)
|
|
506
|
-
end
|
|
477
|
+
old_peer_dependency_errors.any? { |old_issue| old_issue.same_dependencies?(issue) }
|
|
507
478
|
end
|
|
508
479
|
end
|
|
509
480
|
|
|
@@ -511,14 +482,18 @@ module Dependabot
|
|
|
511
482
|
sig { returns(T::Array[T.any(String, Gem::Version)]) }
|
|
512
483
|
def satisfying_versions
|
|
513
484
|
latest_version_finder(dependency)
|
|
514
|
-
.
|
|
515
|
-
.select do |
|
|
516
|
-
version
|
|
485
|
+
.possible_releases
|
|
486
|
+
.select do |release|
|
|
487
|
+
version = release.version
|
|
517
488
|
next false unless satisfies_peer_reqs_on_dep?(version)
|
|
518
|
-
next true unless details["peerDependencies"]
|
|
519
489
|
next true if version == version_for_dependency(dependency)
|
|
520
490
|
|
|
521
|
-
|
|
491
|
+
peer_requirements = Dependabot::Package::NpmRegistryPackage.peer_dependencies(
|
|
492
|
+
details: release.details,
|
|
493
|
+
package_name: dependency.name,
|
|
494
|
+
version: version.to_s
|
|
495
|
+
)
|
|
496
|
+
peer_requirements.all? do |dep, req|
|
|
522
497
|
dep = top_level_dependencies.find { |d| d.name == dep }
|
|
523
498
|
next false unless dep
|
|
524
499
|
next git_dependency?(dep) if req.include?("/")
|
|
@@ -530,11 +505,7 @@ module Dependabot
|
|
|
530
505
|
rescue Gem::Requirement::BadRequirementError
|
|
531
506
|
false
|
|
532
507
|
end
|
|
533
|
-
end.map
|
|
534
|
-
# Return just the version
|
|
535
|
-
version, = versions_with_details
|
|
536
|
-
version
|
|
537
|
-
end
|
|
508
|
+
end.map(&:version)
|
|
538
509
|
end
|
|
539
510
|
|
|
540
511
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
@@ -542,7 +513,7 @@ module Dependabot
|
|
|
542
513
|
sig { params(version: T.nilable(T.any(String, Gem::Version))).returns(T::Boolean) }
|
|
543
514
|
def satisfies_peer_reqs_on_dep?(version)
|
|
544
515
|
newly_broken_peer_reqs_on_dep.all? do |peer_req|
|
|
545
|
-
req = peer_req.
|
|
516
|
+
req = peer_req.requirement_version
|
|
546
517
|
|
|
547
518
|
# Git requirements can't be satisfied by a version
|
|
548
519
|
next false if req&.include?("/")
|
|
@@ -555,18 +526,22 @@ module Dependabot
|
|
|
555
526
|
end
|
|
556
527
|
|
|
557
528
|
sig { params(dep: Dependabot::Dependency).returns(T.nilable(T.any(String, Gem::Version))) }
|
|
558
|
-
def latest_version_of_dep_with_satisfied_peer_reqs(dep)
|
|
529
|
+
def latest_version_of_dep_with_satisfied_peer_reqs(dep)
|
|
559
530
|
dependency_version = version_for_dependency(dep)
|
|
560
|
-
|
|
531
|
+
release =
|
|
561
532
|
latest_version_finder(dep)
|
|
562
|
-
.
|
|
563
|
-
.find do |
|
|
564
|
-
version
|
|
533
|
+
.possible_releases
|
|
534
|
+
.find do |candidate|
|
|
535
|
+
version = candidate.version
|
|
565
536
|
|
|
566
537
|
next false unless !dependency_version || version > dependency_version
|
|
567
|
-
next true unless details["peerDependencies"]
|
|
568
538
|
|
|
569
|
-
|
|
539
|
+
peer_requirements = Dependabot::Package::NpmRegistryPackage.peer_dependencies(
|
|
540
|
+
details: candidate.details,
|
|
541
|
+
package_name: dep.name,
|
|
542
|
+
version: version.to_s
|
|
543
|
+
)
|
|
544
|
+
peer_requirements.all? do |peer_dep_name, req|
|
|
570
545
|
# Can't handle multiple peer dependencies
|
|
571
546
|
next false unless peer_dep_name == dependency.name
|
|
572
547
|
next git_dependency?(dependency) if req.include?("/")
|
|
@@ -578,7 +553,7 @@ module Dependabot
|
|
|
578
553
|
false
|
|
579
554
|
end
|
|
580
555
|
end
|
|
581
|
-
|
|
556
|
+
release&.version
|
|
582
557
|
end
|
|
583
558
|
|
|
584
559
|
sig { params(dep: Dependabot::Dependency).returns(T::Boolean) }
|
|
@@ -589,16 +564,16 @@ module Dependabot
|
|
|
589
564
|
.git_dependency?
|
|
590
565
|
end
|
|
591
566
|
|
|
592
|
-
sig { returns(T::Array[
|
|
567
|
+
sig { returns(T::Array[PeerDependencyConflict]) }
|
|
593
568
|
def newly_broken_peer_reqs_on_dep
|
|
594
569
|
relevant_unmet_peer_dependencies
|
|
595
|
-
.select { |dep| dep
|
|
570
|
+
.select { |dep| dep.requirement_name == dependency.name }
|
|
596
571
|
end
|
|
597
572
|
|
|
598
|
-
sig { returns(T::Array[
|
|
573
|
+
sig { returns(T::Array[PeerDependencyConflict]) }
|
|
599
574
|
def newly_broken_peer_reqs_from_dep
|
|
600
575
|
relevant_unmet_peer_dependencies
|
|
601
|
-
.select { |dep| dep
|
|
576
|
+
.select { |dep| dep.requiring_dep_name == dependency.name }
|
|
602
577
|
end
|
|
603
578
|
|
|
604
579
|
sig do
|
|
@@ -617,14 +592,16 @@ module Dependabot
|
|
|
617
592
|
params(
|
|
618
593
|
path: String,
|
|
619
594
|
version: T.nilable(T.any(String, Gem::Version))
|
|
620
|
-
).returns(T
|
|
595
|
+
).returns(T::Array[PeerDependencyConflict])
|
|
621
596
|
end
|
|
622
597
|
def run_checker(path:, version:)
|
|
623
598
|
bun_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.bun_locks, path: path)
|
|
624
599
|
return run_bun_checker(path: path, version: version) if bun_lockfiles.any?
|
|
625
600
|
|
|
626
601
|
root_bun_lock = dependency_files_builder.root_bun_lock
|
|
627
|
-
|
|
602
|
+
return [] unless root_bun_lock
|
|
603
|
+
|
|
604
|
+
run_bun_checker(path: path, version: version)
|
|
628
605
|
rescue SharedHelpers::HelperSubprocessFailed => e
|
|
629
606
|
handle_peer_dependency_errors(e.message)
|
|
630
607
|
end
|
|
@@ -633,7 +610,7 @@ module Dependabot
|
|
|
633
610
|
params(
|
|
634
611
|
path: String,
|
|
635
612
|
version: T.nilable(T.any(String, Gem::Version))
|
|
636
|
-
).returns(T
|
|
613
|
+
).returns(T::Array[PeerDependencyConflict])
|
|
637
614
|
end
|
|
638
615
|
def run_bun_checker(path:, version:)
|
|
639
616
|
SharedHelpers.with_git_configured(credentials: credentials) do
|
|
@@ -644,6 +621,7 @@ module Dependabot
|
|
|
644
621
|
)
|
|
645
622
|
end
|
|
646
623
|
end
|
|
624
|
+
[]
|
|
647
625
|
end
|
|
648
626
|
|
|
649
627
|
sig do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-bun
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.397.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.397.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.397.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: debug
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -319,6 +319,7 @@ files:
|
|
|
319
319
|
- lib/dependabot/bun/file_fetcher/path_dependency_builder.rb
|
|
320
320
|
- lib/dependabot/bun/file_parser.rb
|
|
321
321
|
- lib/dependabot/bun/file_parser/bun_lock.rb
|
|
322
|
+
- lib/dependabot/bun/file_parser/bun_lock/record.rb
|
|
322
323
|
- lib/dependabot/bun/file_parser/lockfile_parser.rb
|
|
323
324
|
- lib/dependabot/bun/file_updater.rb
|
|
324
325
|
- lib/dependabot/bun/file_updater/bun_lockfile_updater.rb
|
|
@@ -354,7 +355,7 @@ licenses:
|
|
|
354
355
|
- MIT
|
|
355
356
|
metadata:
|
|
356
357
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
357
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
358
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.397.0
|
|
358
359
|
rdoc_options: []
|
|
359
360
|
require_paths:
|
|
360
361
|
- lib
|