dependabot-bun 0.296.2 → 0.296.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/.eslintrc +11 -0
  3. data/helpers/README.md +29 -0
  4. data/helpers/build +26 -0
  5. data/helpers/jest.config.js +5 -0
  6. data/helpers/lib/npm/conflicting-dependency-parser.js +78 -0
  7. data/helpers/lib/npm/index.js +9 -0
  8. data/helpers/lib/npm/vulnerability-auditor.js +291 -0
  9. data/helpers/lib/npm6/helpers.js +25 -0
  10. data/helpers/lib/npm6/index.js +9 -0
  11. data/helpers/lib/npm6/peer-dependency-checker.js +111 -0
  12. data/helpers/lib/npm6/remove-dependencies-from-lockfile.js +22 -0
  13. data/helpers/lib/npm6/subdependency-updater.js +78 -0
  14. data/helpers/lib/npm6/updater.js +199 -0
  15. data/helpers/lib/pnpm/index.js +5 -0
  16. data/helpers/lib/pnpm/lockfile-parser.js +82 -0
  17. data/helpers/lib/yarn/conflicting-dependency-parser.js +176 -0
  18. data/helpers/lib/yarn/fix-duplicates.js +80 -0
  19. data/helpers/lib/yarn/helpers.js +54 -0
  20. data/helpers/lib/yarn/index.js +14 -0
  21. data/helpers/lib/yarn/lockfile-parser.js +21 -0
  22. data/helpers/lib/yarn/peer-dependency-checker.js +132 -0
  23. data/helpers/lib/yarn/replace-lockfile-declaration.js +57 -0
  24. data/helpers/lib/yarn/subdependency-updater.js +83 -0
  25. data/helpers/lib/yarn/updater.js +209 -0
  26. data/helpers/package-lock.json +28519 -0
  27. data/helpers/package.json +29 -0
  28. data/helpers/patches/npm++pacote+9.5.12.patch +14 -0
  29. data/helpers/run.js +30 -0
  30. data/helpers/test/npm6/conflicting-dependency-parser.test.js +66 -0
  31. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/deeply-nested/package-lock.json +591 -0
  32. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/deeply-nested/package.json +14 -0
  33. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/nested/package-lock.json +188 -0
  34. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/nested/package.json +14 -0
  35. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/simple/package-lock.json +27 -0
  36. data/helpers/test/npm6/fixtures/conflicting-dependency-parser/simple/package.json +14 -0
  37. data/helpers/test/npm6/fixtures/updater/original/package-lock.json +16 -0
  38. data/helpers/test/npm6/fixtures/updater/original/package.json +9 -0
  39. data/helpers/test/npm6/fixtures/updater/updated/package-lock.json +16 -0
  40. data/helpers/test/npm6/helpers.js +21 -0
  41. data/helpers/test/npm6/updater.test.js +30 -0
  42. data/helpers/test/pnpm/fixtures/parser/empty_version/pnpm-lock.yaml +72 -0
  43. data/helpers/test/pnpm/fixtures/parser/no_lockfile_change/pnpm-lock.yaml +2744 -0
  44. data/helpers/test/pnpm/fixtures/parser/only_dev_dependencies/pnpm-lock.yaml +16 -0
  45. data/helpers/test/pnpm/fixtures/parser/peer_disambiguation/pnpm-lock.yaml +855 -0
  46. data/helpers/test/pnpm/lockfile-parser.test.js +62 -0
  47. data/helpers/test/yarn/conflicting-dependency-parser.test.js +83 -0
  48. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/deeply-nested/package.json +14 -0
  49. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/deeply-nested/yarn.lock +496 -0
  50. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/dev-dependencies/package.json +14 -0
  51. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/dev-dependencies/yarn.lock +21 -0
  52. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/nested/package.json +14 -0
  53. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/nested/yarn.lock +183 -0
  54. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/simple/package.json +14 -0
  55. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/simple/yarn.lock +21 -0
  56. data/helpers/test/yarn/fixtures/updater/illegal_character/package.json +8 -0
  57. data/helpers/test/yarn/fixtures/updater/illegal_character/yarn.lock +14 -0
  58. data/helpers/test/yarn/fixtures/updater/original/package.json +6 -0
  59. data/helpers/test/yarn/fixtures/updater/original/yarn.lock +11 -0
  60. data/helpers/test/yarn/fixtures/updater/updated/yarn.lock +12 -0
  61. data/helpers/test/yarn/fixtures/updater/with-version-comments/package.json +5 -0
  62. data/helpers/test/yarn/fixtures/updater/with-version-comments/yarn.lock +13 -0
  63. data/helpers/test/yarn/helpers.js +18 -0
  64. data/helpers/test/yarn/updater.test.js +117 -0
  65. data/lib/dependabot/bun/bun_package_manager.rb +47 -0
  66. data/lib/dependabot/bun/constraint_helper.rb +359 -0
  67. data/lib/dependabot/bun/dependency_files_filterer.rb +157 -0
  68. data/lib/dependabot/bun/file_fetcher/path_dependency_builder.rb +184 -0
  69. data/lib/dependabot/bun/file_fetcher.rb +402 -0
  70. data/lib/dependabot/bun/file_parser/bun_lock.rb +140 -0
  71. data/lib/dependabot/bun/file_parser/lockfile_parser.rb +105 -0
  72. data/lib/dependabot/bun/file_parser.rb +477 -0
  73. data/lib/dependabot/bun/file_updater/bun_lockfile_updater.rb +144 -0
  74. data/lib/dependabot/bun/file_updater/npmrc_builder.rb +256 -0
  75. data/lib/dependabot/bun/file_updater/package_json_preparer.rb +88 -0
  76. data/lib/dependabot/bun/file_updater/package_json_updater.rb +378 -0
  77. data/lib/dependabot/bun/file_updater.rb +203 -0
  78. data/lib/dependabot/bun/helpers.rb +93 -0
  79. data/lib/dependabot/bun/language.rb +45 -0
  80. data/lib/dependabot/bun/metadata_finder.rb +214 -0
  81. data/lib/dependabot/bun/native_helpers.rb +19 -0
  82. data/lib/dependabot/bun/package_manager.rb +280 -0
  83. data/lib/dependabot/bun/package_name.rb +118 -0
  84. data/lib/dependabot/bun/pnpm_package_manager.rb +55 -0
  85. data/lib/dependabot/bun/registry_helper.rb +188 -0
  86. data/lib/dependabot/bun/registry_parser.rb +93 -0
  87. data/lib/dependabot/bun/requirement.rb +146 -0
  88. data/lib/dependabot/bun/sub_dependency_files_filterer.rb +82 -0
  89. data/lib/dependabot/bun/update_checker/conflicting_dependency_resolver.rb +59 -0
  90. data/lib/dependabot/bun/update_checker/dependency_files_builder.rb +79 -0
  91. data/lib/dependabot/bun/update_checker/latest_version_finder.rb +448 -0
  92. data/lib/dependabot/bun/update_checker/library_detector.rb +76 -0
  93. data/lib/dependabot/bun/update_checker/registry_finder.rb +279 -0
  94. data/lib/dependabot/bun/update_checker/requirements_updater.rb +206 -0
  95. data/lib/dependabot/bun/update_checker/subdependency_version_resolver.rb +154 -0
  96. data/lib/dependabot/bun/update_checker/version_resolver.rb +583 -0
  97. data/lib/dependabot/bun/update_checker/vulnerability_auditor.rb +164 -0
  98. data/lib/dependabot/bun/update_checker.rb +455 -0
  99. data/lib/dependabot/bun/version.rb +138 -0
  100. data/lib/dependabot/bun/version_selector.rb +61 -0
  101. data/lib/dependabot/bun.rb +337 -35
  102. metadata +108 -65
  103. data/lib/dependabot/javascript/bun/file_fetcher.rb +0 -77
  104. data/lib/dependabot/javascript/bun/file_parser/bun_lock.rb +0 -156
  105. data/lib/dependabot/javascript/bun/file_parser/lockfile_parser.rb +0 -55
  106. data/lib/dependabot/javascript/bun/file_parser.rb +0 -74
  107. data/lib/dependabot/javascript/bun/file_updater/lockfile_updater.rb +0 -138
  108. data/lib/dependabot/javascript/bun/file_updater.rb +0 -75
  109. data/lib/dependabot/javascript/bun/helpers.rb +0 -72
  110. data/lib/dependabot/javascript/bun/package_manager.rb +0 -48
  111. data/lib/dependabot/javascript/bun/requirement.rb +0 -11
  112. data/lib/dependabot/javascript/bun/update_checker/conflicting_dependency_resolver.rb +0 -64
  113. data/lib/dependabot/javascript/bun/update_checker/dependency_files_builder.rb +0 -47
  114. data/lib/dependabot/javascript/bun/update_checker/latest_version_finder.rb +0 -450
  115. data/lib/dependabot/javascript/bun/update_checker/library_detector.rb +0 -76
  116. data/lib/dependabot/javascript/bun/update_checker/requirements_updater.rb +0 -203
  117. data/lib/dependabot/javascript/bun/update_checker/subdependency_version_resolver.rb +0 -144
  118. data/lib/dependabot/javascript/bun/update_checker/version_resolver.rb +0 -525
  119. data/lib/dependabot/javascript/bun/update_checker/vulnerability_auditor.rb +0 -165
  120. data/lib/dependabot/javascript/bun/update_checker.rb +0 -440
  121. data/lib/dependabot/javascript/bun/version.rb +0 -11
  122. data/lib/dependabot/javascript/shared/constraint_helper.rb +0 -359
  123. data/lib/dependabot/javascript/shared/dependency_files_filterer.rb +0 -164
  124. data/lib/dependabot/javascript/shared/file_fetcher.rb +0 -283
  125. data/lib/dependabot/javascript/shared/file_parser/lockfile_parser.rb +0 -106
  126. data/lib/dependabot/javascript/shared/file_parser.rb +0 -454
  127. data/lib/dependabot/javascript/shared/file_updater/npmrc_builder.rb +0 -394
  128. data/lib/dependabot/javascript/shared/file_updater/package_json_preparer.rb +0 -87
  129. data/lib/dependabot/javascript/shared/file_updater/package_json_updater.rb +0 -376
  130. data/lib/dependabot/javascript/shared/file_updater.rb +0 -179
  131. data/lib/dependabot/javascript/shared/language.rb +0 -45
  132. data/lib/dependabot/javascript/shared/metadata_finder.rb +0 -209
  133. data/lib/dependabot/javascript/shared/native_helpers.rb +0 -21
  134. data/lib/dependabot/javascript/shared/package_manager_detector.rb +0 -72
  135. data/lib/dependabot/javascript/shared/package_name.rb +0 -118
  136. data/lib/dependabot/javascript/shared/registry_helper.rb +0 -190
  137. data/lib/dependabot/javascript/shared/registry_parser.rb +0 -93
  138. data/lib/dependabot/javascript/shared/requirement.rb +0 -144
  139. data/lib/dependabot/javascript/shared/sub_dependency_files_filterer.rb +0 -79
  140. data/lib/dependabot/javascript/shared/update_checker/dependency_files_builder.rb +0 -87
  141. data/lib/dependabot/javascript/shared/update_checker/registry_finder.rb +0 -358
  142. data/lib/dependabot/javascript/shared/version.rb +0 -133
  143. data/lib/dependabot/javascript/shared/version_selector.rb +0 -60
  144. data/lib/dependabot/javascript.rb +0 -39
@@ -1,203 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- ################################################################################
5
- # For more details on npm version constraints, see: #
6
- # https://docs.npmjs.com/misc/semver #
7
- ################################################################################
8
-
9
- module Dependabot
10
- module Javascript
11
- module Bun
12
- class UpdateChecker
13
- class RequirementsUpdater
14
- VERSION_REGEX = /[0-9]+(?:\.[A-Za-z0-9\-_]+)*/
15
- SEPARATOR = /(?<=[a-zA-Z0-9*])[\s|]+(?![\s|-])/
16
- ALLOWED_UPDATE_STRATEGIES = T.let(
17
- [
18
- RequirementsUpdateStrategy::LockfileOnly,
19
- RequirementsUpdateStrategy::WidenRanges,
20
- RequirementsUpdateStrategy::BumpVersions,
21
- RequirementsUpdateStrategy::BumpVersionsIfNecessary
22
- ].freeze,
23
- T::Array[Dependabot::RequirementsUpdateStrategy]
24
- )
25
-
26
- def initialize(requirements:, updated_source:, update_strategy:,
27
- latest_resolvable_version:)
28
- @requirements = requirements
29
- @updated_source = updated_source
30
- @update_strategy = update_strategy
31
-
32
- check_update_strategy
33
-
34
- return unless latest_resolvable_version
35
-
36
- @latest_resolvable_version =
37
- version_class.new(latest_resolvable_version)
38
- end
39
-
40
- def updated_requirements
41
- return requirements if update_strategy.lockfile_only?
42
-
43
- requirements.map do |req|
44
- req = req.merge(source: updated_source)
45
- next req unless latest_resolvable_version
46
- next initial_req_after_source_change(req) unless req[:requirement]
47
- next req if req[:requirement].match?(/^([A-Za-uw-z]|v[^\d])/)
48
-
49
- case update_strategy
50
- when RequirementsUpdateStrategy::WidenRanges then widen_requirement(req)
51
- when RequirementsUpdateStrategy::BumpVersions then update_version_requirement(req)
52
- when RequirementsUpdateStrategy::BumpVersionsIfNecessary
53
- update_version_requirement_if_needed(req)
54
- else raise "Unexpected update strategy: #{update_strategy}"
55
- end
56
- end
57
- end
58
-
59
- private
60
-
61
- attr_reader :requirements
62
- attr_reader :updated_source
63
- attr_reader :update_strategy
64
- attr_reader :latest_resolvable_version
65
-
66
- def check_update_strategy
67
- return if ALLOWED_UPDATE_STRATEGIES.include?(update_strategy)
68
-
69
- raise "Unknown update strategy: #{update_strategy}"
70
- end
71
-
72
- def updating_from_git_to_npm?
73
- return false unless updated_source.nil?
74
-
75
- original_source = requirements.filter_map { |r| r[:source] }.first
76
- original_source&.fetch(:type) == "git"
77
- end
78
-
79
- def initial_req_after_source_change(req)
80
- return req unless updating_from_git_to_npm?
81
- return req unless req[:requirement].nil?
82
-
83
- req.merge(requirement: "^#{latest_resolvable_version}")
84
- end
85
-
86
- def update_version_requirement(req)
87
- current_requirement = req[:requirement]
88
-
89
- if current_requirement.match?(/(<|-\s)/i)
90
- ruby_req = ruby_requirements(current_requirement).first
91
- return req if ruby_req.satisfied_by?(latest_resolvable_version)
92
-
93
- updated_req = update_range_requirement(current_requirement)
94
- return req.merge(requirement: updated_req)
95
- end
96
-
97
- reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
98
- req.merge(requirement: update_version_string(reqs.first))
99
- end
100
-
101
- def update_version_requirement_if_needed(req)
102
- current_requirement = req[:requirement]
103
- version = latest_resolvable_version
104
- return req if current_requirement.strip == ""
105
-
106
- ruby_reqs = ruby_requirements(current_requirement)
107
- return req if ruby_reqs.any? { |r| r.satisfied_by?(version) }
108
-
109
- update_version_requirement(req)
110
- end
111
-
112
- def widen_requirement(req)
113
- current_requirement = req[:requirement]
114
- version = latest_resolvable_version
115
- return req if current_requirement.strip == ""
116
-
117
- ruby_reqs = ruby_requirements(current_requirement)
118
- return req if ruby_reqs.any? { |r| r.satisfied_by?(version) }
119
-
120
- reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
121
-
122
- updated_requirement =
123
- if reqs.any? { |r| r.match?(/(<|-\s)/i) }
124
- update_range_requirement(current_requirement)
125
- elsif current_requirement.strip.split(SEPARATOR).count == 1
126
- update_version_string(current_requirement)
127
- else
128
- current_requirement
129
- end
130
-
131
- req.merge(requirement: updated_requirement)
132
- end
133
-
134
- def ruby_requirements(requirement_string)
135
- Dependabot::Javascript::Shared::Requirement
136
- .requirements_array(requirement_string)
137
- end
138
-
139
- def update_range_requirement(req_string)
140
- range_requirements =
141
- req_string.split(SEPARATOR).select { |r| r.match?(/<|(\s+-\s+)/) }
142
-
143
- if range_requirements.count == 1
144
- range_requirement = range_requirements.first
145
- versions = range_requirement.scan(VERSION_REGEX)
146
- upper_bound = versions.map { |v| version_class.new(v) }.max
147
- new_upper_bound = update_greatest_version(
148
- upper_bound,
149
- latest_resolvable_version
150
- )
151
-
152
- req_string.sub(
153
- upper_bound.to_s,
154
- new_upper_bound.to_s
155
- )
156
- else
157
- req_string + " || ^#{latest_resolvable_version}"
158
- end
159
- end
160
-
161
- def update_version_string(req_string)
162
- req_string
163
- .sub(VERSION_REGEX) do |old_version|
164
- if old_version.match?(/\d-/) ||
165
- latest_resolvable_version.to_s.match?(/\d-/)
166
- latest_resolvable_version.to_s
167
- else
168
- old_parts = old_version.split(".")
169
- new_parts = latest_resolvable_version.to_s.split(".")
170
- .first(old_parts.count)
171
- new_parts.map.with_index do |part, i|
172
- old_parts[i].match?(/^x\b/) ? "x" : part
173
- end.join(".")
174
- end
175
- end
176
- end
177
-
178
- def update_greatest_version(old_version, version_to_be_permitted)
179
- version = version_class.new(old_version)
180
- version = version.release if version.prerelease?
181
-
182
- index_to_update =
183
- version.segments.map.with_index { |seg, i| seg.zero? ? 0 : i }.max
184
-
185
- version.segments.map.with_index do |_, index|
186
- if index < index_to_update
187
- version_to_be_permitted.segments[index]
188
- elsif index == index_to_update
189
- version_to_be_permitted.segments[index] + 1
190
- else
191
- 0
192
- end
193
- end.join(".")
194
- end
195
-
196
- def version_class
197
- Dependabot::Javascript::Shared::Version
198
- end
199
- end
200
- end
201
- end
202
- end
203
- end
@@ -1,144 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module Dependabot
5
- module Javascript
6
- module Bun
7
- class UpdateChecker
8
- class SubdependencyVersionResolver
9
- def initialize(dependency:, credentials:, dependency_files:,
10
- ignored_versions:, latest_allowable_version:, repo_contents_path:)
11
- @dependency = dependency
12
- @credentials = credentials
13
- @dependency_files = dependency_files
14
- @ignored_versions = ignored_versions
15
- @latest_allowable_version = latest_allowable_version
16
- @repo_contents_path = repo_contents_path
17
- end
18
-
19
- def latest_resolvable_version
20
- raise "Not a subdependency!" if dependency.requirements.any?
21
- return if bundled_dependency?
22
-
23
- base_dir = dependency_files.first.directory
24
- SharedHelpers.in_a_temporary_repo_directory(base_dir, repo_contents_path) do
25
- dependency_files_builder.write_temporary_dependency_files
26
-
27
- updated_lockfiles = filtered_lockfiles.map do |lockfile|
28
- updated_content = update_subdependency_in_lockfile(lockfile)
29
- updated_lockfile = lockfile.dup
30
- updated_lockfile.content = updated_content
31
- updated_lockfile
32
- end
33
-
34
- version_from_updated_lockfiles(updated_lockfiles)
35
- end
36
- rescue SharedHelpers::HelperSubprocessFailed
37
- # TODO: Move error handling logic from the FileUpdater to this class
38
-
39
- # Return nil (no update possible) if an unknown error occurred
40
- nil
41
- end
42
-
43
- private
44
-
45
- attr_reader :dependency
46
- attr_reader :credentials
47
- attr_reader :dependency_files
48
- attr_reader :ignored_versions
49
- attr_reader :latest_allowable_version
50
- attr_reader :repo_contents_path
51
-
52
- def update_subdependency_in_lockfile(lockfile)
53
- lockfile_name = Pathname.new(lockfile.name).basename.to_s
54
- path = Pathname.new(lockfile.name).dirname.to_s
55
-
56
- updated_files = run_bun_updater(path, lockfile_name) if lockfile.name.end_with?("bun.lock")
57
-
58
- updated_files.fetch(lockfile_name)
59
- end
60
-
61
- def version_from_updated_lockfiles(updated_lockfiles)
62
- updated_files = dependency_files -
63
- dependency_files_builder.lockfiles +
64
- updated_lockfiles
65
-
66
- updated_version = NpmAndYarn::FileParser.new(
67
- dependency_files: updated_files,
68
- source: nil,
69
- credentials: credentials
70
- ).parse.find { |d| d.name == dependency.name }&.version
71
- return unless updated_version
72
-
73
- version_class.new(updated_version)
74
- end
75
-
76
- def run_bun_updater(path, lockfile_name)
77
- SharedHelpers.with_git_configured(credentials: credentials) do
78
- Dir.chdir(path) do
79
- Helpers.run_bun_command(
80
- "update #{dependency.name} --save-text-lockfile",
81
- fingerprint: "update <dependency_name> --save-text-lockfile"
82
- )
83
- { lockfile_name => File.read(lockfile_name) }
84
- end
85
- end
86
- end
87
-
88
- def version_class
89
- dependency.version_class
90
- end
91
-
92
- def updated_dependency
93
- Dependabot::Dependency.new(
94
- name: dependency.name,
95
- version: latest_allowable_version,
96
- previous_version: dependency.version,
97
- requirements: [],
98
- package_manager: dependency.package_manager
99
- )
100
- end
101
-
102
- def filtered_lockfiles
103
- @filtered_lockfiles ||=
104
- Dependabot::Javascript::Shared::SubDependencyFilesFilterer.new(
105
- dependency_files: dependency_files,
106
- updated_dependencies: [updated_dependency]
107
- ).files_requiring_update
108
- end
109
-
110
- def dependency_files_builder
111
- @dependency_files_builder ||=
112
- DependencyFilesBuilder.new(
113
- dependency: dependency,
114
- dependency_files: dependency_files,
115
- credentials: credentials
116
- )
117
- end
118
-
119
- # TODO: We should try and fix this by updating the parent that's not
120
- # bundled. For this case: `chokidar > fsevents > node-pre-gyp > tar` we
121
- # would need to update `fsevents`
122
- #
123
- # We shouldn't update bundled sub-dependencies as they have been bundled
124
- # into the release at an exact version by a parent using
125
- # `bundledDependencies`.
126
- #
127
- # For example, fsevents < 2 bundles node-pre-gyp meaning all it's
128
- # sub-dependencies get bundled into the release tarball at publish time
129
- # so you always get the same sub-dependency versions if you re-install a
130
- # specific version of fsevents.
131
- #
132
- # Updating the sub-dependency by deleting the entry works but it gets
133
- # removed from the bundled set of dependencies and moved top level
134
- # resulting in a bunch of package duplication which is pretty confusing.
135
- def bundled_dependency?
136
- dependency.subdependency_metadata
137
- &.any? { |h| h.fetch(:npm_bundled, false) } ||
138
- false
139
- end
140
- end
141
- end
142
- end
143
- end
144
- end