diff --git a/purl-types-index.json b/purl-types-index.json index d7c170fa..03189c71 100644 --- a/purl-types-index.json +++ b/purl-types-index.json @@ -30,5 +30,6 @@ "qpkg", "rpm", "swid", - "swift" + "swift", + "vscode" ] diff --git a/tests/types/vscode-test.json b/tests/types/vscode-test.json new file mode 100644 index 00000000..4b84581c --- /dev/null +++ b/tests/types/vscode-test.json @@ -0,0 +1,211 @@ +{ + "$schema": "https://packageurl.org/schemas/purl-test.schema-1.0.json", + "tests": [ + { + "description": "Parse test for basic VS Code Extension PURL with version", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/redhat/java@1.46.2025091308", + "expected_output": { + "type": "vscode", + "namespace": "redhat", + "name": "java", + "version": "1.46.2025091308", + "qualifiers": null, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Roundtrip test for basic VS Code Extension PURL with version", + "test_group": "base", + "test_type": "roundtrip", + "input": "pkg:vscode/redhat/java@1.46.2025091308", + "expected_output": "pkg:vscode/redhat/java@1.46.2025091308", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Build test for basic VS Code Extension PURL with version", + "test_group": "base", + "test_type": "build", + "input": { + "type": "vscode", + "namespace": "redhat", + "name": "java", + "version": "1.46.2025091308", + "qualifiers": null, + "subpath": null + }, + "expected_output": "pkg:vscode/redhat/java@1.46.2025091308", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Parse test for VS Code Extension PURL with platform qualifier", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/redhat/java@1.46.2025091308?platform=linux-x64", + "expected_output": { + "type": "vscode", + "namespace": "redhat", + "name": "java", + "version": "1.46.2025091308", + "qualifiers": { + "platform": "linux-x64" + }, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Roundtrip test for VS Code Extension PURL with platform qualifier", + "test_group": "base", + "test_type": "roundtrip", + "input": "pkg:vscode/redhat/java@1.46.2025091308?platform=linux-x64", + "expected_output": "pkg:vscode/redhat/java@1.46.2025091308?platform=linux-x64", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Build test for VS Code Extension PURL with platform qualifier", + "test_group": "base", + "test_type": "build", + "input": { + "type": "vscode", + "namespace": "redhat", + "name": "java", + "version": "1.46.2025091308", + "qualifiers": { + "platform": "linux-x64" + }, + "subpath": null + }, + "expected_output": "pkg:vscode/redhat/java@1.46.2025091308?platform=linux-x64", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Parse test for VS Code Extension PURL without version", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/ms-python/python", + "expected_output": { + "type": "vscode", + "namespace": "ms-python", + "name": "python", + "version": null, + "qualifiers": null, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Roundtrip test for VS Code Extension PURL without version", + "test_group": "base", + "test_type": "roundtrip", + "input": "pkg:vscode/ms-python/python", + "expected_output": "pkg:vscode/ms-python/python", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Build test for VS Code Extension PURL without version", + "test_group": "base", + "test_type": "build", + "input": { + "type": "vscode", + "namespace": "microsoft", + "name": "python", + "version": null, + "qualifiers": null, + "subpath": null + }, + "expected_output": "pkg:vscode/microsoft/python", + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Parse test for VS Code Extension PURL with darwin-arm64 platform", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/microsoft/python@2024.10.0?platform=darwin-arm64", + "expected_output": { + "type": "vscode", + "namespace": "microsoft", + "name": "python", + "version": "2024.10.0", + "qualifiers": { + "platform": "darwin-arm64" + }, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Parse test for VS Code Extension PURL with win32-x64 platform", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/golang/go@0.39.1?platform=win32-x64", + "expected_output": { + "type": "vscode", + "namespace": "golang", + "name": "go", + "version": "0.39.1", + "qualifiers": { + "platform": "win32-x64" + }, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + }, + { + "description": "Parse test for VS Code Extension PURL without namespace should fail", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/java@1.46.2025091308", + "expected_output": null, + "expected_failure": true, + "expected_failure_reason": "VS Code Extension PURLs require a namespace (publisher)" + }, + { + "description": "Build test for VS Code Extension PURL without namespace should fail", + "test_group": "base", + "test_type": "build", + "input": { + "type": "vscode", + "namespace": null, + "name": "java", + "version": "1.46.2025091308", + "qualifiers": null, + "subpath": null + }, + "expected_output": null, + "expected_failure": true, + "expected_failure_reason": "VS Code Extension PURLs require a namespace (publisher)" + }, + { + "description": "Parse test for VS Code Extension PURL with platform=universal (default)", + "test_group": "base", + "test_type": "parse", + "input": "pkg:vscode/redhat/java@1.46.2025091308?platform=universal", + "expected_output": { + "type": "vscode", + "namespace": "redhat", + "name": "java", + "version": "1.46.2025091308", + "qualifiers": { + "platform": "universal" + }, + "subpath": null + }, + "expected_failure": false, + "expected_failure_reason": null + } + ] +} diff --git a/types-doc/vscode-definition.md b/types-doc/vscode-definition.md new file mode 100644 index 00000000..859a882b --- /dev/null +++ b/types-doc/vscode-definition.md @@ -0,0 +1,55 @@ + + +# PURL Type Definition: vscode + +- **Type Name:** VS Code Extension packages +- **Description:** VS Code Extension packages +- **Schema ID:** `https://packageurl.org/types/vscode-definition.json` + +## PURL Syntax + +The structure of a PURL for this package type is: + + pkg:vscode//@?# + +## Repository Information + +- **Use Repository:** Yes +- **Default Repository URL:** https://marketplace.visualstudio.com/vscode + +## Namespace definition + +- **Requirement:** Required +- **Native Label:** publisher +- **Note:** `The namespace is the publisher or vendor of the extension (e.g., 'redhat', 'microsoft'). This corresponds to the 'Publisher' property of the 'Identity' element in the package's .vsixmanifest file.` + +## Name definition + +- **Requirement:** Required +- **Native Label:** name +- **Note:** `The extension name. This corresponds to the 'Id' property of the 'Identity' element in the package's .vsixmanifest file.` + +## Version definition + +- **Requirement:** Optional +- **Native Label:** version +- **Note:** `The extension version. This corresponds to the 'Version' property of the 'Identity' element in the package's .vsixmanifest file.` + +## Qualifiers Definition + +| Key | Requirement | Native name | Default Value | Description | +|------|-------------|-------------|---------------|-------------| +| platform | Optional | targetPlatform | universal | The target platform for the extension. Common values include 'universal', 'linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64', 'win32-x64', 'win32-arm64', etc. | + +## Examples + +- `pkg:vscode/ms-python/python@2023.25.10292213` +- `pkg:vscode/muhammad-sammy/csharp@2.15.30?repository_url=https://open-vsx.org` +- `pkg:vscode/golang/go@0.39.1?platform=win32-x64` + +## Reference URLs + +- `https://open-vsx.org/` +- `https://github.com/eclipse/openvsx` +- `https://code.visualstudio.com/api/working-with-extensions/publishing-extension#platformspecific-extensions` diff --git a/types/vscode-definition.json b/types/vscode-definition.json new file mode 100644 index 00000000..82d480f7 --- /dev/null +++ b/types/vscode-definition.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://packageurl.org/schemas/purl-type-definition.schema-1.0.json", + "$id": "https://packageurl.org/types/vscode-definition.json", + "type": "vscode", + "type_name": "VS Code Extension packages", + "description": "VS Code Extension packages", + "repository": { + "use_repository": true, + "default_repository_url": "https://marketplace.visualstudio.com/vscode" + }, + "namespace_definition": { + "requirement": "required", + "case_sensitive": false, + "native_name": "publisher", + "note": "The namespace is the publisher or vendor of the extension (e.g., 'redhat', 'microsoft'). This corresponds to the 'Publisher' property of the 'Identity' element in the package's .vsixmanifest file." + }, + "name_definition": { + "requirement": "required", + "case_sensitive": false, + "native_name": "name", + "note": "The extension name. This corresponds to the 'Id' property of the 'Identity' element in the package's .vsixmanifest file." + }, + "version_definition": { + "requirement": "optional", + "case_sensitive": false, + "native_name": "version", + "note": "The extension version. This corresponds to the 'Version' property of the 'Identity' element in the package's .vsixmanifest file." + }, + "qualifiers_definition": [ + { + "key": "platform", + "requirement": "optional", + "description": "The target platform for the extension. Common values include 'universal', 'linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64', 'win32-x64', 'win32-arm64', etc.", + "default_value": "universal", + "native_name": "targetPlatform" + } + ], + "examples": [ + "pkg:vscode/ms-python/python@2023.25.10292213", + "pkg:vscode/muhammad-sammy/csharp@2.15.30?repository_url=https://open-vsx.org", + "pkg:vscode/golang/go@0.39.1?platform=win32-x64" + ], + "reference_urls": [ + "https://open-vsx.org/", + "https://github.com/eclipse/openvsx", + "https://code.visualstudio.com/api/working-with-extensions/publishing-extension#platformspecific-extensions" + ] +}