bibliothecary 12.1.6 → 12.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28a553f3ccc80b401878d7d1f05d9b2ca1504e52fc0705b101759665391f8316
4
- data.tar.gz: db49351f1c52f112c5936a787135fe185bc4b4b9aab6ea02376fbe85735db512
3
+ metadata.gz: 77ce2638e657925c2ce0457675ddafea27858758ec53f68f996667eb21ac290c
4
+ data.tar.gz: 7027d2ce73799ee52fdb6665fbaa115d2d630676cf777a740d62fae5ffa90534
5
5
  SHA512:
6
- metadata.gz: a63120979de0f7f661383b6c7efafda1acc0787821eae36164bb7469fc35bf5f9028cab9cf1c53e1289d30103c57cbc064bdc9cffc91feb48745744359a0ac73
7
- data.tar.gz: 802a1ee3a8031b6b47f29f369cf8cade92e835784cbb35e7abaf25a6035160bc35043fa8fb23b47c7720b6e54139eb0f607d176f772a40869ddc030687e95bd3
6
+ metadata.gz: 9f12ee44667a46ec862d620870f1372755efe70af26243320b785e854c37e6ed7047d0988eadbe9758a9194c32d5f85772f5b2f9d69ee2a9e19e13a9873f937a
7
+ data.tar.gz: 660b68966106543fbc7c8326a77ca5cc89947321dacf8f35a19aa1ee6818e4d077a1f1f0e86f1f8a7d6e52da6d377a7f8c90ac43d1b809158fe65c94dbaeb5c5
data/CHANGELOG.md CHANGED
@@ -13,6 +13,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Removed
15
15
 
16
+ ## [12.1.8] - 2025-05-16
17
+
18
+ ### Added
19
+
20
+ - Support multiple requirements for a single package in poetry.lock.
21
+
22
+ ### Changed
23
+
24
+ ### Removed
25
+
26
+ ## [12.1.7] - 2025-04-29
27
+
28
+ ### Added
29
+
30
+ ### Changed
31
+
32
+ - Include "source" field in Dependency objects from pub files.
33
+ - Include "source" field in Dependency objects from pnpm-lock.yaml files.
34
+
35
+ ### Removed
36
+
16
37
  ## [12.1.6] - 2025-04-29
17
38
 
18
39
  ### Added
@@ -84,7 +105,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
84
105
 
85
106
  ### Added
86
107
 
87
- - Populate Bibliothecary::Dependency#source field in all parsers. This makes the source field useful when consuming
108
+ - Populate Bibliothecary::Dependency#source field in all parsers. This makes the source field useful when consuming
88
109
  from Bibliothecary, and removes a step from consumers having to populate this field themselves.
89
110
 
90
111
  ### Changed
@@ -127,9 +148,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
127
148
 
128
149
  ### Added
129
150
 
130
- - Support parsing *.spdx.json files
151
+ - Support parsing \*.spdx.json files
131
152
 
132
153
  ### Changed
154
+
133
155
  - `Bibliothecary::PURL_TYPE_MAPPING` has changed to `Bibliothecary::PurlUtil::PURL_TYPE_MAPPING`
134
156
  - `Bibliothecary::MultiParsers::CycloneDX::ManifestEntries.full_name_for_purl` has changed to `Bibliothecary::PurlUtil.full_name`
135
157
 
@@ -256,7 +256,7 @@ module Bibliothecary
256
256
  end
257
257
  end
258
258
 
259
- def self.parse_v5_pnpm_lock(parsed_contents, _source = nil)
259
+ def self.parse_v5_pnpm_lock(parsed_contents, source = nil)
260
260
  dependency_mapping = parsed_contents.fetch("dependencies", {})
261
261
  .merge(parsed_contents.fetch("devDependencies", {}))
262
262
 
@@ -283,12 +283,13 @@ module Bibliothecary
283
283
  requirement: version,
284
284
  original_name: original_name,
285
285
  original_requirement: original_requirement,
286
- type: is_dev ? "development" : "runtime"
286
+ type: is_dev ? "development" : "runtime",
287
+ source: source
287
288
  )
288
289
  end
289
290
  end
290
291
 
291
- def self.parse_v6_pnpm_lock(parsed_contents, _source = nil)
292
+ def self.parse_v6_pnpm_lock(parsed_contents, source = nil)
292
293
  dependency_mapping = parsed_contents.fetch("dependencies", {})
293
294
  .merge(parsed_contents.fetch("devDependencies", {}))
294
295
 
@@ -318,12 +319,13 @@ module Bibliothecary
318
319
  requirement: version,
319
320
  original_name: original_name,
320
321
  original_requirement: original_requirement,
321
- type: is_dev ? "development" : "runtime"
322
+ type: is_dev ? "development" : "runtime",
323
+ source: source
322
324
  )
323
325
  end
324
326
  end
325
327
 
326
- def self.parse_v9_pnpm_lock(parsed_contents, _source = nil)
328
+ def self.parse_v9_pnpm_lock(parsed_contents, source = nil)
327
329
  dependencies = parsed_contents.fetch("importers", {}).fetch(".", {}).fetch("dependencies", {})
328
330
  dev_dependencies = parsed_contents.fetch("importers", {}).fetch(".", {}).fetch("devDependencies", {})
329
331
  dependency_mapping = dependencies.merge(dev_dependencies)
@@ -365,7 +367,8 @@ module Bibliothecary
365
367
  requirement: version,
366
368
  original_name: original_name,
367
369
  original_requirement: original_requirement,
368
- type: is_dev ? "development" : "runtime"
370
+ type: is_dev ? "development" : "runtime",
371
+ source: source
369
372
  )
370
373
  end
371
374
  end
@@ -374,17 +377,17 @@ module Bibliothecary
374
377
  # lockfileVersion: '9.0'
375
378
  # lockfileVersion: '6.0'
376
379
  # lockfileVersion: '5.4'
377
- def self.parse_pnpm_lock(contents, _source = nil)
380
+ def self.parse_pnpm_lock(contents, options: {})
378
381
  parsed = YAML.load(contents)
379
382
  lockfile_version = parsed["lockfileVersion"].to_i
380
383
 
381
384
  case lockfile_version
382
385
  when 5
383
- parse_v5_pnpm_lock(parsed)
386
+ parse_v5_pnpm_lock(parsed, options.fetch(:filename, nil))
384
387
  when 6
385
- parse_v6_pnpm_lock(parsed)
388
+ parse_v6_pnpm_lock(parsed, options.fetch(:filename, nil))
386
389
  else # v9+
387
- parse_v9_pnpm_lock(parsed)
390
+ parse_v9_pnpm_lock(parsed, options.fetch(:filename, nil))
388
391
  end
389
392
  end
390
393
 
@@ -22,19 +22,20 @@ module Bibliothecary
22
22
 
23
23
  add_multi_parser(Bibliothecary::MultiParsers::DependenciesCSV)
24
24
 
25
- def self.parse_yaml_manifest(file_contents, options: {}) # rubocop:disable Lint/UnusedMethodArgument
25
+ def self.parse_yaml_manifest(file_contents, options: {})
26
26
  manifest = YAML.load file_contents
27
- map_dependencies(manifest, "dependencies", "runtime") +
28
- map_dependencies(manifest, "dev_dependencies", "development")
27
+ map_dependencies(manifest, "dependencies", "runtime", options.fetch(:filename, nil)) +
28
+ map_dependencies(manifest, "dev_dependencies", "development", options.fetch(:filename, nil))
29
29
  end
30
30
 
31
- def self.parse_yaml_lockfile(file_contents, options: {}) # rubocop:disable Lint/UnusedMethodArgument
31
+ def self.parse_yaml_lockfile(file_contents, options: {})
32
32
  manifest = YAML.load file_contents
33
33
  manifest.fetch("packages", []).map do |name, dep|
34
34
  Dependency.new(
35
35
  name: name,
36
36
  requirement: dep["version"],
37
- type: "runtime"
37
+ type: "runtime",
38
+ source: options.fetch(:filename, nil)
38
39
  )
39
40
  end
40
41
  end
@@ -142,16 +142,31 @@ module Bibliothecary
142
142
  def self.map_dependencies(packages, type, source = nil)
143
143
  return [] unless packages
144
144
 
145
- packages.map do |name, package_info|
145
+ packages.flat_map do |name, package_info|
146
146
  local = true if package_info.is_a?(Hash) && (package_info.key?("path") || package_info.key?("file"))
147
147
 
148
- Dependency.new(
149
- name: name,
150
- requirement: map_requirements(package_info),
151
- type: type,
152
- source: source,
153
- local: local
154
- )
148
+ if package_info.is_a?(Array)
149
+ # Poetry supports multiple requirements with differing specifiers for the same
150
+ # package. Break these out into a separate dep per requirement.
151
+ # https://python-poetry.org/docs/dependency-specification/#multiple-constraints-dependencies
152
+ package_info.map do |info|
153
+ Dependency.new(
154
+ name: name,
155
+ requirement: map_requirements(info),
156
+ type: type,
157
+ source: source,
158
+ local: local
159
+ )
160
+ end
161
+ else
162
+ Dependency.new(
163
+ name: name,
164
+ requirement: map_requirements(package_info),
165
+ type: type,
166
+ source: source,
167
+ local: local
168
+ )
169
+ end
155
170
  end
156
171
  end
157
172
 
@@ -160,7 +175,7 @@ module Bibliothecary
160
175
  if info["version"]
161
176
  info["version"]
162
177
  elsif info["git"]
163
- "#{info['git']}##{info['ref']}"
178
+ "#{info['git']}##{info['ref'] || info['tag']}"
164
179
  else
165
180
  "*"
166
181
  end
@@ -186,19 +201,25 @@ module Bibliothecary
186
201
  deps = []
187
202
  manifest["package"].each do |package|
188
203
  # next if group == "_meta"
189
- group = case package["category"]
190
- when "dev"
191
- "develop"
192
- else
193
- "runtime"
194
- end
195
204
 
196
- deps << Dependency.new(
197
- name: package["name"],
198
- requirement: map_requirements(package),
199
- type: group,
200
- source: options.fetch(:filename, nil)
201
- )
205
+ # Poetry <1.2.0 used singular "category" for kind
206
+ # Poetry >=1.2.0 uses plural "groups" field for kind(s)
207
+ package.values_at("category", "groups").flatten.compact
208
+ .map do |g|
209
+ if g == "dev"
210
+ "develop"
211
+ else
212
+ (g == "main" ? "runtime" : g)
213
+ end
214
+ end
215
+ .each do |group|
216
+ deps << Dependency.new(
217
+ name: package["name"],
218
+ requirement: map_requirements(package),
219
+ type: group,
220
+ source: options.fetch(:filename, nil)
221
+ )
222
+ end
202
223
  end
203
224
  deps
204
225
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bibliothecary
4
- VERSION = "12.1.6"
4
+ VERSION = "12.1.8"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibliothecary
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.1.6
4
+ version: 12.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-04-29 00:00:00.000000000 Z
10
+ date: 2025-05-16 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: commander