diff --git a/src/packagedcode/nuget.py b/src/packagedcode/nuget.py index a1cf1036390..dee1afb39d5 100644 --- a/src/packagedcode/nuget.py +++ b/src/packagedcode/nuget.py @@ -8,6 +8,7 @@ # import xmltodict +from packageurl import PackageURL from packagedcode import models from packagedcode.utils import build_description @@ -15,7 +16,67 @@ """ Handle NuGet packages and their manifests. """ -# TODO: add dependencies + + +def get_dependencies(nuspec): + """ + Yield DependentPackage found in a NuGet ``nuspec`` object. + """ + # This is either a list of dependency or a list of group/dependency + # or a single dep or a single group mapping + + dependencies = nuspec.get('dependencies') or [] + if isinstance(dependencies, dict): + # wrap the mapping in a list if we have more than one dependencies + dependencies = [dependencies] + + for depends in dependencies: + groups = depends.get('group') or [] + if groups: + if isinstance(groups, dict): + # wrap the mapping in a list + groups = [groups] + + for group in groups: + extra_data = dict(framework=group['@targetFramework']) + deps = group.get('dependency') or [] + yield from _get_dep_packs(deps, extra_data) + else: + # {'dependency': {'@id': 'jQuery', '@version': '1.9.1'}} + deps = depends.get('dependency') or [] + yield from _get_dep_packs(deps, extra_data={}) + + +def _get_dep_packs(deps, extra_data): + """ + Yield DependentPackage found in a NuGet ``deps`` mapping or list of mappings. + """ + if not deps: + return + + if isinstance(deps, dict): + # wrap the mapping in a list + deps = [deps] + + for dep in deps: + extra = dict(extra_data) or {} + include = dep.get('@include') + if include: + extra['include'] = include + exclude = dep.get('@exclude') + if exclude: + extra['exclude'] = exclude + + yield models.DependentPackage( + purl=str(PackageURL(type='nuget', name=dep.get('@id'))), + # this is a range, not a version + extracted_requirement=dep.get('@version'), + scope='dependency', + is_runtime=True, + is_optional=False, + is_resolved=False, + extra_data=extra, + ) def get_urls(name, version, **kwargs): @@ -46,7 +107,7 @@ class NugetNuspecHandler(models.DatafileHandler): @classmethod def parse(cls, location): - with open(location , 'rb') as loc: + with open(location, 'rb') as loc: parsed = xmltodict.parse(loc) if not parsed: @@ -62,14 +123,14 @@ def parse(cls, location): # Summary: A short description of the package for UI display. If omitted, a # truncated version of description is used. - description = build_description(nuspec.get('summary') , nuspec.get('description')) + description = build_description(nuspec.get('summary'), nuspec.get('description')) # title: A human-friendly title of the package, typically used in UI # displays as on nuget.org and the Package Manager in Visual Studio. If not # specified, the package ID is used. title = nuspec.get('title') if title and title != name: - description = build_description(nuspec.get('title') , description) + description = build_description(title, description) parties = [] authors = nuspec.get('authors') @@ -98,7 +159,6 @@ def parse(cls, location): # This is a SPDX license expression if 'license' in nuspec: extracted_license_statement = nuspec.get('license') - # TODO: try to convert to normal license expression # Deprecated and not a license expression, just a URL elif 'licenseUrl' in nuspec: extracted_license_statement = nuspec.get('licenseUrl') @@ -111,8 +171,10 @@ def parse(cls, location): description=description or None, homepage_url=nuspec.get('projectUrl') or None, parties=parties, + dependencies=list(get_dependencies(nuspec)), extracted_license_statement=extracted_license_statement, copyright=nuspec.get('copyright') or None, vcs_url=vcs_url, **urls, ) + diff --git a/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected b/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected index 9213ff8ca47..d38fe0543a3 100644 --- a/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected @@ -69,7 +69,138 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/NETStandard.Library", + "extracted_requirement": "1.6.1", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Diagnostics.TraceSource", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection.TypeExtensions", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Xml.XmlDocument", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Dynamic.Runtime", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection.Emit", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Collections.Specialized", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.ComponentModel", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.ComponentModel.TypeConverter", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + } + ], "repository_homepage_url": "https://www.nuget.org/packages/Castle.Core/4.2.1", "repository_download_url": "https://www.nuget.org/api/v2/package/Castle.Core/4.2.1", "api_data_url": "https://api.nuget.org/v3/registration3/castle.core/4.2.1.json", diff --git a/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected b/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected index 1db5958ede5..100a7895a58 100644 --- a/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected @@ -69,7 +69,224 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.ApiExplorer", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Cors", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.DataAnnotations", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Formatters.Json", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Localization", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Razor", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.ViewFeatures", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.Framework.Caching.Memory", + "extracted_requirement": "1.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.Framework.DependencyInjection", + "extracted_requirement": "1.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNX4.5.1" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.ApiExplorer", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Cors", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.DataAnnotations", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Formatters.Json", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Localization", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.Razor", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.AspNet.Mvc.ViewFeatures", + "extracted_requirement": "6.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.Framework.Caching.Memory", + "extracted_requirement": "1.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + }, + { + "purl": "pkg:nuget/Microsoft.Framework.DependencyInjection", + "extracted_requirement": "1.0.0-beta7", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": "DNXCore5.0" + } + } + ], "repository_homepage_url": "https://www.nuget.org/packages/Microsoft.AspNet.Mvc/6.0.0-beta7", "repository_download_url": "https://www.nuget.org/api/v2/package/Microsoft.AspNet.Mvc/6.0.0-beta7", "api_data_url": "https://api.nuget.org/v3/registration3/microsoft.aspnet.mvc/6.0.0-beta7.json", diff --git a/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected b/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected index 84ead441397..2a97fd9a78a 100644 --- a/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected @@ -69,7 +69,28 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/Microsoft.Bcl", + "extracted_requirement": "1.1.10", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:nuget/Microsoft.Bcl.Build", + "extracted_requirement": "1.0.14", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {} + } + ], "repository_homepage_url": "https://www.nuget.org/packages/Microsoft.Net.Http/2.2.29", "repository_download_url": "https://www.nuget.org/api/v2/package/Microsoft.Net.Http/2.2.29", "api_data_url": "https://api.nuget.org/v3/registration3/microsoft.net.http/2.2.29.json", diff --git a/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected b/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected index e68f22e928c..0599c56877c 100644 --- a/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected @@ -69,7 +69,18 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/jQuery", + "extracted_requirement": "1.9.1", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {} + } + ], "repository_homepage_url": "https://www.nuget.org/packages/bootstrap/4.0.0-alpha", "repository_download_url": "https://www.nuget.org/api/v2/package/bootstrap/4.0.0-alpha", "api_data_url": "https://api.nuget.org/v3/registration3/bootstrap/4.0.0-alpha.json", diff --git a/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected b/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected index 31cafc8b5c7..eaf0a3fe40e 100644 --- a/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected @@ -69,7 +69,18 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/jQuery", + "extracted_requirement": "1.6.4", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {} + } + ], "repository_homepage_url": "https://www.nuget.org/packages/jQuery.UI.Combined/1.11.4", "repository_download_url": "https://www.nuget.org/api/v2/package/jQuery.UI.Combined/1.11.4", "api_data_url": "https://api.nuget.org/v3/registration3/jquery.ui.combined/1.11.4.json", diff --git a/tests/packagedcode/data/plugin/nuget-package-expected.json b/tests/packagedcode/data/plugin/nuget-package-expected.json index 5578fd30490..13c6c326a48 100644 --- a/tests/packagedcode/data/plugin/nuget-package-expected.json +++ b/tests/packagedcode/data/plugin/nuget-package-expected.json @@ -82,7 +82,178 @@ "purl": "pkg:nuget/Castle.Core@4.2.1" } ], - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/NETStandard.Library", + "extracted_requirement": "1.6.1", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/NETStandard.Library?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Diagnostics.TraceSource", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Diagnostics.TraceSource?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Reflection.TypeExtensions", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Reflection.TypeExtensions?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Xml.XmlDocument", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Xml.XmlDocument?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Dynamic.Runtime", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Dynamic.Runtime?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Reflection", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Reflection?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Reflection.Emit", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Reflection.Emit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.Collections.Specialized", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.Collections.Specialized?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.ComponentModel", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.ComponentModel?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + }, + { + "purl": "pkg:nuget/System.ComponentModel.TypeConverter", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + }, + "dependency_uid": "pkg:nuget/System.ComponentModel.TypeConverter?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "Castle.Core.nuspec", + "datasource_id": "nuget_nupsec" + } + ], "license_references": [ { "key": "apache-2.0", @@ -235,7 +406,138 @@ "source_packages": [], "file_references": [], "extra_data": {}, - "dependencies": [], + "dependencies": [ + { + "purl": "pkg:nuget/NETStandard.Library", + "extracted_requirement": "1.6.1", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Diagnostics.TraceSource", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection.TypeExtensions", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Xml.XmlDocument", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Dynamic.Runtime", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Reflection.Emit", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.Collections.Specialized", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.ComponentModel", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + }, + { + "purl": "pkg:nuget/System.ComponentModel.TypeConverter", + "extracted_requirement": "4.3.0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "extra_data": { + "framework": ".NETStandard1.3", + "exclude": "Build,Analyzers" + } + } + ], "repository_homepage_url": "https://www.nuget.org/packages/Castle.Core/4.2.1", "repository_download_url": "https://www.nuget.org/api/v2/package/Castle.Core/4.2.1", "api_data_url": "https://api.nuget.org/v3/registration3/castle.core/4.2.1.json",