dependabot-npm_and_yarn 0.291.0 → 0.293.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,11 @@ require "dependabot/ecosystem"
6
6
  require "dependabot/npm_and_yarn/requirement"
7
7
  require "dependabot/npm_and_yarn/version_selector"
8
8
  require "dependabot/npm_and_yarn/registry_helper"
9
+ require "dependabot/npm_and_yarn/npm_package_manager"
10
+ require "dependabot/npm_and_yarn/yarn_package_manager"
11
+ require "dependabot/npm_and_yarn/pnpm_package_manager"
12
+ require "dependabot/npm_and_yarn/bun_package_manager"
13
+ require "dependabot/npm_and_yarn/language"
9
14
 
10
15
  module Dependabot
11
16
  module NpmAndYarn
@@ -47,152 +52,6 @@ module Dependabot
47
52
  MANIFEST_PACKAGE_MANAGER_KEY = "packageManager"
48
53
  MANIFEST_ENGINES_KEY = "engines"
49
54
 
50
- class NpmPackageManager < Ecosystem::VersionManager
51
- extend T::Sig
52
- NAME = "npm"
53
- RC_FILENAME = ".npmrc"
54
- LOCKFILE_NAME = "package-lock.json"
55
- SHRINKWRAP_LOCKFILE_NAME = "npm-shrinkwrap.json"
56
-
57
- NPM_V6 = "6"
58
- NPM_V7 = "7"
59
- NPM_V8 = "8"
60
- NPM_V9 = "9"
61
- NPM_V10 = "10"
62
-
63
- # Keep versions in ascending order
64
- SUPPORTED_VERSIONS = T.let([
65
- Version.new(NPM_V7),
66
- Version.new(NPM_V8),
67
- Version.new(NPM_V9),
68
- Version.new(NPM_V10)
69
- ].freeze, T::Array[Dependabot::Version])
70
-
71
- DEPRECATED_VERSIONS = T.let([Version.new(NPM_V6)].freeze, T::Array[Dependabot::Version])
72
-
73
- sig do
74
- params(
75
- raw_version: String,
76
- requirement: T.nilable(Dependabot::NpmAndYarn::Requirement)
77
- ).void
78
- end
79
- def initialize(raw_version, requirement: nil)
80
- super(
81
- NAME,
82
- Version.new(raw_version),
83
- DEPRECATED_VERSIONS,
84
- SUPPORTED_VERSIONS,
85
- requirement
86
- )
87
- end
88
-
89
- sig { override.returns(T::Boolean) }
90
- def deprecated?
91
- return false if unsupported?
92
- return false unless Dependabot::Experiments.enabled?(:npm_v6_deprecation_warning)
93
-
94
- deprecated_versions.include?(version)
95
- end
96
-
97
- sig { override.returns(T::Boolean) }
98
- def unsupported?
99
- return false unless Dependabot::Experiments.enabled?(:npm_v6_unsupported_error)
100
-
101
- supported_versions.all? { |supported| supported > version }
102
- end
103
- end
104
-
105
- class YarnPackageManager < Ecosystem::VersionManager
106
- extend T::Sig
107
- NAME = "yarn"
108
- RC_FILENAME = ".yarnrc"
109
- RC_YML_FILENAME = ".yarnrc.yml"
110
- LOCKFILE_NAME = "yarn.lock"
111
-
112
- YARN_V1 = "1"
113
- YARN_V2 = "2"
114
- YARN_V3 = "3"
115
-
116
- SUPPORTED_VERSIONS = T.let([
117
- Version.new(YARN_V1),
118
- Version.new(YARN_V2),
119
- Version.new(YARN_V3)
120
- ].freeze, T::Array[Dependabot::Version])
121
-
122
- DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
123
-
124
- sig do
125
- params(
126
- raw_version: String,
127
- requirement: T.nilable(Requirement)
128
- ).void
129
- end
130
- def initialize(raw_version, requirement: nil)
131
- super(
132
- NAME,
133
- Version.new(raw_version),
134
- DEPRECATED_VERSIONS,
135
- SUPPORTED_VERSIONS,
136
- requirement
137
- )
138
- end
139
-
140
- sig { override.returns(T::Boolean) }
141
- def deprecated?
142
- false
143
- end
144
-
145
- sig { override.returns(T::Boolean) }
146
- def unsupported?
147
- false
148
- end
149
- end
150
-
151
- class PNPMPackageManager < Ecosystem::VersionManager
152
- extend T::Sig
153
- NAME = "pnpm"
154
- LOCKFILE_NAME = "pnpm-lock.yaml"
155
- PNPM_WS_YML_FILENAME = "pnpm-workspace.yaml"
156
-
157
- PNPM_V7 = "7"
158
- PNPM_V8 = "8"
159
- PNPM_V9 = "9"
160
-
161
- SUPPORTED_VERSIONS = T.let([
162
- Version.new(PNPM_V7),
163
- Version.new(PNPM_V8),
164
- Version.new(PNPM_V9)
165
- ].freeze, T::Array[Dependabot::Version])
166
-
167
- DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
168
-
169
- sig do
170
- params(
171
- raw_version: String,
172
- requirement: T.nilable(Requirement)
173
- ).void
174
- end
175
- def initialize(raw_version, requirement: nil)
176
- super(
177
- NAME,
178
- Version.new(raw_version),
179
- DEPRECATED_VERSIONS,
180
- SUPPORTED_VERSIONS,
181
- requirement
182
- )
183
- end
184
-
185
- sig { override.returns(T::Boolean) }
186
- def deprecated?
187
- false
188
- end
189
-
190
- sig { override.returns(T::Boolean) }
191
- def unsupported?
192
- false
193
- end
194
- end
195
-
196
55
  DEFAULT_PACKAGE_MANAGER = NpmPackageManager::NAME
197
56
 
198
57
  # Define a type alias for the expected class interface
@@ -210,6 +69,9 @@ module Dependabot
210
69
  PNPMPackageManager::NAME => PNPMPackageManager
211
70
  }.freeze, T::Hash[String, NpmAndYarnPackageManagerClassType])
212
71
 
72
+ # Error malformed version number string
73
+ ERROR_MALFORMED_VERSION_NUMBER = "Malformed version number"
74
+
213
75
  class PackageManagerDetector
214
76
  extend T::Sig
215
77
  extend T::Helpers
@@ -274,41 +136,6 @@ module Dependabot
274
136
  end
275
137
  end
276
138
 
277
- class Language < Ecosystem::VersionManager
278
- extend T::Sig
279
- NAME = "node"
280
-
281
- SUPPORTED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
282
-
283
- DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
284
-
285
- sig do
286
- params(
287
- raw_version: T.nilable(String),
288
- requirement: T.nilable(Requirement)
289
- ).void
290
- end
291
- def initialize(raw_version, requirement: nil)
292
- super(
293
- NAME,
294
- Version.new(raw_version),
295
- DEPRECATED_VERSIONS,
296
- SUPPORTED_VERSIONS,
297
- requirement
298
- )
299
- end
300
-
301
- sig { override.returns(T::Boolean) }
302
- def deprecated?
303
- false
304
- end
305
-
306
- sig { override.returns(T::Boolean) }
307
- def unsupported?
308
- false
309
- end
310
- end
311
-
312
139
  class PackageManagerHelper
313
140
  extend T::Sig
314
141
  extend T::Helpers
@@ -349,7 +176,7 @@ module Dependabot
349
176
  sig { returns(Ecosystem::VersionManager) }
350
177
  def language
351
178
  @language ||= Language.new(
352
- Helpers.node_version,
179
+ raw_version: Helpers.node_version,
353
180
  requirement: language_requirement
354
181
  )
355
182
  end
@@ -393,6 +220,7 @@ module Dependabot
393
220
  # rubocop:disable Metrics/CyclomaticComplexity
394
221
  # rubocop:disable Metrics/AbcSize
395
222
  # rubocop:disable Metrics/PerceivedComplexity
223
+ # rubocop:disable Metrics/MethodLength
396
224
  sig { params(name: String).returns(T.nilable(T.any(Integer, String))) }
397
225
  def setup(name)
398
226
  # we prioritize version mentioned in "packageManager" instead of "engines"
@@ -405,6 +233,8 @@ module Dependabot
405
233
  return
406
234
  end
407
235
 
236
+ return package_manager.version.to_s if package_manager.deprecated? || package_manager.unsupported?
237
+
408
238
  if @engines && @manifest_package_manager.nil?
409
239
  # if "packageManager" doesn't exists in manifest file,
410
240
  # we check if we can extract "engines" information
@@ -453,6 +283,24 @@ module Dependabot
453
283
  # rubocop:enable Metrics/CyclomaticComplexity
454
284
  # rubocop:enable Metrics/AbcSize
455
285
  # rubocop:enable Metrics/PerceivedComplexity
286
+ # rubocop:enable Metrics/MethodLength
287
+
288
+ sig { params(name: String).returns(T.nilable(String)) }
289
+ def detect_version(name)
290
+ # we prioritize version mentioned in "packageManager" instead of "engines"
291
+ if @manifest_package_manager&.start_with?("#{name}@")
292
+ detected_version = @manifest_package_manager.split("@").last.to_s
293
+ end
294
+
295
+ # if "packageManager" have no version specified, we check if we can extract "engines" information
296
+ detected_version = check_engine_version(name) if !detected_version || detected_version.empty?
297
+
298
+ # if "packageManager" and "engines" both are not present, we check if we can infer the version
299
+ # from the manifest file lockfileVersion
300
+ detected_version = guessed_version(name) if !detected_version || detected_version.empty?
301
+
302
+ detected_version&.to_s
303
+ end
456
304
 
457
305
  sig { params(name: T.nilable(String)).returns(Ecosystem::VersionManager) }
458
306
  def package_manager_by_name(name)
@@ -461,6 +309,16 @@ module Dependabot
461
309
  name = ensure_valid_package_manager(name)
462
310
  package_manager_class = T.must(PACKAGE_MANAGER_CLASSES[name])
463
311
 
312
+ detected_version = detect_version(name)
313
+
314
+ # if we have a detected version, we check if it is deprecated or unsupported
315
+ if detected_version
316
+ package_manager = package_manager_class.new(
317
+ detected_version: detected_version.to_s
318
+ )
319
+ return package_manager if package_manager.deprecated? || package_manager.unsupported?
320
+ end
321
+
464
322
  installed_version = installed_version(name)
465
323
  Dependabot.logger.info("Installed version for #{name}: #{installed_version}")
466
324
 
@@ -472,9 +330,14 @@ module Dependabot
472
330
  end
473
331
 
474
332
  package_manager_class.new(
475
- installed_version,
333
+ detected_version: detected_version.to_s,
334
+ raw_version: installed_version,
476
335
  requirement: package_manager_requirement
477
336
  )
337
+ rescue ArgumentError => e
338
+ raise DependencyFileNotParseable, e.message if e.message.include?(ERROR_MALFORMED_VERSION_NUMBER)
339
+
340
+ raise
478
341
  rescue StandardError => e
479
342
  Dependabot.logger.error("Error resolving package manager for #{name || 'default'}: #{e.message}")
480
343
  raise
@@ -0,0 +1,55 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ require "dependabot/npm_and_yarn/package_manager"
5
+
6
+ module Dependabot
7
+ module NpmAndYarn
8
+ class PNPMPackageManager < Ecosystem::VersionManager
9
+ extend T::Sig
10
+ NAME = "pnpm"
11
+ LOCKFILE_NAME = "pnpm-lock.yaml"
12
+ PNPM_WS_YML_FILENAME = "pnpm-workspace.yaml"
13
+
14
+ PNPM_V7 = "7"
15
+ PNPM_V8 = "8"
16
+ PNPM_V9 = "9"
17
+
18
+ SUPPORTED_VERSIONS = T.let([
19
+ Version.new(PNPM_V7),
20
+ Version.new(PNPM_V8),
21
+ Version.new(PNPM_V9)
22
+ ].freeze, T::Array[Dependabot::Version])
23
+
24
+ DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
25
+
26
+ sig do
27
+ params(
28
+ detected_version: T.nilable(String),
29
+ raw_version: T.nilable(String),
30
+ requirement: T.nilable(Dependabot::NpmAndYarn::Requirement)
31
+ ).void
32
+ end
33
+ def initialize(detected_version: nil, raw_version: nil, requirement: nil)
34
+ super(
35
+ name: NAME,
36
+ detected_version: detected_version ? Version.new(detected_version) : nil,
37
+ version: raw_version ? Version.new(raw_version) : nil,
38
+ deprecated_versions: DEPRECATED_VERSIONS,
39
+ supported_versions: SUPPORTED_VERSIONS,
40
+ requirement: requirement
41
+ )
42
+ end
43
+
44
+ sig { override.returns(T::Boolean) }
45
+ def deprecated?
46
+ false
47
+ end
48
+
49
+ sig { override.returns(T::Boolean) }
50
+ def unsupported?
51
+ false
52
+ end
53
+ end
54
+ end
55
+ end
@@ -68,6 +68,7 @@ module Dependabot
68
68
  "package-lock.json",
69
69
  "yarn.lock",
70
70
  "npm-shrinkwrap.json",
71
+ "bun.lock",
71
72
  "pnpm-lock.yaml"
72
73
  )
73
74
  end
@@ -49,6 +49,12 @@ module Dependabot
49
49
  .select { |f| f.name.end_with?("pnpm-lock.yaml") }
50
50
  end
51
51
 
52
+ def bun_locks
53
+ @bun_locks ||=
54
+ dependency_files
55
+ .select { |f| f.name.end_with?("bun.lock") }
56
+ end
57
+
52
58
  def root_yarn_lock
53
59
  @root_yarn_lock ||=
54
60
  dependency_files
@@ -61,6 +67,12 @@ module Dependabot
61
67
  .find { |f| f.name == "pnpm-lock.yaml" }
62
68
  end
63
69
 
70
+ def root_bun_lock
71
+ @root_bun_lock ||=
72
+ dependency_files
73
+ .find { |f| f.name == "bun.lock" }
74
+ end
75
+
64
76
  def shrinkwraps
65
77
  @shrinkwraps ||=
66
78
  dependency_files
@@ -68,7 +80,7 @@ module Dependabot
68
80
  end
69
81
 
70
82
  def lockfiles
71
- [*package_locks, *shrinkwraps, *yarn_locks, *pnpm_locks]
83
+ [*package_locks, *shrinkwraps, *yarn_locks, *pnpm_locks, *bun_locks]
72
84
  end
73
85
 
74
86
  def package_files
@@ -89,12 +101,7 @@ module Dependabot
89
101
  File.write(f.name, prepared_yarn_lockfile_content(f.content))
90
102
  end
91
103
 
92
- pnpm_locks.each do |f|
93
- FileUtils.mkdir_p(Pathname.new(f.name).dirname)
94
- File.write(f.name, f.content)
95
- end
96
-
97
- [*package_locks, *shrinkwraps].each do |f|
104
+ [*package_locks, *shrinkwraps, *pnpm_locks, *bun_locks].each do |f|
98
105
  FileUtils.mkdir_p(Pathname.new(f.name).dirname)
99
106
  File.write(f.name, f.content)
100
107
  end
@@ -70,6 +70,8 @@ module Dependabot
70
70
  run_yarn_updater(path, lockfile_name)
71
71
  elsif lockfile.name.end_with?("pnpm-lock.yaml")
72
72
  run_pnpm_updater(path, lockfile_name)
73
+ elsif lockfile.name.end_with?("bun.lock")
74
+ run_bun_updater(path, lockfile_name)
73
75
  elsif !Helpers.npm8?(lockfile)
74
76
  run_npm6_updater(path, lockfile_name)
75
77
  else
@@ -153,6 +155,18 @@ module Dependabot
153
155
  end
154
156
  end
155
157
 
158
+ def run_bun_updater(path, lockfile_name)
159
+ SharedHelpers.with_git_configured(credentials: credentials) do
160
+ Dir.chdir(path) do
161
+ Helpers.run_bun_command(
162
+ "update #{dependency.name} --save-text-lockfile",
163
+ fingerprint: "update <dependency_name> --save-text-lockfile"
164
+ )
165
+ { lockfile_name => File.read(lockfile_name) }
166
+ end
167
+ end
168
+ end
169
+
156
170
  def run_npm6_updater(path, lockfile_name)
157
171
  SharedHelpers.with_git_configured(credentials: credentials) do
158
172
  Dir.chdir(path) do
@@ -413,6 +413,8 @@ module Dependabot
413
413
  end
414
414
 
415
415
  def error_details_from_captures(captures)
416
+ return {} unless captures.is_a?(Hash)
417
+
416
418
  required_dep_captures = captures.fetch("required_dep")
417
419
  requiring_dep_captures = captures.fetch("requiring_dep")
418
420
  return {} unless required_dep_captures && requiring_dep_captures
@@ -549,12 +551,18 @@ module Dependabot
549
551
  npm_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.package_locks, path: path)
550
552
  return run_npm_checker(path: path, version: version) if npm_lockfiles.any?
551
553
 
554
+ bun_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.bun_locks, path: path)
555
+ return run_bun_checker(path: path, version: version) if bun_lockfiles.any?
556
+
552
557
  root_yarn_lock = dependency_files_builder.root_yarn_lock
553
558
  return run_yarn_checker(path: path, version: version, lockfile: root_yarn_lock) if root_yarn_lock
554
559
 
555
560
  root_pnpm_lock = dependency_files_builder.root_pnpm_lock
556
561
  return run_pnpm_checker(path: path, version: version) if root_pnpm_lock
557
562
 
563
+ root_bun_lock = dependency_files_builder.root_bun_lock
564
+ return run_bun_checker(path: path, version: version) if root_bun_lock
565
+
558
566
  run_npm_checker(path: path, version: version)
559
567
  rescue SharedHelpers::HelperSubprocessFailed => e
560
568
  handle_peer_dependency_errors(e.message)
@@ -583,6 +591,17 @@ module Dependabot
583
591
  end
584
592
  end
585
593
 
594
+ def run_bun_checker(path:, version:)
595
+ SharedHelpers.with_git_configured(credentials: credentials) do
596
+ Dir.chdir(path) do
597
+ Helpers.run_bun_command(
598
+ "update #{dependency.name}@#{version} --save-text-lockfile",
599
+ fingerprint: "update <dependency_name>@<version> --save-text-lockfile"
600
+ )
601
+ end
602
+ end
603
+ end
604
+
586
605
  def run_yarn_berry_checker(path:, version:)
587
606
  # This method mimics calling a native helper in order to comply with the caller's expectations
588
607
  # Specifically we add the dependency at the specified updated version
@@ -62,8 +62,10 @@ module Dependabot
62
62
 
63
63
  sig { override.params(version: VersionParameter).void }
64
64
  def initialize(version)
65
+ version = clean_version(version)
66
+
65
67
  @version_string = T.let(version.to_s, String)
66
- version = version.gsub(/^v/, "") if version.is_a?(String)
68
+
67
69
  @build_info = T.let(nil, T.nilable(String))
68
70
 
69
71
  version, @build_info = version.to_s.split("+") if version.to_s.include?("+")
@@ -71,6 +73,20 @@ module Dependabot
71
73
  super(T.must(version))
72
74
  end
73
75
 
76
+ sig { params(version: VersionParameter).returns(VersionParameter) }
77
+ def clean_version(version)
78
+ # Check if version is a string before attempting to match
79
+ if version.is_a?(String)
80
+ # Matches @ followed by x.y.z (digits separated by dots)
81
+ if (match = version.match(/@(\d+\.\d+\.\d+)/))
82
+ version = match[1] # Just "4.5.3"
83
+ end
84
+ version = version&.gsub(/^v/, "")
85
+ end
86
+
87
+ version
88
+ end
89
+
74
90
  sig { override.params(version: VersionParameter).returns(Dependabot::NpmAndYarn::Version) }
75
91
  def self.new(version)
76
92
  T.cast(super, Dependabot::NpmAndYarn::Version)
@@ -0,0 +1,56 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ require "dependabot/npm_and_yarn/package_manager"
5
+
6
+ module Dependabot
7
+ module NpmAndYarn
8
+ class YarnPackageManager < Ecosystem::VersionManager
9
+ extend T::Sig
10
+ NAME = "yarn"
11
+ RC_FILENAME = ".yarnrc"
12
+ RC_YML_FILENAME = ".yarnrc.yml"
13
+ LOCKFILE_NAME = "yarn.lock"
14
+
15
+ YARN_V1 = "1"
16
+ YARN_V2 = "2"
17
+ YARN_V3 = "3"
18
+
19
+ SUPPORTED_VERSIONS = T.let([
20
+ Version.new(YARN_V1),
21
+ Version.new(YARN_V2),
22
+ Version.new(YARN_V3)
23
+ ].freeze, T::Array[Dependabot::Version])
24
+
25
+ DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
26
+
27
+ sig do
28
+ params(
29
+ detected_version: T.nilable(String),
30
+ raw_version: T.nilable(String),
31
+ requirement: T.nilable(Dependabot::NpmAndYarn::Requirement)
32
+ ).void
33
+ end
34
+ def initialize(detected_version: nil, raw_version: nil, requirement: nil)
35
+ super(
36
+ name: NAME,
37
+ detected_version: detected_version ? Version.new(detected_version) : nil,
38
+ version: raw_version ? Version.new(raw_version) : nil,
39
+ deprecated_versions: DEPRECATED_VERSIONS,
40
+ supported_versions: SUPPORTED_VERSIONS,
41
+ requirement: requirement
42
+ )
43
+ end
44
+
45
+ sig { override.returns(T::Boolean) }
46
+ def deprecated?
47
+ false
48
+ end
49
+
50
+ sig { override.returns(T::Boolean) }
51
+ def unsupported?
52
+ false
53
+ end
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-npm_and_yarn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.291.0
4
+ version: 0.293.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-19 00:00:00.000000000 Z
11
+ date: 2025-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.291.0
19
+ version: 0.293.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.291.0
26
+ version: 0.293.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: debug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -306,15 +306,18 @@ files:
306
306
  - helpers/test/yarn/helpers.js
307
307
  - helpers/test/yarn/updater.test.js
308
308
  - lib/dependabot/npm_and_yarn.rb
309
+ - lib/dependabot/npm_and_yarn/bun_package_manager.rb
309
310
  - lib/dependabot/npm_and_yarn/dependency_files_filterer.rb
310
311
  - lib/dependabot/npm_and_yarn/file_fetcher.rb
311
312
  - lib/dependabot/npm_and_yarn/file_fetcher/path_dependency_builder.rb
312
313
  - lib/dependabot/npm_and_yarn/file_parser.rb
314
+ - lib/dependabot/npm_and_yarn/file_parser/bun_lock.rb
313
315
  - lib/dependabot/npm_and_yarn/file_parser/json_lock.rb
314
316
  - lib/dependabot/npm_and_yarn/file_parser/lockfile_parser.rb
315
317
  - lib/dependabot/npm_and_yarn/file_parser/pnpm_lock.rb
316
318
  - lib/dependabot/npm_and_yarn/file_parser/yarn_lock.rb
317
319
  - lib/dependabot/npm_and_yarn/file_updater.rb
320
+ - lib/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater.rb
318
321
  - lib/dependabot/npm_and_yarn/file_updater/npm_lockfile_updater.rb
319
322
  - lib/dependabot/npm_and_yarn/file_updater/npmrc_builder.rb
320
323
  - lib/dependabot/npm_and_yarn/file_updater/package_json_preparer.rb
@@ -322,10 +325,13 @@ files:
322
325
  - lib/dependabot/npm_and_yarn/file_updater/pnpm_lockfile_updater.rb
323
326
  - lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb
324
327
  - lib/dependabot/npm_and_yarn/helpers.rb
328
+ - lib/dependabot/npm_and_yarn/language.rb
325
329
  - lib/dependabot/npm_and_yarn/metadata_finder.rb
326
330
  - lib/dependabot/npm_and_yarn/native_helpers.rb
331
+ - lib/dependabot/npm_and_yarn/npm_package_manager.rb
327
332
  - lib/dependabot/npm_and_yarn/package_manager.rb
328
333
  - lib/dependabot/npm_and_yarn/package_name.rb
334
+ - lib/dependabot/npm_and_yarn/pnpm_package_manager.rb
329
335
  - lib/dependabot/npm_and_yarn/registry_helper.rb
330
336
  - lib/dependabot/npm_and_yarn/registry_parser.rb
331
337
  - lib/dependabot/npm_and_yarn/requirement.rb
@@ -342,12 +348,13 @@ files:
342
348
  - lib/dependabot/npm_and_yarn/update_checker/vulnerability_auditor.rb
343
349
  - lib/dependabot/npm_and_yarn/version.rb
344
350
  - lib/dependabot/npm_and_yarn/version_selector.rb
351
+ - lib/dependabot/npm_and_yarn/yarn_package_manager.rb
345
352
  homepage: https://github.com/dependabot/dependabot-core
346
353
  licenses:
347
354
  - MIT
348
355
  metadata:
349
356
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
350
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.291.0
357
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.293.0
351
358
  post_install_message:
352
359
  rdoc_options: []
353
360
  require_paths:
@@ -363,7 +370,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
363
370
  - !ruby/object:Gem::Version
364
371
  version: 3.1.0
365
372
  requirements: []
366
- rubygems_version: 3.5.9
373
+ rubygems_version: 3.5.22
367
374
  signing_key:
368
375
  specification_version: 4
369
376
  summary: Provides Dependabot support for Javascript (npm and yarn)