purl 1.1.1 → 1.2.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/.gitmodules +3 -0
- data/CHANGELOG.md +75 -0
- data/README.md +23 -0
- data/Rakefile +237 -0
- data/lib/purl/package_url.rb +16 -15
- data/lib/purl/registry_url.rb +6 -24
- data/lib/purl/version.rb +1 -1
- data/purl-types.json +155 -117
- metadata +3 -4
- data/schemas/purl-types.schema.json +0 -154
- data/schemas/test-suite-data.schema.json +0 -134
- data/test-suite-data.json +0 -710
data/purl-types.json
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"description": "PURL types
|
|
4
|
-
"source": "https://github.com/package-url/purl-spec
|
|
5
|
-
"last_updated": "2025-07-
|
|
2
|
+
"version": "1.2.0",
|
|
3
|
+
"description": "Official PURL types with registry configurations",
|
|
4
|
+
"source": "https://github.com/package-url/purl-spec",
|
|
5
|
+
"last_updated": "2025-07-27",
|
|
6
6
|
"types": {
|
|
7
7
|
"alpm": {
|
|
8
|
-
"description": "Arch Linux and other users of the libalpm/pacman package manager",
|
|
8
|
+
"description": "Arch Linux packages and other users of the libalpm/pacman package manager.",
|
|
9
9
|
"default_registry": null,
|
|
10
10
|
"examples": [
|
|
11
|
-
"pkg:alpm/arch/pacman@6.0.
|
|
12
|
-
"pkg:alpm/arch/
|
|
13
|
-
"pkg:alpm/arch/
|
|
11
|
+
"pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64",
|
|
12
|
+
"pkg:alpm/arch/python-pip@21.0-1?arch=any",
|
|
13
|
+
"pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64"
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
"apk": {
|
|
17
|
-
"description": "APK-based packages",
|
|
17
|
+
"description": "Alpine Linux APK-based packages",
|
|
18
18
|
"default_registry": null,
|
|
19
19
|
"examples": [
|
|
20
|
-
"pkg:apk/alpine/curl@7.83.0-r0?
|
|
21
|
-
"pkg:apk/alpine/
|
|
22
|
-
"pkg:apk/alpine/musl@1.2.3-r0?distro=alpine-3.16"
|
|
20
|
+
"pkg:apk/alpine/curl@7.83.0-r0?arch=x86",
|
|
21
|
+
"pkg:apk/alpine/apk@2.12.9-r3?arch=x86"
|
|
23
22
|
]
|
|
24
23
|
},
|
|
25
24
|
"bitbucket": {
|
|
@@ -33,15 +32,16 @@
|
|
|
33
32
|
},
|
|
34
33
|
"bitnami": {
|
|
35
34
|
"description": "Bitnami-based packages",
|
|
36
|
-
"default_registry":
|
|
35
|
+
"default_registry": null,
|
|
37
36
|
"examples": [
|
|
38
|
-
"pkg:bitnami/wordpress
|
|
39
|
-
"pkg:bitnami/
|
|
40
|
-
"pkg:bitnami/
|
|
37
|
+
"pkg:bitnami/wordpress?distro=debian-12",
|
|
38
|
+
"pkg:bitnami/wordpress@6.2.0?distro=debian-12",
|
|
39
|
+
"pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12",
|
|
40
|
+
"pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4"
|
|
41
41
|
]
|
|
42
42
|
},
|
|
43
43
|
"cargo": {
|
|
44
|
-
"description": "
|
|
44
|
+
"description": "Cargo packages for Rust",
|
|
45
45
|
"default_registry": "https://crates.io",
|
|
46
46
|
"examples": [
|
|
47
47
|
"pkg:cargo/rand@0.7.2",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"cocoapods": {
|
|
64
|
-
"description": "CocoaPods",
|
|
64
|
+
"description": "CocoaPods pods",
|
|
65
65
|
"default_registry": "https://cdn.cocoapods.org/",
|
|
66
66
|
"examples": [
|
|
67
67
|
"pkg:cocoapods/Alamofire@5.6.4",
|
|
@@ -102,16 +102,27 @@
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
"conan": {
|
|
105
|
-
"description": "Conan C/C++ packages",
|
|
106
|
-
"default_registry": "https://
|
|
105
|
+
"description": "Conan C/C++ packages. The purl is designed to closely resemble the Conan-native <package-name>/<package-version>@<user>/<channel> syntax for package references as specified in https://docs.conan.io/en/1.46/cheatsheet.html#package-terminology",
|
|
106
|
+
"default_registry": "https://conan.io/center",
|
|
107
107
|
"examples": [
|
|
108
|
-
"pkg:conan/
|
|
109
|
-
"pkg:conan/openssl@
|
|
110
|
-
"pkg:conan/
|
|
111
|
-
]
|
|
108
|
+
"pkg:conan/openssl@3.0.3",
|
|
109
|
+
"pkg:conan/openssl.org/openssl@3.0.3?user=bincrafters&channel=stable",
|
|
110
|
+
"pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&shared=True&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c"
|
|
111
|
+
],
|
|
112
|
+
"registry_config": {
|
|
113
|
+
"base_url": "https://conan.io/center/recipes",
|
|
114
|
+
"route_patterns": [
|
|
115
|
+
"https://conan.io/center/recipes/:name"
|
|
116
|
+
],
|
|
117
|
+
"reverse_regex": "^https://conan\\.io/center/recipes/([^/?#]+)",
|
|
118
|
+
"components": {
|
|
119
|
+
"namespace": false,
|
|
120
|
+
"version_in_url": false
|
|
121
|
+
}
|
|
122
|
+
}
|
|
112
123
|
},
|
|
113
124
|
"conda": {
|
|
114
|
-
"description": "Conda packages",
|
|
125
|
+
"description": "conda is for Conda packages",
|
|
115
126
|
"default_registry": "https://repo.anaconda.com",
|
|
116
127
|
"examples": [
|
|
117
128
|
"pkg:conda/numpy@1.24.1",
|
|
@@ -160,16 +171,18 @@
|
|
|
160
171
|
]
|
|
161
172
|
},
|
|
162
173
|
"deb": {
|
|
163
|
-
"description": "Debian, Debian derivatives, and Ubuntu packages",
|
|
174
|
+
"description": "Debian packages, Debian derivatives, and Ubuntu packages",
|
|
164
175
|
"default_registry": null,
|
|
165
176
|
"examples": [
|
|
166
|
-
"pkg:deb/debian/curl@7.
|
|
167
|
-
"pkg:deb/
|
|
168
|
-
"pkg:deb/
|
|
177
|
+
"pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie",
|
|
178
|
+
"pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch",
|
|
179
|
+
"pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64",
|
|
180
|
+
"pkg:deb/debian/attr@1:2.4.47-2?arch=source",
|
|
181
|
+
"pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64"
|
|
169
182
|
]
|
|
170
183
|
},
|
|
171
184
|
"docker": {
|
|
172
|
-
"description": "Docker images",
|
|
185
|
+
"description": "for Docker images",
|
|
173
186
|
"default_registry": "https://hub.docker.com",
|
|
174
187
|
"examples": [
|
|
175
188
|
"pkg:docker/nginx@1.21.6",
|
|
@@ -200,12 +213,12 @@
|
|
|
200
213
|
}
|
|
201
214
|
},
|
|
202
215
|
"generic": {
|
|
203
|
-
"description": "
|
|
216
|
+
"description": "The generic type is for plain, generic packages that do not fit anywhere else such as for \"upstream-from-distro\" packages. In particular this is handy for a plain version control repository such as a bare git repo in combination with a vcs_url.",
|
|
204
217
|
"default_registry": null,
|
|
205
218
|
"examples": [
|
|
206
|
-
"pkg:generic/
|
|
207
|
-
"pkg:generic/
|
|
208
|
-
"pkg:generic/
|
|
219
|
+
"pkg:generic/openssl@1.1.10g",
|
|
220
|
+
"pkg:generic/openssl@1.1.10g?download_url=https://openssl.org/source/openssl-1.1.0g.tar.gz&checksum=sha256:de4d501267da",
|
|
221
|
+
"pkg:generic/bitwarderl?vcs_url=git%2Bhttps://git.fsfe.org/dxtr/bitwarderl%40cc55108da32"
|
|
209
222
|
]
|
|
210
223
|
},
|
|
211
224
|
"github": {
|
|
@@ -219,22 +232,24 @@
|
|
|
219
232
|
},
|
|
220
233
|
"golang": {
|
|
221
234
|
"description": "Go packages",
|
|
222
|
-
"default_registry":
|
|
235
|
+
"default_registry": "https://pkg.go.dev",
|
|
223
236
|
"examples": [
|
|
237
|
+
"pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c",
|
|
224
238
|
"pkg:golang/google.golang.org/genproto#googleapis/api/annotations",
|
|
225
|
-
"pkg:golang/github.com/gorilla/
|
|
239
|
+
"pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api"
|
|
226
240
|
],
|
|
227
241
|
"registry_config": {
|
|
228
242
|
"base_url": "https://pkg.go.dev",
|
|
229
243
|
"route_patterns": [
|
|
230
244
|
"https://pkg.go.dev/:namespace/:name",
|
|
231
|
-
"https://pkg.go.dev/:
|
|
245
|
+
"https://pkg.go.dev/:full_path"
|
|
232
246
|
],
|
|
233
|
-
"reverse_regex": "^https://pkg\\.go\\.dev/(
|
|
247
|
+
"reverse_regex": "^https://pkg\\.go\\.dev/(.+)",
|
|
234
248
|
"components": {
|
|
235
249
|
"namespace": true,
|
|
236
|
-
"namespace_required":
|
|
237
|
-
"version_in_url": false
|
|
250
|
+
"namespace_required": true,
|
|
251
|
+
"version_in_url": false,
|
|
252
|
+
"special_handling": "golang_import_path"
|
|
238
253
|
}
|
|
239
254
|
}
|
|
240
255
|
},
|
|
@@ -284,22 +299,47 @@
|
|
|
284
299
|
"description": "Hugging Face ML models",
|
|
285
300
|
"default_registry": "https://huggingface.co",
|
|
286
301
|
"examples": [
|
|
287
|
-
"pkg:huggingface/
|
|
288
|
-
"pkg:huggingface/
|
|
289
|
-
|
|
290
|
-
|
|
302
|
+
"pkg:huggingface/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027",
|
|
303
|
+
"pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co"
|
|
304
|
+
],
|
|
305
|
+
"registry_config": {
|
|
306
|
+
"base_url": "https://huggingface.co",
|
|
307
|
+
"route_patterns": [
|
|
308
|
+
"https://huggingface.co/:namespace/:name",
|
|
309
|
+
"https://huggingface.co/:name"
|
|
310
|
+
],
|
|
311
|
+
"reverse_regex": "^https://huggingface\\.co/(?:([^/?#]+)/)?([^/?#]+)",
|
|
312
|
+
"components": {
|
|
313
|
+
"namespace": true,
|
|
314
|
+
"namespace_required": false,
|
|
315
|
+
"version_in_url": false
|
|
316
|
+
}
|
|
317
|
+
}
|
|
291
318
|
},
|
|
292
319
|
"luarocks": {
|
|
293
320
|
"description": "Lua packages installed with LuaRocks",
|
|
294
321
|
"default_registry": "https://luarocks.org",
|
|
295
322
|
"examples": [
|
|
296
|
-
"pkg:luarocks/luasocket@3.
|
|
297
|
-
"pkg:luarocks/
|
|
298
|
-
"pkg:luarocks/
|
|
299
|
-
]
|
|
323
|
+
"pkg:luarocks/luasocket@3.1.0-1",
|
|
324
|
+
"pkg:luarocks/hisham/luafilesystem@1.8.0-1",
|
|
325
|
+
"pkg:luarocks/username/packagename@0.1.0-1?repository_url=https://example.com/private_rocks_server/"
|
|
326
|
+
],
|
|
327
|
+
"registry_config": {
|
|
328
|
+
"base_url": "https://luarocks.org/modules",
|
|
329
|
+
"route_patterns": [
|
|
330
|
+
"https://luarocks.org/modules/:namespace/:name",
|
|
331
|
+
"https://luarocks.org/modules/:name"
|
|
332
|
+
],
|
|
333
|
+
"reverse_regex": "^https://luarocks\\.org/modules/(?:([^/?#]+)/)?([^/?#]+)",
|
|
334
|
+
"components": {
|
|
335
|
+
"namespace": true,
|
|
336
|
+
"namespace_required": false,
|
|
337
|
+
"version_in_url": false
|
|
338
|
+
}
|
|
339
|
+
}
|
|
300
340
|
},
|
|
301
341
|
"maven": {
|
|
302
|
-
"description": "Maven JARs and related artifacts",
|
|
342
|
+
"description": "PURL type for Maven JARs and related artifacts.",
|
|
303
343
|
"default_registry": "https://repo.maven.apache.org/maven2",
|
|
304
344
|
"examples": [
|
|
305
345
|
"pkg:maven/org.apache.commons/commons-lang3@3.12.0",
|
|
@@ -322,16 +362,15 @@
|
|
|
322
362
|
}
|
|
323
363
|
},
|
|
324
364
|
"mlflow": {
|
|
325
|
-
"description": "MLflow ML models",
|
|
365
|
+
"description": "MLflow ML models (Azure ML, Databricks, etc.)",
|
|
326
366
|
"default_registry": null,
|
|
327
367
|
"examples": [
|
|
328
|
-
"pkg:mlflow/
|
|
329
|
-
"pkg:mlflow/
|
|
330
|
-
"pkg:mlflow/model/tensorflow-classification@1.5.0"
|
|
368
|
+
"pkg:mlflow/creditfraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace",
|
|
369
|
+
"pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow"
|
|
331
370
|
]
|
|
332
371
|
},
|
|
333
372
|
"npm": {
|
|
334
|
-
"description": "
|
|
373
|
+
"description": "PURL type for npm packages.",
|
|
335
374
|
"default_registry": "https://registry.npmjs.org",
|
|
336
375
|
"examples": [
|
|
337
376
|
"pkg:npm/@babel/core@7.20.0",
|
|
@@ -379,16 +418,17 @@
|
|
|
379
418
|
}
|
|
380
419
|
},
|
|
381
420
|
"oci": {
|
|
382
|
-
"description": "
|
|
421
|
+
"description": "For artifacts stored in registries that conform to the OCI Distribution Specification https://github.com/opencontainers/distribution-spec including container images built by Docker and others",
|
|
383
422
|
"default_registry": null,
|
|
384
423
|
"examples": [
|
|
385
|
-
"pkg:oci/
|
|
386
|
-
"pkg:oci/
|
|
387
|
-
"pkg:oci/
|
|
424
|
+
"pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=docker.io/library/debian&arch=amd64&tag=latest",
|
|
425
|
+
"pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=ghcr.io/debian&tag=bullseye",
|
|
426
|
+
"pkg:oci/static@sha256%3A244fd47e07d10?repository_url=gcr.io/distroless/static&tag=latest",
|
|
427
|
+
"pkg:oci/hello-wasm@sha256%3A244fd47e07d10?tag=v1"
|
|
388
428
|
]
|
|
389
429
|
},
|
|
390
430
|
"pub": {
|
|
391
|
-
"description": "Dart and Flutter packages",
|
|
431
|
+
"description": "Dart and Flutter pub packages",
|
|
392
432
|
"default_registry": "https://pub.dartlang.org",
|
|
393
433
|
"examples": [
|
|
394
434
|
"pkg:pub/http@0.13.5",
|
|
@@ -434,32 +474,30 @@
|
|
|
434
474
|
"description": "QNX packages",
|
|
435
475
|
"default_registry": null,
|
|
436
476
|
"examples": [
|
|
437
|
-
"pkg:qpkg/qnx
|
|
438
|
-
"pkg:qpkg/qnx
|
|
439
|
-
"pkg:qpkg/qnx/ph@7.1.0"
|
|
477
|
+
"pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847",
|
|
478
|
+
"pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L"
|
|
440
479
|
]
|
|
441
480
|
},
|
|
442
481
|
"rpm": {
|
|
443
|
-
"description": "
|
|
482
|
+
"description": "RPM packages",
|
|
444
483
|
"default_registry": null,
|
|
445
484
|
"examples": [
|
|
446
|
-
"pkg:rpm/fedora/curl@7.
|
|
447
|
-
"pkg:rpm/
|
|
448
|
-
"pkg:rpm/opensuse/git@2.38.1-1.1?distro=opensuse-tumbleweed"
|
|
485
|
+
"pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25",
|
|
486
|
+
"pkg:rpm/centerim@4.22.10-1.el6?arch=i686&epoch=1&distro=fedora-25"
|
|
449
487
|
]
|
|
450
488
|
},
|
|
451
489
|
"swid": {
|
|
452
|
-
"description": "Software Identification (SWID) tags",
|
|
490
|
+
"description": "PURL type for ISO-IEC 19770-2 Software Identification (SWID) tags.",
|
|
453
491
|
"default_registry": null,
|
|
454
492
|
"examples": [
|
|
455
|
-
"pkg:swid/
|
|
456
|
-
"pkg:swid/
|
|
457
|
-
"pkg:swid/
|
|
493
|
+
"pkg:swid/Acme/example.com/Enterprise+Server@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d",
|
|
494
|
+
"pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29",
|
|
495
|
+
"pkg:swid/Adobe+Systems+Incorporated/Adobe+InDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL"
|
|
458
496
|
]
|
|
459
497
|
},
|
|
460
498
|
"swift": {
|
|
461
499
|
"description": "Swift packages",
|
|
462
|
-
"default_registry":
|
|
500
|
+
"default_registry": "https://swiftpackageindex.com",
|
|
463
501
|
"examples": [
|
|
464
502
|
"pkg:swift/github.com/Alamofire/Alamofire@5.6.4",
|
|
465
503
|
"pkg:swift/github.com/apple/swift-package-manager@1.7.0"
|
|
@@ -477,9 +515,52 @@
|
|
|
477
515
|
}
|
|
478
516
|
}
|
|
479
517
|
},
|
|
518
|
+
"clojars": {
|
|
519
|
+
"description": "Clojars packages",
|
|
520
|
+
"default_registry": "https://clojars.org",
|
|
521
|
+
"examples": [
|
|
522
|
+
"pkg:clojars/org.clojure/clojure@1.11.1",
|
|
523
|
+
"pkg:clojars/ring/ring-core@1.9.5"
|
|
524
|
+
],
|
|
525
|
+
"registry_config": {
|
|
526
|
+
"base_url": "https://clojars.org",
|
|
527
|
+
"route_patterns": [
|
|
528
|
+
"https://clojars.org/:namespace/:name",
|
|
529
|
+
"https://clojars.org/:name"
|
|
530
|
+
],
|
|
531
|
+
"reverse_regex": "^https://clojars\\.org/(?:([^/?#]+)/)?([^/?#]+)",
|
|
532
|
+
"components": {
|
|
533
|
+
"namespace": true,
|
|
534
|
+
"namespace_required": false,
|
|
535
|
+
"version_in_url": false
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
"elm": {
|
|
540
|
+
"description": "Elm packages",
|
|
541
|
+
"default_registry": "https://package.elm-lang.org",
|
|
542
|
+
"examples": [
|
|
543
|
+
"pkg:elm/elm/http@2.0.0",
|
|
544
|
+
"pkg:elm/elm-community/json-extra@4.3.0"
|
|
545
|
+
],
|
|
546
|
+
"registry_config": {
|
|
547
|
+
"base_url": "https://package.elm-lang.org/packages",
|
|
548
|
+
"route_patterns": [
|
|
549
|
+
"https://package.elm-lang.org/packages/:namespace/:name/latest",
|
|
550
|
+
"https://package.elm-lang.org/packages/:namespace/:name/:version"
|
|
551
|
+
],
|
|
552
|
+
"reverse_regex": "^https://package\\.elm-lang\\.org/packages/([^/?#]+)/([^/?#]+)(?:/([^/?#]+))?",
|
|
553
|
+
"components": {
|
|
554
|
+
"namespace": true,
|
|
555
|
+
"namespace_required": true,
|
|
556
|
+
"version_in_url": true,
|
|
557
|
+
"default_version": "latest"
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
},
|
|
480
561
|
"deno": {
|
|
481
562
|
"description": "Deno packages",
|
|
482
|
-
"default_registry":
|
|
563
|
+
"default_registry": "https://deno.land",
|
|
483
564
|
"examples": [
|
|
484
565
|
"pkg:deno/oak@12.0.0",
|
|
485
566
|
"pkg:deno/std@0.177.0#http/server"
|
|
@@ -500,7 +581,7 @@
|
|
|
500
581
|
},
|
|
501
582
|
"homebrew": {
|
|
502
583
|
"description": "Homebrew packages",
|
|
503
|
-
"default_registry":
|
|
584
|
+
"default_registry": "https://formulae.brew.sh",
|
|
504
585
|
"examples": [
|
|
505
586
|
"pkg:homebrew/wget@1.21.3",
|
|
506
587
|
"pkg:homebrew/node@19.6.0"
|
|
@@ -519,7 +600,7 @@
|
|
|
519
600
|
},
|
|
520
601
|
"bioconductor": {
|
|
521
602
|
"description": "Bioconductor packages",
|
|
522
|
-
"default_registry":
|
|
603
|
+
"default_registry": "https://bioconductor.org",
|
|
523
604
|
"examples": [
|
|
524
605
|
"pkg:bioconductor/IRanges@2.28.0",
|
|
525
606
|
"pkg:bioconductor/GenomicRanges@1.46.1"
|
|
@@ -535,49 +616,6 @@
|
|
|
535
616
|
"version_in_url": false
|
|
536
617
|
}
|
|
537
618
|
}
|
|
538
|
-
},
|
|
539
|
-
"clojars": {
|
|
540
|
-
"description": "Clojars packages",
|
|
541
|
-
"default_registry": null,
|
|
542
|
-
"examples": [
|
|
543
|
-
"pkg:clojars/org.clojure/clojure@1.11.1",
|
|
544
|
-
"pkg:clojars/ring/ring-core@1.9.5"
|
|
545
|
-
],
|
|
546
|
-
"registry_config": {
|
|
547
|
-
"base_url": "https://clojars.org",
|
|
548
|
-
"route_patterns": [
|
|
549
|
-
"https://clojars.org/:namespace/:name",
|
|
550
|
-
"https://clojars.org/:name"
|
|
551
|
-
],
|
|
552
|
-
"reverse_regex": "^https://clojars\\.org/(?:([^/?#]+)/)?([^/?#]+)",
|
|
553
|
-
"components": {
|
|
554
|
-
"namespace": true,
|
|
555
|
-
"namespace_required": false,
|
|
556
|
-
"version_in_url": false
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
},
|
|
560
|
-
"elm": {
|
|
561
|
-
"description": "Elm packages",
|
|
562
|
-
"default_registry": null,
|
|
563
|
-
"examples": [
|
|
564
|
-
"pkg:elm/elm/http@2.0.0",
|
|
565
|
-
"pkg:elm/elm-community/json-extra@4.3.0"
|
|
566
|
-
],
|
|
567
|
-
"registry_config": {
|
|
568
|
-
"base_url": "https://package.elm-lang.org/packages",
|
|
569
|
-
"route_patterns": [
|
|
570
|
-
"https://package.elm-lang.org/packages/:namespace/:name/latest",
|
|
571
|
-
"https://package.elm-lang.org/packages/:namespace/:name/:version"
|
|
572
|
-
],
|
|
573
|
-
"reverse_regex": "^https://package\\.elm-lang\\.org/packages/([^/?#]+)/([^/?#]+)(?:/([^/?#]+))?",
|
|
574
|
-
"components": {
|
|
575
|
-
"namespace": true,
|
|
576
|
-
"namespace_required": true,
|
|
577
|
-
"version_in_url": true,
|
|
578
|
-
"default_version": "latest"
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
619
|
}
|
|
582
620
|
}
|
|
583
621
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: purl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Nesbitt
|
|
@@ -18,6 +18,7 @@ executables: []
|
|
|
18
18
|
extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
|
20
20
|
files:
|
|
21
|
+
- ".gitmodules"
|
|
21
22
|
- CHANGELOG.md
|
|
22
23
|
- CODE_OF_CONDUCT.md
|
|
23
24
|
- CONTRIBUTING.md
|
|
@@ -31,16 +32,14 @@ files:
|
|
|
31
32
|
- lib/purl/registry_url.rb
|
|
32
33
|
- lib/purl/version.rb
|
|
33
34
|
- purl-types.json
|
|
34
|
-
- schemas/purl-types.schema.json
|
|
35
|
-
- schemas/test-suite-data.schema.json
|
|
36
35
|
- sig/purl.rbs
|
|
37
|
-
- test-suite-data.json
|
|
38
36
|
homepage: https://github.com/andrew/purl
|
|
39
37
|
licenses: []
|
|
40
38
|
metadata:
|
|
41
39
|
allowed_push_host: https://rubygems.org
|
|
42
40
|
homepage_uri: https://github.com/andrew/purl
|
|
43
41
|
source_code_uri: https://github.com/andrew/purl
|
|
42
|
+
changelog_uri: https://github.com/andrew/purl/blob/main/CHANGELOG.md
|
|
44
43
|
rdoc_options: []
|
|
45
44
|
require_paths:
|
|
46
45
|
- lib
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-04/schema#",
|
|
3
|
-
"$id": "./schemas/purl-types.schema.json",
|
|
4
|
-
"title": "PURL Types Configuration Schema",
|
|
5
|
-
"description": "JSON schema for PURL types and registry URL patterns configuration",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": ["version", "description", "source", "last_updated", "types"],
|
|
8
|
-
"properties": {
|
|
9
|
-
"$schema": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"format": "uri",
|
|
12
|
-
"description": "JSON Schema reference for this document"
|
|
13
|
-
},
|
|
14
|
-
"version": {
|
|
15
|
-
"type": "string",
|
|
16
|
-
"description": "Version of the configuration format",
|
|
17
|
-
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
18
|
-
},
|
|
19
|
-
"description": {
|
|
20
|
-
"type": "string",
|
|
21
|
-
"description": "Description of the configuration file purpose"
|
|
22
|
-
},
|
|
23
|
-
"source": {
|
|
24
|
-
"type": "string",
|
|
25
|
-
"format": "uri",
|
|
26
|
-
"description": "Source URL for the PURL specification"
|
|
27
|
-
},
|
|
28
|
-
"last_updated": {
|
|
29
|
-
"type": "string",
|
|
30
|
-
"format": "date",
|
|
31
|
-
"description": "Date when the configuration was last updated"
|
|
32
|
-
},
|
|
33
|
-
"types": {
|
|
34
|
-
"type": "object",
|
|
35
|
-
"description": "Map of PURL type names to their configurations",
|
|
36
|
-
"patternProperties": {
|
|
37
|
-
"^[a-z][a-z0-9]*$": {
|
|
38
|
-
"$ref": "#/definitions/purlType"
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
"additionalProperties": false
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"additionalProperties": false,
|
|
45
|
-
"definitions": {
|
|
46
|
-
"purlType": {
|
|
47
|
-
"type": "object",
|
|
48
|
-
"required": ["description", "default_registry"],
|
|
49
|
-
"properties": {
|
|
50
|
-
"description": {
|
|
51
|
-
"type": "string",
|
|
52
|
-
"description": "Human-readable description of the package type"
|
|
53
|
-
},
|
|
54
|
-
"default_registry": {
|
|
55
|
-
"oneOf": [
|
|
56
|
-
{
|
|
57
|
-
"type": "string",
|
|
58
|
-
"format": "uri",
|
|
59
|
-
"description": "Default registry URL for this package type"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"type": "null",
|
|
63
|
-
"description": "No default registry for this package type"
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
},
|
|
67
|
-
"examples": {
|
|
68
|
-
"type": "array",
|
|
69
|
-
"description": "Array of example PURL strings for this type",
|
|
70
|
-
"items": {
|
|
71
|
-
"type": "string",
|
|
72
|
-
"pattern": "^pkg:[a-z][a-z0-9]*/"
|
|
73
|
-
},
|
|
74
|
-
"uniqueItems": true
|
|
75
|
-
},
|
|
76
|
-
"registry_config": {
|
|
77
|
-
"$ref": "#/definitions/registryConfig"
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"additionalProperties": false
|
|
81
|
-
},
|
|
82
|
-
"registryConfig": {
|
|
83
|
-
"type": "object",
|
|
84
|
-
"description": "Configuration for registry URL generation and parsing",
|
|
85
|
-
"properties": {
|
|
86
|
-
"base_url": {
|
|
87
|
-
"type": "string",
|
|
88
|
-
"format": "uri",
|
|
89
|
-
"description": "Base URL for registry operations"
|
|
90
|
-
},
|
|
91
|
-
"route_patterns": {
|
|
92
|
-
"type": "array",
|
|
93
|
-
"description": "Array of URL pattern templates for this registry",
|
|
94
|
-
"items": {
|
|
95
|
-
"type": "string",
|
|
96
|
-
"format": "uri-template"
|
|
97
|
-
},
|
|
98
|
-
"minItems": 1
|
|
99
|
-
},
|
|
100
|
-
"reverse_regex": {
|
|
101
|
-
"type": "string",
|
|
102
|
-
"description": "Regular expression for parsing registry URLs back to PURLs"
|
|
103
|
-
},
|
|
104
|
-
"components": {
|
|
105
|
-
"$ref": "#/definitions/componentConfig"
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
"additionalProperties": false
|
|
109
|
-
},
|
|
110
|
-
"componentConfig": {
|
|
111
|
-
"type": "object",
|
|
112
|
-
"description": "Configuration for PURL component handling",
|
|
113
|
-
"properties": {
|
|
114
|
-
"namespace": {
|
|
115
|
-
"type": "boolean",
|
|
116
|
-
"description": "Whether this type supports namespaces"
|
|
117
|
-
},
|
|
118
|
-
"namespace_required": {
|
|
119
|
-
"type": "boolean",
|
|
120
|
-
"description": "Whether namespace is required for this type"
|
|
121
|
-
},
|
|
122
|
-
"namespace_prefix": {
|
|
123
|
-
"type": "string",
|
|
124
|
-
"description": "Prefix character for namespaces (e.g., '@' for npm)"
|
|
125
|
-
},
|
|
126
|
-
"version_in_url": {
|
|
127
|
-
"type": "boolean",
|
|
128
|
-
"description": "Whether version can be included in registry URLs"
|
|
129
|
-
},
|
|
130
|
-
"version_path": {
|
|
131
|
-
"type": "string",
|
|
132
|
-
"description": "Path separator for version in URLs"
|
|
133
|
-
},
|
|
134
|
-
"version_prefix": {
|
|
135
|
-
"type": "string",
|
|
136
|
-
"description": "Prefix character for version in URLs (e.g., '@' for deno)"
|
|
137
|
-
},
|
|
138
|
-
"version_separator": {
|
|
139
|
-
"type": "string",
|
|
140
|
-
"description": "Separator character for version (e.g., '-' for hackage)"
|
|
141
|
-
},
|
|
142
|
-
"trailing_slash": {
|
|
143
|
-
"type": "boolean",
|
|
144
|
-
"description": "Whether URLs require trailing slash"
|
|
145
|
-
},
|
|
146
|
-
"default_version": {
|
|
147
|
-
"type": "string",
|
|
148
|
-
"description": "Default version string to use when none specified"
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
"additionalProperties": false
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|