From 60b0e0f3f44ec75b78ff80325055551b109aa6be Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Fri, 28 Jun 2024 22:22:49 +0530 Subject: [PATCH] Add parser for `swift-show-dependencies.deplock` (#3829) * Add parser for swift-show-dependencies.deplock * Add package assembly for swift-show-dependencies.deplock Reference: Reference: https://github.com/nexB/scancode.io/issues/1278 Signed-off-by: Keshav Priyadarshi --- CHANGELOG.rst | 4 + .../reference/available_package_parsers.rst | 9 +- src/packagedcode/__init__.py | 1 + src/packagedcode/swift.py | 256 +++- tests/packagedcode/data/plugin/help.txt | 11 +- .../swift/packages/vercelui/Package.resolved | 50 + .../packages/vercelui/Package.swift.deplock | 116 ++ .../vercelui/swift-show-dependencies.deplock | 65 + .../data/swift/swift-vercelui-expected.json | 1233 +++++++++++++++++ tests/packagedcode/test_swift.py | 21 + 10 files changed, 1735 insertions(+), 31 deletions(-) create mode 100644 tests/packagedcode/data/swift/packages/vercelui/Package.resolved create mode 100644 tests/packagedcode/data/swift/packages/vercelui/Package.swift.deplock create mode 100644 tests/packagedcode/data/swift/packages/vercelui/swift-show-dependencies.deplock create mode 100644 tests/packagedcode/data/swift/swift-vercelui-expected.json diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8e5d2af1df2..fd3d8e9bd41 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -42,6 +42,10 @@ v33.0.0 (next next, roadmap) from cocoapods lockfile `Podfile.lock`. See https://github.com/nexB/scancode-toolkit/pull/3827 +- Add support for parsing packages and dependency relationships + from swift `swift-show-dependencies.deplock` generated by DepLock. + See https://github.com/nexB/scancode-toolkit/pull/3829 + v32.2.0 - 2024-06-19 ---------------------- diff --git a/docs/source/reference/available_package_parsers.rst b/docs/source/reference/available_package_parsers.rst index 3bd0f0ce685..d45630bee2f 100644 --- a/docs/source/reference/available_package_parsers.rst +++ b/docs/source/reference/available_package_parsers.rst @@ -766,8 +766,9 @@ parsers in scancode-toolkit during documentation builds. - ``squashfs_disk_image`` - None - https://en.wikipedia.org/wiki/SquashFS - * - JSON dump of Package.swift created with ``swift package dump-package > Package.swift.json`` + * - JSON dump of Package.swift created by DepLock or with ``swift package dump-package > Package.swift.json`` - ``*/Package.swift.json`` + ``*/Package.swift.deplock`` - ``swift`` - ``swift_package_manifest_json`` - Swift @@ -779,6 +780,12 @@ parsers in scancode-toolkit during documentation builds. - ``swift_package_resolved`` - swift - https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html#package-dependency + * - Swift dependency graph created by DepLock + - ``*/swift-show-dependencies.deplock`` + - ``swift`` + - ``swift_package_show_dependencies`` + - Swift + - https://forums.swift.org/t/swiftpm-show-dependencies-without-fetching-dependencies/51154 * - Java Web Application Archive - ``*.war`` - ``war`` diff --git a/src/packagedcode/__init__.py b/src/packagedcode/__init__.py index 098d4ceeba4..8846faf3c33 100644 --- a/src/packagedcode/__init__.py +++ b/src/packagedcode/__init__.py @@ -203,6 +203,7 @@ swift.SwiftManifestJsonHandler, swift.SwiftPackageResolvedHandler, + swift.SwiftShowDependenciesDepLockHandler, windows.MicrosoftUpdateManifestHandler, diff --git a/src/packagedcode/swift.py b/src/packagedcode/swift.py index 2dc9b5e3551..339b3e85516 100644 --- a/src/packagedcode/swift.py +++ b/src/packagedcode/swift.py @@ -47,12 +47,76 @@ def logger_debug(*args): return logger.debug(" ".join(isinstance(a, str) and a or repr(a) for a in args)) +class SwiftShowDependenciesDepLockHandler(models.DatafileHandler): + datasource_id = "swift_package_show_dependencies" + path_patterns = ("*/swift-show-dependencies.deplock",) + default_package_type = "swift" + default_primary_language = "Swift" + description = "Swift dependency graph created by DepLock" + documentation_url = "https://forums.swift.org/t/swiftpm-show-dependencies-without-fetching-dependencies/51154" + + @classmethod + def _parse(cls, swift_dependency_relation, package_only=False): + + if TRACE: + logger_debug( + f"SwiftShowDependenciesDepLockHandler: deplock: package: {swift_dependency_relation}" + ) + + dependencies = get_flatten_dependencies( + dependency_tree=swift_dependency_relation.get("dependencies") + ) + + package_data = dict( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + # ``namespace`` is derived from repo URL and same is not available in dependency graph + # See related issue: https://github.com/nexB/scancode-toolkit/issues/3793 + name=swift_dependency_relation.get("name"), + dependencies=dependencies, + ) + + return models.PackageData.from_data(package_data, package_only) + + @classmethod + def parse(cls, location, package_only=False): + with io.open(location, encoding="utf-8") as loc: + swift_dependency_relation = json.load(loc) + + yield cls._parse(swift_dependency_relation, package_only) + + @classmethod + def assemble( + cls, package_data, resource, codebase, package_adder=models.add_to_package + ): + siblings = resource.siblings(codebase) + swift_manifest_resource = [ + r + for r in siblings + if r.name in ("Package.swift.json", "Package.swift.deplock") + ] + + # Skip the assembly if the Swift manifest is present. + # SwiftManifestJsonHandler's assembly will take care of the + # dependencies from swift-show-dependencies.deplock file. + if swift_manifest_resource: + return [] + + yield from super(SwiftShowDependenciesDepLockHandler, cls).assemble( + package_data=package_data, + resource=resource, + codebase=codebase, + package_adder=package_adder, + ) + + class SwiftManifestJsonHandler(models.DatafileHandler): datasource_id = "swift_package_manifest_json" - path_patterns = ("*/Package.swift.json",) + path_patterns = ("*/Package.swift.json", "*/Package.swift.deplock") default_package_type = "swift" default_primary_language = "Swift" - description = "JSON dump of Package.swift created with ``swift package dump-package > Package.swift.json``" + description = "JSON dump of Package.swift created by DepLock or with ``swift package dump-package > Package.swift.json``" documentation_url = "https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html" @classmethod @@ -98,41 +162,64 @@ def assemble( top-level package with resolved dependencies. """ siblings = resource.siblings(codebase) + processed_dependencies = [] swift_resolved_package_resource = [ r for r in siblings if r.name == "Package.resolved" ] - dependencies_from_manifest = package_data.dependencies - processed_dependencies = [] - if swift_resolved_package_resource: - swift_resolved_package_resource = swift_resolved_package_resource[0] - swift_resolved_package_data = swift_resolved_package_resource.package_data + swift_show_dependencies_resources = [ + r for r in siblings if r.name == "swift-show-dependencies.deplock" + ] - for package in swift_resolved_package_data: - version = package.get("version") - name = package.get("name") + if swift_show_dependencies_resources: + swift_show_dependencies_resource = swift_show_dependencies_resources[0] + swift_show_dependencies_package_data = ( + swift_show_dependencies_resource.package_data + ) + + # Dependencies from `swift-show-dependencies.deplock` supersede dependencies from other datafiles. + processed_dependencies = swift_show_dependencies_package_data[0][ + "dependencies" + ] + processed_dependencies = [ + models.DependentPackage.from_dict(i) for i in processed_dependencies + ] + + # Use dependencies from `Package.resolved` when `swift-show-dependencies.deplock` is not present. + else: + dependencies_from_manifest = package_data.dependencies - purl = PackageURL( - type=cls.default_package_type, name=name, version=version + if swift_resolved_package_resource: + swift_resolved_package_resource = swift_resolved_package_resource[0] + swift_resolved_package_data = ( + swift_resolved_package_resource.package_data ) - processed_dependencies.append( - models.DependentPackage( - purl=purl.to_string(), - scope="dependencies", - is_runtime=True, - is_optional=False, - is_resolved=True, - extracted_requirement=version, + + for package in swift_resolved_package_data: + version = package.get("version") + name = package.get("name") + + purl = PackageURL( + type=cls.default_package_type, name=name, version=version + ) + processed_dependencies.append( + models.DependentPackage( + purl=purl.to_string(), + scope="dependencies", + is_runtime=True, + is_optional=False, + is_resolved=True, + extracted_requirement=version, + ) ) - ) - for dependency in dependencies_from_manifest[:]: - dependency_purl = PackageURL.from_string(dependency.purl) + for dependency in dependencies_from_manifest[:]: + dependency_purl = PackageURL.from_string(dependency.purl) - if dependency_purl.name == name: - dependencies_from_manifest.remove(dependency) + if dependency_purl.name == name: + dependencies_from_manifest.remove(dependency) - processed_dependencies.extend(dependencies_from_manifest) + processed_dependencies.extend(dependencies_from_manifest) datafile_path = resource.path if package_data.purl: @@ -141,7 +228,12 @@ def assemble( datafile_path=datafile_path, ) - if swift_resolved_package_resource: + if swift_show_dependencies_resources: + package.datafile_paths.append(swift_show_dependencies_resource.path) + package.datasource_ids.append( + SwiftShowDependenciesDepLockHandler.datasource_id + ) + elif swift_resolved_package_resource: package.datafile_paths.append(swift_resolved_package_resource.path) package.datasource_ids.append(SwiftPackageResolvedHandler.datasource_id) @@ -196,7 +288,9 @@ def assemble( ): siblings = resource.siblings(codebase) swift_manifest_resource = [ - r for r in siblings if r.name == "Package.swift.json" + r + for r in siblings + if r.name in ("Package.swift.json", "Package.swift.deplock") ] # Skip the assembly if the ``Package.swift.json`` manifest is present. @@ -328,3 +422,109 @@ def get_namespace_and_name(url): canonical_name = hostname + path return canonical_name.rsplit("/", 1) + + +def get_flatten_dependencies(dependency_tree): + """ + Get the list of dependencies from the dependency graph where each + element is a DependentPackage containing its 1st order dependencies. + """ + dependencies = [] + transitive_dependencies = [] + + # process direct dependency + for dependency in dependency_tree: + transitives = dependency.get("dependencies", []) + transitive_dependencies.append(transitives) + parent_child_dep = get_dependent_package_from_subtree( + dependency=dependency, + is_top_level_dependency=True, + ) + dependencies.append(parent_child_dep) + + # process all transitive dependencies + while transitive_dependencies: + transitive_dependency_tree = transitive_dependencies.pop(0) + if not transitive_dependency_tree: + continue + + for transitive in transitive_dependency_tree: + dependencies_of_transitive_dependency = transitive.get("dependencies", []) + # add nested dependencies in transitive_dependencies queue for processing + transitive_dependencies.append(dependencies_of_transitive_dependency) + + parent_child_dep = get_dependent_package_from_subtree( + dependency=transitive, + is_top_level_dependency=False, + ) + + dependencies.append(parent_child_dep) + + return dependencies + + +def get_dependent_package_from_subtree(dependency, is_top_level_dependency): + """ + Get the DependentPackage for a ``dependency`` subtree along with its 1st + order dependencies. Set `is_direct` to True if the subtree is a direct + dependency for the top-level package. + """ + dependencies_of_parent = [] + repository_url = dependency.get("url") + version = dependency.get("version") + transitives = dependency.get("dependencies", []) + namespace, name = get_namespace_and_name(repository_url) + purl = PackageURL( + type="swift", + namespace=namespace, + name=name, + version=version, + ) + + for transitive in transitives: + transitive_repository_url = transitive.get("url") + transitive_version = transitive.get("version") + transitive_namespace, transitive_name = get_namespace_and_name( + transitive_repository_url + ) + transitive_purl = PackageURL( + type="swift", + namespace=transitive_namespace, + name=transitive_name, + version=transitive_version, + ) + + child_dependency = models.DependentPackage( + purl=transitive_purl.to_string(), + scope="dependencies", + extracted_requirement=transitive_version, + is_runtime=False, + is_optional=False, + is_resolved=True, + is_direct=True, + ).to_dict() + + dependencies_of_parent.append(child_dependency) + + parent_package_data_mapping = dict( + datasource_id=SwiftShowDependenciesDepLockHandler.datasource_id, + type=SwiftShowDependenciesDepLockHandler.default_package_type, + primary_language=SwiftShowDependenciesDepLockHandler.default_primary_language, + namespace=namespace, + name=name, + version=version, + dependencies=dependencies_of_parent, + is_virtual=True, + ) + parent_dependency = models.PackageData.from_data(parent_package_data_mapping) + + return models.DependentPackage( + purl=purl.to_string(), + scope="dependencies", + extracted_requirement=version, + is_runtime=False, + is_optional=False, + is_resolved=True, + is_direct=is_top_level_dependency, + resolved_package=parent_dependency, + ) diff --git a/tests/packagedcode/data/plugin/help.txt b/tests/packagedcode/data/plugin/help.txt index 7b5d549f707..f1e38d38eff 100755 --- a/tests/packagedcode/data/plugin/help.txt +++ b/tests/packagedcode/data/plugin/help.txt @@ -836,8 +836,8 @@ Package type: swift datasource_id: swift_package_manifest_json documentation URL: https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html primary language: Swift - description: JSON dump of Package.swift created with ``swift package dump-package > Package.swift.json`` - path_patterns: '*/Package.swift.json' + description: JSON dump of Package.swift created by DepLock or with ``swift package dump-package > Package.swift.json`` + path_patterns: '*/Package.swift.json', '*/Package.swift.deplock' -------------------------------------------- Package type: swift datasource_id: swift_package_resolved @@ -846,6 +846,13 @@ Package type: swift description: Resolved full dependency lockfile for Package.swift created with ``swift package resolve`` path_patterns: '*/Package.resolved', '*/.package.resolved' -------------------------------------------- +Package type: swift + datasource_id: swift_package_show_dependencies + documentation URL: https://forums.swift.org/t/swiftpm-show-dependencies-without-fetching-dependencies/51154 + primary language: Swift + description: Swift dependency graph created by DepLock + path_patterns: '*/swift-show-dependencies.deplock' +-------------------------------------------- Package type: war datasource_id: java_war_archive documentation URL: https://en.wikipedia.org/wiki/WAR_(file_format) diff --git a/tests/packagedcode/data/swift/packages/vercelui/Package.resolved b/tests/packagedcode/data/swift/packages/vercelui/Package.resolved new file mode 100644 index 00000000000..a06bf12c6e7 --- /dev/null +++ b/tests/packagedcode/data/swift/packages/vercelui/Package.resolved @@ -0,0 +1,50 @@ +{ + "pins" : [ + { + "identity" : "async-http-client", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swift-server/async-http-client.git", + "state" : { + "revision" : "16f7e62c08c6969899ce6cc277041e868364e5cf", + "version" : "1.19.0" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "6c89474e62719ddcc1e9614989fff2f68208fe10", + "version" : "1.1.0" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "cf281631ff10ec6111f2761052aa81896a83a007", + "version" : "2.58.0" + } + }, + { + "identity" : "vapor", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/vapor", + "state" : { + "revision" : "1bb4a2ed94bec7a92f92e82896408c785d068f5c", + "version" : "4.79.0" + } + }, + { + "identity" : "vercel", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swift-cloud/Vercel", + "state" : { + "revision" : "61f4815cdacf87203a861c73921549076c2a685b", + "version" : "1.15.2" + } + } + ], + "version" : 2 +} diff --git a/tests/packagedcode/data/swift/packages/vercelui/Package.swift.deplock b/tests/packagedcode/data/swift/packages/vercelui/Package.swift.deplock new file mode 100644 index 00000000000..9f9536740c2 --- /dev/null +++ b/tests/packagedcode/data/swift/packages/vercelui/Package.swift.deplock @@ -0,0 +1,116 @@ +{ + "cLanguageStandard" : null, + "cxxLanguageStandard" : null, + "dependencies" : [ + { + "sourceControl" : [ + { + "identity" : "vercel", + "location" : { + "remote" : [ + { + "urlString" : "https://github.com/swift-cloud/Vercel" + } + ] + }, + "productFilter" : null, + "requirement" : { + "range" : [ + { + "lowerBound" : "1.15.2", + "upperBound" : "2.0.0" + } + ] + } + } + ] + } + ], + "name" : "VercelUI", + "packageKind" : { + "root" : [ + "/workspace/vercel/VercelUI" + ] + }, + "pkgConfig" : null, + "platforms" : [ + { + "options" : [ + + ], + "platformName" : "macos", + "version" : "12.0" + }, + { + "options" : [ + + ], + "platformName" : "ios", + "version" : "15.0" + }, + { + "options" : [ + + ], + "platformName" : "tvos", + "version" : "15.0" + }, + { + "options" : [ + + ], + "platformName" : "watchos", + "version" : "8.0" + } + ], + "products" : [ + { + "name" : "VercelUI", + "targets" : [ + "VercelUI" + ], + "type" : { + "library" : [ + "automatic" + ] + } + } + ], + "providers" : null, + "swiftLanguageVersions" : null, + "targets" : [ + { + "dependencies" : [ + { + "byName" : [ + "Vercel", + null + ] + }, + { + "product" : [ + "TokamakStaticHTML", + "Tokamak", + null, + null + ] + } + ], + "exclude" : [ + + ], + "name" : "VercelUI", + "packageAccess" : false, + "resources" : [ + + ], + "settings" : [ + + ], + "type" : "regular" + } + ], + "toolsVersion" : { + "_version" : "5.6.0" + } +} diff --git a/tests/packagedcode/data/swift/packages/vercelui/swift-show-dependencies.deplock b/tests/packagedcode/data/swift/packages/vercelui/swift-show-dependencies.deplock new file mode 100644 index 00000000000..a714d1d31c8 --- /dev/null +++ b/tests/packagedcode/data/swift/packages/vercelui/swift-show-dependencies.deplock @@ -0,0 +1,65 @@ +{ + "identity":"vercelui", + "name":"VercelUI", + "url":"/workspace/vercel/VercelUI", + "version":"unspecified", + "path":"/workspace/vercel/VercelUI", + "dependencies":[ + { + "identity":"vercel", + "name":"Vercel", + "url":"https://github.com/swift-cloud/Vercel", + "version":"1.15.2", + "path":"/workspace/vercel/VercelUI/.build/checkouts/Vercel", + "dependencies":[ + { + "identity":"vapor", + "name":"vapor", + "url":"https://github.com/vapor/vapor", + "version":"4.79.0", + "path":"/workspace/vercel/VercelUI/.build/checkouts/vapor", + "dependencies":[ + { + "identity":"async-http-client", + "name":"async-http-client", + "url":"https://github.com/swift-server/async-http-client.git", + "version":"1.19.0", + "path":"/workspace/vercel/VercelUI/.build/checkouts/async-http-client", + "dependencies":[ + { + "identity":"swift-nio", + "name":"swift-nio", + "url":"https://github.com/apple/swift-nio.git", + "version":"2.58.0", + "path":"/workspace/vercel/VercelUI/.build/checkouts/swift-nio", + "dependencies":[ + { + "identity":"swift-atomics", + "name":"swift-atomics", + "url":"https://github.com/apple/swift-atomics.git", + "version":"1.1.0", + "path":"/workspace/vercel/VercelUI/.build/checkouts/swift-atomics", + "dependencies":[ + + ] + } + ] + }, + { + "identity":"swift-atomics", + "name":"swift-atomics", + "url":"https://github.com/apple/swift-atomics.git", + "version":"1.1.0", + "path":"/workspace/vercel/VercelUI/.build/checkouts/swift-atomics", + "dependencies":[ + + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/swift/swift-vercelui-expected.json b/tests/packagedcode/data/swift/swift-vercelui-expected.json new file mode 100644 index 00000000000..0f77561658d --- /dev/null +++ b/tests/packagedcode/data/swift/swift-vercelui-expected.json @@ -0,0 +1,1233 @@ +{ + "packages": [ + { + "type": "swift", + "namespace": null, + "name": "VercelUI", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "platforms": [ + { + "options": [], + "platformName": "macos", + "version": "12.0" + }, + { + "options": [], + "platformName": "ios", + "version": "15.0" + }, + { + "options": [], + "platformName": "tvos", + "version": "15.0" + }, + { + "options": [], + "platformName": "watchos", + "version": "8.0" + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "Package.swift.deplock", + "swift-show-dependencies.deplock" + ], + "datasource_ids": [ + "swift_package_manifest_json", + "swift_package_show_dependencies" + ], + "purl": "pkg:swift/VercelUI" + } + ], + "dependencies": [ + { + "purl": "pkg:swift/github.com/swift-cloud/Vercel@1.15.2", + "extracted_requirement": "1.15.2", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": { + "type": "swift", + "namespace": "github.com/swift-cloud", + "name": "Vercel", + "version": "1.15.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/vapor/vapor@4.79.0", + "extracted_requirement": "4.79.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/swift-cloud/Vercel@1.15.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + }, + { + "purl": "pkg:swift/github.com/vapor/vapor@4.79.0", + "extracted_requirement": "4.79.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/vapor", + "name": "vapor", + "version": "4.79.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/swift-server/async-http-client@1.19.0", + "extracted_requirement": "1.19.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/vapor/vapor@4.79.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + }, + { + "purl": "pkg:swift/github.com/swift-server/async-http-client@1.19.0", + "extracted_requirement": "1.19.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/swift-server", + "name": "async-http-client", + "version": "1.19.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/apple/swift-nio@2.58.0", + "extracted_requirement": "2.58.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/swift-server/async-http-client@1.19.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + }, + { + "purl": "pkg:swift/github.com/apple/swift-nio@2.58.0", + "extracted_requirement": "2.58.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-nio", + "version": "2.58.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/apple/swift-nio@2.58.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-atomics", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/apple/swift-atomics@1.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-atomics", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {}, + "dependency_uid": "pkg:swift/github.com/apple/swift-atomics@1.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Package.swift.deplock", + "datasource_id": "swift_package_manifest_json" + } + ], + "files": [ + { + "path": "Package.resolved", + "type": "file", + "package_data": [ + { + "type": "swift", + "namespace": "github.com/swift-server", + "name": "async-http-client", + "version": "1.19.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_resolved", + "purl": "pkg:swift/github.com/swift-server/async-http-client@1.19.0" + }, + { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-atomics", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_resolved", + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0" + }, + { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-nio", + "version": "2.58.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_resolved", + "purl": "pkg:swift/github.com/apple/swift-nio@2.58.0" + }, + { + "type": "swift", + "namespace": "github.com/vapor", + "name": "vapor", + "version": "4.79.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_resolved", + "purl": "pkg:swift/github.com/vapor/vapor@4.79.0" + }, + { + "type": "swift", + "namespace": "github.com/swift-cloud", + "name": "Vercel", + "version": "1.15.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_resolved", + "purl": "pkg:swift/github.com/swift-cloud/Vercel@1.15.2" + } + ], + "for_packages": [ + "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "Package.swift.deplock", + "type": "file", + "package_data": [ + { + "type": "swift", + "namespace": null, + "name": "VercelUI", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "platforms": [ + { + "options": [], + "platformName": "macos", + "version": "12.0" + }, + { + "options": [], + "platformName": "ios", + "version": "15.0" + }, + { + "options": [], + "platformName": "tvos", + "version": "15.0" + }, + { + "options": [], + "platformName": "watchos", + "version": "8.0" + } + ] + }, + "dependencies": [ + { + "purl": "pkg:swift/github.com/swift-cloud/Vercel", + "extracted_requirement": "vers:swift/>=1.15.2|<2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_manifest_json", + "purl": "pkg:swift/VercelUI" + } + ], + "for_packages": [ + "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "swift-show-dependencies.deplock", + "type": "file", + "package_data": [ + { + "type": "swift", + "namespace": null, + "name": "VercelUI", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/swift-cloud/Vercel@1.15.2", + "extracted_requirement": "1.15.2", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": { + "type": "swift", + "namespace": "github.com/swift-cloud", + "name": "Vercel", + "version": "1.15.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/vapor/vapor@4.79.0", + "extracted_requirement": "4.79.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/vapor/vapor@4.79.0", + "extracted_requirement": "4.79.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/vapor", + "name": "vapor", + "version": "4.79.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/swift-server/async-http-client@1.19.0", + "extracted_requirement": "1.19.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/swift-server/async-http-client@1.19.0", + "extracted_requirement": "1.19.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/swift-server", + "name": "async-http-client", + "version": "1.19.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/apple/swift-nio@2.58.0", + "extracted_requirement": "2.58.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/apple/swift-nio@2.58.0", + "extracted_requirement": "2.58.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-nio", + "version": "2.58.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-atomics", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + }, + { + "purl": "pkg:swift/github.com/apple/swift-atomics@1.1.0", + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": false, + "is_optional": false, + "is_resolved": true, + "is_direct": false, + "resolved_package": { + "type": "swift", + "namespace": "github.com/apple", + "name": "swift-atomics", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Swift", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": null, + "declared_license_expression_spdx": null, + "license_detections": [], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": true, + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies" + }, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "swift_package_show_dependencies", + "purl": "pkg:swift/VercelUI" + } + ], + "for_packages": [ + "pkg:swift/VercelUI?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/test_swift.py b/tests/packagedcode/test_swift.py index 0318c514489..f4e1337edef 100644 --- a/tests/packagedcode/test_swift.py +++ b/tests/packagedcode/test_swift.py @@ -101,3 +101,24 @@ def test_package_scan_swift_end_to_end_full_mapboxmaps_resolved_only(self): check_json_scan( expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES ) + + def test_package_scan_swift_end_to_end_full_vercelui_resolved_only(self): + test_dir = self.get_test_loc("packages/vercelui") + result_file = self.get_temp_file("json") + expected_file = self.get_test_loc( + "swift-vercelui-expected.json" + ) + run_scan_click( + [ + "--package", + "--strip-root", + "--processes", + "-1", + test_dir, + "--json", + result_file, + ] + ) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES + )